🦔

Amazon CodeGuruの超詳細解説

2023/11/08に公開

はじめに

この記事はDevOps on AWS大全の一部です。
DevOps on AWS大全の一覧はこちら

この記事ではAWS CodeGuruとはどういうサービスで何ができるのかを超詳細にまとめています。

具体的には以下流れで説明します。

  • Amazon CodeGuruとは
  • Amazon CodeGuruの仕組み
  • Amazon CodeGuru for Advance

AWSの区分でいう「Level 200:トピックの入門知識を持っていることを前提に、ベストプラクティス、サービス機能を解説するレベル」の内容です。

この記事を読んでほしい人

  • Amazon CodeGuruがどういうサービスか説明できるようになりたい人
  • Amazon CodeGuruを採用するときのベストプラクティスを説明できるようになりたい人
  • AWS Certified DevOps Engineer Professionalを目指している人

Amazon CodeGuruとは

ソースコードのレビューとアプリケーションパフォーマンスに関する推奨を行ってくれる機械学習ベースのサービスです。

CodeGuru Securityは以前、CodeGuru Reviewerとして提供されていたものでソースコードを解析し、推奨の修正内容を提示してくれます。

一方、CodeGuru Profilerはアプリケーションパフォーマンスの最適化に関する解析を行い、推奨の修正内容を提示してくれます。

1つのサービスの中に2つの機能があると思えばよいでしょう。

Amazon CodeGuruの仕組み

CodeGuru Security

CodeGuru Securityは重大な問題、セキュリティ脆弱性、見つけにくいバグの特定を機械学習と自動推論を用いて実現します。

CodeGuruはリポジトリ系あるいはIDEと統合して利用します。

リポジトリ系で統合できるのは以下になります。

  • GitHub
  • GitLab
  • Bitbucket
  • AWS CLI
  • AWS CodePipeline

続いてIDEとの統合についてです。
IDEとの統合はCodeReviewer時代はなかった統合です。
IDEとの統合が登場しCodeGuruの利便性が非常に上がっています。

具体的には以下IDEと統合されています。

  • Amazon SageMaker Studio
  • JupyterLab
  • Visual Studio Code with AWS Toolkit
  • IntelliJ IDEA with AWS Toolkit

また、スキャン対象として対応しているのは以下言語/ソースコードです。

  • Java
  • JavaScript
  • Python
  • C#
  • TypeScript
  • CloudFormation
  • Terraform

これもCodeGuru Reviewerと比較して大幅に拡充されているので実プロジェクトで採用しやすくなりました。

補足程度にトレーニング方法を書いておきます。
Amazon CodeGuruはロジスティック回帰とニューラルネットワークを組み合わせたルールマイニングと教師ありMLモデルを使用してトレーニングされています。
なお、教師データはオープンソースとAmazonが持っているソースコードです。

CodeGuru Profiler

CodeGuru Profilerはアプリケーションの実行時の動作を理解するのに役立ちます。
例えば定常的なロギング動作で過剰なCPUを消費していることの特定などが可能です。

CodeGuru Profilerはアプリケーションのパフォーマンスを向上させるだけではなく、ヒープサマリの提供や、冗長なコードの特定も行ってくれます。

これによりソースコード的にもリソース的にも最適化されたアプリケーションの構築を補助します。

Amazon CodeGuru for Advance

LambdaへのCodeGuru Profiler統合

CodeGuru ProfilerをLambdaで作成したアプリケーションに適用するためには通常とは異なる手順をとる必要があります。

具体的にはFunction DecoratorとしてLambda関数のZipファイルに追加する、あるいはLambda関数の設定でCodeGuru Proflierを有効にする、の2パターンの手順が存在します。

Function Decoratorとして書く時の例は以下の通りです。

from codeguru_profiler_agent import with_lambda_profiler

@with_lambda_profiler(profiling_group_name="MyGroupName")
def handler_name(event, context):
    return "Hello World" 

code_profiler_agentを記載して依存関係をLambda関数のZipファイルあるいはLambda Layersに追加しましょう。

Lambda関数の設定で有効にするときにはマネジメントコンソールでLambdaの画面に行きLambda関数の設定から有効化しましょう。

また、どちらの手順であってもLambdaの実行ロールに必要な権限の追加を忘れないようにしてください。

まとめ

この記事ではAWS CodeGuruとはどういうサービスで何ができるのかを超詳細にまとめました。

  • Amazon CodeGuruとは
  • Amazon CodeGuruの仕組み
  • Amazon CodeGuru for Advance

次回はEC2 Image Builderを超詳細解説します。

Discussion