Amazon Web Services ブログ

Amazon CodeGuru の新機能 – Python サポート、Security Detector、および Memory Profiling

Amazon CodeGuru は、コードの品質を向上させるデベロッパーツールであり、次の 2 つの主要コンポーネントで構成されています。

  • CodeGuru Reviewer は、プログラム分析と機械学習を使用して、コード内で見つけにくい潜在的な欠陥を検出し、改善のための提案を提供します。
  • CodeGuru Profiler は、ライブアプリケーションからランタイムパフォーマンスデータを収集し、アプリケーションのパフォーマンスを微調整するのに役立つ視覚化と推奨事項を提供します。

本日は、3 つの新機能を発表いたします。

  • CodeGuru Reviewer および CodeGuru Profiler 用の Python のサポート (プレビュー) – CodeGuru を使用して Python で記述されたアプリケーションを改善できるようになりました。このリリース以前には、CodeGuru Reviewer は Java コードを分析でき、CodeGuru Profiler は Java 仮想マシン (JVM) で実行されるアプリケーションをサポートしていました。
  • CodeGuru Reviewer 用の Security Detector – CodeGuru Reviewer 用の新しい検出機能セットで、セキュリティの脆弱性を特定し、Java コード内のセキュリティのベストプラクティスをチェックします。
  • CodeGuru Profiler 用の Memory Profiling – 時間の経過に伴うオブジェクトタイプごとのメモリ保持の新しいビジュアライゼーションです。これにより、メモリリークを検出し、アプリケーションによるメモリの使用を最適化することが容易になります。

これらの機能をもっと詳しく見てみましょう。

CodeGuru Reviewer および CodeGuru Profiler 用の Python のサポート (プレビュー)
CodeGuru Reviewer 用の Python のサポートはプレビューで利用でき、同時実行、データ構造と制御フロー、科学/数学演算、エラー処理、などの複数のカテゴリにおいて、標準ライブラリおよび当然ながら AWS のベストプラクティスを使用して、アプリケーションの Python コードを改善する方法に関する推奨事項を提供します。

また、CodeGuru Profiler を使用して Python アプリケーションからランタイムパフォーマンスデータを収集し、ビジュアライゼーションを取得して、CPU 上でコードがどのように実行されているか、およびどこで時間が消費されているかを特定するのに役立てることができます。これにより、アプリケーションにおいて最も費用がかかっているコード行を検出できます。これらの部分にチューニングアクティビティを集中させることで、インフラストラクチャコストを削減し、アプリケーションのパフォーマンスを向上させることができます。

それでは、いくつかの Python コードをしようして、CodeGuru Reviewer が動作している場面を見てみましょう。8 年前に AWS に入社したとき、私が最初に作成したプロジェクトの 1 つは、yas3fs (Yet Another S3-backed File System) と呼ばれる、Amazon Simple Storage Service (S3) に接続する Filesystem in Userspace (FUSE) インターフェイスです。これは、より人気のある s3fs-fuse プロジェクトに触発されたものでしたが、Amazon Simple Notification Service (SNS) 通知によって同期された分散キャッシュを実装するためにゼロから書き直されました (現在、多くの貢献者のおかげで、S3 イベント通知を使用しています)。これは、Python によるプログラミングと S3 について、より詳しく学習するための良い口実でもありました。これは個人的なプロジェクトであり、当時、オープンソースとして利用可能になりました。現在、共有ファイルシステムが必要な場合は、Amazon Elastic File System (EFS) を使用できます。

CodeGuru コンソールで、yas3fs リポジトリを関連付けます。GitHub Enterprise Cloud および GitHub Enterprise Server、Bitbucket、または AWS CodeCommit を含む GitHub からリポジトリを関連付けることができます。

その後、CodeGuru からコードレビューを以下の 2 つの方法で取得できます。

  • プルリクエストを作成するときに自動的に取得します。これは、お客様とお客様のチームがコードベースで作業している場合に使用すべき素晴らしい方法です。
  • 手動で取得して、1 つのブランチ内のすべてのコードのコードレビューを取得するためのリポジトリ分析を作成します。これは、既存のコードベースで GodeGuru の使用を開始する場合に便利です。

リポジトリ全体を関連付けただけなので、完全な分析を実行し、ブランチ名を書き留めてレビューします (申し訳ありませんが、当時はまだ master を使用していました。現在では新しいプロジェクトには main を使用します)。

