Amazon CodeGuru のよくある質問

全般

CodeGuru には、Amazon CodeGuru Security と Amazon CodeGuru Profiler の 2 つのコンポーネントがあります。CodeGuru Security は、機械学習 (ML) とプログラム分析に基づくツールで、アプリケーションコードのセキュリティ脆弱性を発見します。CodeGuru Security はハードコードされた認証情報もスキャンします。CodeGuru Profiler は、実稼働状態のアプリケーションのパフォーマンスを最適化し、最もコストが高いコード行を特定することで、運用コストを大幅に削減します。

CodeGuru が一般公開されました。Amazon CodeGuru コンソールで今すぐお使いいただけます。

サポートされている AWS リージョンを確認するには、すべての AWS グローバルインフラストラクチャ用の「AWS リージョン表」をご覧ください。詳細については、AWS 全般のリファレンスの「リージョンとエンドポイント」を参照してください。

Amazon CodeGuru セキュリティ

CodeGuru Security は、ML とプログラム解析ベースのコードスキャンツールで、アプリケーションコードのセキュリティ脆弱性を発見します。

CodeGuru Security は現在、Java、Python、JavaScript、TypeScript、C#、CloudFormation、Terraform、Go、Ruby のスキャンをサポートしています。

CodeGuru コンソールにアクセスして、CodeGuru セキュリティをデベロッパーライフサイクルに統合してください。継続的インテグレーションおよび継続的デリバリー (CI/CD) ツール、リポジトリスキャン、統合開発環境 (IDE) に統合できます。
 

CodeGuru セキュリティでは、推奨事項を生成するため、コードの読み取り専用アクセスが必要です。お客様の信頼、プライバシー、そしてお客様のコンテンツのセキュリティは、私たちの最優先事項です。AWS は、お客様のコンテンツへの不正アクセスや開示を防止し、AWS の利用がお客様に対するコミットメントを遵守することを保証するために、転送中の暗号化を含む適切な管理を実施します。また、カスタマーマネージド型の KMS キー (CMCMK) による暗号化もサポートしています。詳細については、「データプライバシーのよくある質問」を参照してください。

いいえ、CodeGuru セキュリティはソースコードを保存しません。
 

CodeGuru セキュリティは、ロジスティック回帰とニューラルネットワークを組み合わせたルールマイニングと教師あり ML モデルを使用してトレーニングされます。たとえば、機密データリークに関するトレーニング中には、それらが使用されているすべてのコードパスに対して完全なコード分析を行い、対応する機能セットを作成します。さらに、それらをロジスティック回帰モデルおよび畳み込みニューラルネットワーク (CNN) への入力情報として使用します。

CodeGuru セキュリティは、Amazon Inspector の Lambda コードスキャンと統合されています。リポジトリや CI/CD ツールとのさらなる統合が間もなく開始されます。
 

Amazon CodeGuru Profiler

Amazon CodeGuru Profiler により、デベロッパーおよび IT オペレーターは、アプリケーションのランタイム動作を簡単に把握し、パフォーマンスを向上させ、インフラストラクチャのコストを削減できます。Amazon CodeGuru Profiler は、アプリケーションのランタイムプロファイルを分析し、コード内で最も影響の大きい部分のパフォーマンスを向上させる方法についてのガイダンスをデベロッパーに提供する、インテリジェントな推奨事項と可視化を提供します。

プロファイリンググループは、ユーザーが作成する論理グループで、1 つのアプリケーションの境界を表します。たとえばマイクロサービスアーキテクチャでは、割り当てられたマイクロサービスのプロファイルがプロファイリンググループにより集約され、それらすべてが 1 つのプロファイルに構成されます。

ログ記録を実行しても (CPU の利用率ではなく) レイテンシーのみを監視する場合には、限られたシナリオについてしか効果がありません。また、デベロッパーとしてはアプリケーションのすべての機能を (パフォーマンスには影響を与えないように) 記録する必要があるため、その実装は時間を浪費する作業となります。デベロッパーには、効果的なモニタリングと稼働中アプリケーションでのトラブルシューティングに必要なツールが与えられていないのです。ここで、プロファイリングが登場します。Amazon CodeGuru Profiler は、シナリオに関係なく、そのアプリケーションの動作で発生するすべてのデータを収集するように設計されています。CodeGuru Profiler は、一般的に見られるパフォーマンスの非効率性に関する知識ベースを参照することで、稼働中のアプリケーション内でパフォーマンスに影響しているコードパターンを自動的に検出します。そこで提供された推奨事項に従って、デベロッパーは問題の修正を行えます。

従来の APM も、モニタリング、トレース、アプリケーションのパフォーマンスに関して有用なデータを提供します。Amazon CodeGuru Profiler は、アプリケーションの実行時データの視覚化や、検出されたパフォーマンスの問題に関する実用的な推奨事項を提供することにより、これらの APM の機能を補完します。加えて、機械学習を使用して検出したアプリケーション内の異常に関するアラートを発生し、コード上の問題個所の指摘も行います。Amazon CodeGuru Profiler を使用すると、パフォーマンスの最適化に最も効果的なコードの部分や、コストを削減できる可能性などを簡単に確認しながら、その対処方法に関するガイダンスを受けることができます。その際、パフォーマンスエンジニアリングの高度な知識は必要ありません。Amazon CodeGuru Profiler は、EC2インスタンス、コンテナー、AWS Lambda を含むサーバーレスコンピューティングプラットフォームとオンプレミスの両方をプロファイリングできます。一部のスタンドアロンプロファイラーはテスト環境でのみ実行されるように設計されていますが、Amazon CodeGuru Profiler の場合は、実稼働環境の現実的なトラフィック負荷の下で、アプリケーションに影響を与えずに継続的に実行できるように設計されています。これは、ベアメタルホストでの実行時を含む、実稼働環境での運用上の問題のトラブルシューティングに役立ちます。

Amazon CodeGuru Profiler は、Amazon EC2 でホストされているアプリケーション、Amazon ECS と Amazon EKS で実行されるコンテナ化されたアプリケーション、および AWS Fargate と AWS Lambda で実行されているサーバーレスアプリケーションで動作します。 さらに、Amazon CodeGuru Profiler をオンプレミスで実行できます。

Amazon CodeGuru Profiler のエージェントは、AWS Lambda 関数に割り当てられたリソース (CPU、メモリ) を使用します。このサービスは、プロセス内のスレッドとして実行されますが、アプリケーションのパフォーマンスには、最低限の影響しか与えないように調整されています。アプリケーションにおいて、AWS Lambda 関数用のリソースの大部分を消費している場合は、このエージェントが適切に機能できるよう、リソースの追加を検討してください。

CodeGuru Profiler は現在、Java、Python (プレビュー版) 、および Scala や Kotlin などの JVM 言語をサポートしています。

Amazon CodeGuru Profiler は、エージェント、プロファイラーサービス、インテリジェントな推奨事項提案の、3 つの部分で構成されています。このエージェントは、コマンドラインによりアプリケーションとともに実行開始でき、アプリケーションの一部のインプロセススレッドとして実行されます。エージェントを実行している各サービスインスタンスから取得したデータが 5 分ごとにプロファイラーサービスに送信され、そこで集約されます。その後、Amazon CodeGuru Profiler がインタラクティブなフレームグラフでプロファイルデータを公開します。これにより、アプリケーションのパフォーマンスを視覚化できます。また、Amazon CodeGuru Profiler は、プロファイルされたデータを継続的にスキャンし、Amazon やパフォーマンスエンジニアリングのベストプラクティスと比較します。パフォーマンスの問題が検出された場合は、インテリジェントな推奨事項を積極的に知らせます。さらに、機械学習を利用して、アプリケーションの実行時データを継続的に分析し、アプリケーションプロファイルに異常が検出された場合はアラートを発し、コード上の問題点を指摘します。

CodeGuru Profiler は、Java およびその他の JVM 言語の CPU (アクティブ CPU とウォールクロック時間) とメモリ (ヒープサマリー)、および Python アプリケーションの CPU (ウォールクロック時間) をプロファイルします。

はい。メモリプロファイリングを有効にしてプロファイリングを開始すると、CodeGuru Profiler はアプリケーションの CPU 情報とメモリ情報の両方を収集します。特定のアプリケーションの CPU データとメモリデータの両方を取得するために必要なプロファイリンググループは 1 つだけです。

CodeGuru Profiler は、ヒープサマリー情報を提供します。ヒープサマリーは、特定の時間枠 (通常は 5 分) におけるオブジェクトタイプ (String、int、char[] など) およびカスタムタイプごとのメモリ使用率を統合して表示します。CodeGuru Profiler は、オブジェクトの合計サイズとその数の両方を追跡します。これらのメトリックはタイムライングラフで表示されるため、オブジェクトタイプごとのメモリ使用率の傾向とピークを簡単に見つけることができます。

ヒープサマリーは、2 つのシナリオで役立ちます。まず、潜在的なメモリリークを見つけることができます。1 つ以上のオブジェクトタイプのメモリ使用率の曲線が絶えず増加している場合は、リークを示している可能性があり、メモリ不足エラーやアプリケーションのクラッシュにつながる可能性があります。2 つ目のシナリオは、アプリケーションのメモリフットプリントを最適化する場合です。この場合、オブジェクトタイプごとのメモリ使用率の分析結果は、どこに焦点を合わせるかを知るのに役立ちます。たとえば、予想外に大量のメモリが特定のオブジェクトタイプに割り当てられていることを知れば、そのタイプのオブジェクトの割り当てと参照しているアプリケーションの部分を中心に分析と最適化すればよいということになります。