数分後、コードレビューが完了しました。14 個の推奨事項があります。悪くはありませんが、私は間違いなくコードを改善することができます。これらは、私が得たいくつかの推奨事項です。当時、私は例外とグローバル変数を使用し過ぎていました。

CodeGuru Reviewer 用の Security Detector
新しい CodeGuru Reviewer Security Detector は、自動化された推論を使用して、すべてのコードパスを分析し、Java コードの奥深くにある潜在的なセキュリティ問題を検出します。これは、複数のメソッドやファイルにまたがっていたり、複数の操作のシーケンスが伴っていたりすることもあります。この検出機能を構築するために、私たちは、Amazon の 20 年以上の経験から得られた教訓とベストプラクティスを使用しました。

Security Detector は、脆弱なハッシュ暗号化など、上位 10 個の Open Web Application Security Project (OWASP) カテゴリにおけるセキュリティの脆弱性を特定しています。

Security Detector が問題を検出すると、推奨される修正と説明が表示されます。このように、AWS Key Management Service (KMS) および Amazon Elastic Compute Cloud (EC2)、ならびに一般的な Java 暗号化および TLS/SSL ライブラリのためのベストプラクティスなど、AWS API のセキュリティのベストプラクティスに従う方がはるかに簡単です。

Security Detector を使用することで、セキュリティエンジニアはアーキテクチャおよびアプリケーション固有のセキュリティのベストプラクティスに集中でき、コードレビュアーは他の改善に集中できます。

CodeGuru Profiler 用の Memory Profiling
JVM で実行されているアプリケーションについて、CodeGuru Profiler は Heap Summary (時間枠内のメモリー保持の統合ビュー) を表示できるようになりました。これにより、オブジェクトタイプごとの全体的なサイズとオブジェクト数 (Stringintchar[]、およびカスタム型) を追跡します。これらのメトリクスはタイムライングラフに表示されるため、オブジェクトタイプごとのメモリ使用状況の傾向とピークを簡単に見つけることができます。

これが役立つシナリオをいくつか挙げます。

メモリリーク – 1 つまたは複数のオブジェクトタイプに対するメモリ使用状況の継続的な増加曲線は、リーク (ここではアプリケーションによるメモリオブジェクトの不必要な保持を意味します) を示している可能性があり、メモリ不足エラーやアプリケーションのクラッシュにつながる可能性があります。

メモリの最適化 – オブジェクトタイプごとのメモリ使用状況の内訳は、ヒープ使用量の合計など JVM レベルのメトリクスだけに基づいた、従来のメモリ使用状況のモニタリングよりも優れています。特定のオブジェクトタイプに予期せぬ大量のメモリが関連付けられていることを知ることで、そのタイプのオブジェクトの割り当てと参照を担当するアプリケーションの部分についての分析と最適化の作業に集中できます。

たとえば、これは時間の経過とともに Javaアプリケーションでメモリがどのように使用されているかを示すグラフです。利用可能な合計キャパシティーと使用領域とは別に、byte[]java.lang.UUIDjava.util.LinkedHashMap のエントリなど、いくつかの特定のオブジェクトタイプによってメモリがどのように使用されているかを確認できます。これらのオブジェクトタイプによって保持されるメモリの時間の経過に伴う継続的な増加は、疑いを抱かせるのに足るものです。おそらく私が調査しなければならないメモリリークがあります。

すぐ下の表では、ヒープにメモリを割り当てるオブジェクトタイプの長いリストがあります。最初の 3 つが選択されているので、その 3 つが上のグラフで示されています。ここでは、他のオブジェクトタイプを調べて、時間の経過に伴うメモリの使用状況を確認するためにそれらを選択できます。私がすでに選択した 3 つは、メモリリークの影響を受けるリスクが他よりも高いように見えます。

今すぐご利用いただけます
これらの新機能は、Amazon CodeGuru が提供されているすべてのリージョンで今すぐご利用いただけます。詳細については、AWS リージョン別のサービステーブルをご覧ください。

Python サポート、Security Detector、および Memory Profiling の料金の変更はありません。前払い料金やコミットメントなしで、使用した分についてお支払いいただきます。

Amazon CodeGuru の詳細をご覧ください。これらの新機能を今すぐ使用して、アプリケーションのコード品質を向上させましょう。

Danilo