View a markdown version of this page

Amazon Bedrock AgentCore を使用して Lambda テストイベントの生成を自動化する - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon Bedrock AgentCore を使用して Lambda テストイベントの生成を自動化する

Ishita Gupta と Kriti Gupta、Amazon Web Services

概要

このパターンは、Amazon Bedrock の生成 AI 機能を使用して AWS Lambda 関数の包括的なテストケースを自動的に生成するための AI を活用したアプローチを提供します。このパターンは、Amazon Bedrock AgentCore にデプロイされた 3 エージェントアーキテクチャ (アナライザー、ジェネレーター、バリデーター) を実装します。これにより、実際の Lambda 関数コードを分析して入出力パターンを抽出し、リアルなデータを使用してポジティブ、ネガティブ、エッジケースのテストシナリオを生成します。

このアーキテクチャは、 Analyzer Agent が Amazon Bedrock を使用して Lambda コードを取得および分析し、ジェネレーターエージェントが学習パターンに基づいてテストケースを作成し、Validator Agent が重複排除とランキングを通じて品質を確保するインテリジェントなワークフローを確立します。Amazon DynamoDB ベースのメモリストアを使用すると、ユーザーフィードバックからの継続的な学習が可能になり、時間の経過とともにテスト生成の精度が向上します。Amazon Cognito は、JSON Web Token (JWT) ベースの API 認可による安全なユーザー認証を提供します。Amazon Bedrock ガードレールは、すべての Amazon Bedrock API コールで、迅速な攻撃フィルタリング、機密情報の秘匿化、コンテンツの安全性の適用を提供します。主な機能:

  • マルチ言語サポート: Python、Java、C#、JavaScript/TypeScript、Ruby Lambda 関数

  • インテリジェントコードチャンキング: 大規模なコードベースを分析用に管理可能なチャンクに自動的に分割します

  • 並列処理: 同時 Amazon Bedrock API コールによるテスト生成の高速化 (コード分析用の 5 つの同時ワーカー、チャンクあたりの並列テスト生成)

  • ターゲット固有の分析: Lambda コード内の特定の関数、クラス、またはファイルに焦点を当てる

  • パターン学習: ターゲット固有およびグローバルパターンストレージを備えた Amazon DynamoDB ベースのメモリストア

  • 拒否回避: 拒否されたテストケースから学び、一般的なミスを回避します

  • 継続メカニズム: 不完全な Amazon Bedrock レスポンスを自動継続で処理します。

  • パターンを無視する: テストファイル、依存関係、非コードファイルを分析から除外します。

  • サーバーレスデプロイ: Cognito ベースの認証を使用して Amazon Bedrock AgentCore で実行

  • セキュリティガードレール: すべての AI コールでのプロンプト攻撃フィルタリング、個人を特定できる情報 (PII) の秘匿化、コンテンツの安全性、拒否されたトピックのブロックのための Amazon Bedrock ガードレール

    このパターンは、AI 支援のテスト生成を通じて Lambda テストを加速し、テストカバレッジを改善し、高いコード品質を維持したい開発チームや組織に最適です。このパターンでは、AWS マネージドサービスを使用して、テストの作成を簡素化し、学習を通じて品質を向上させ、進化するテストニーズに合わせてスケーリングします。

前提条件と制限事項

前提条件

このパターンを正常に実装するには、以下が設定されていることを確認してください。

  • アクティブな AWS アカウント - Lambda 関数へのアクセス、Amazon Bedrock モデルの呼び出し、DynamoDB テーブルの作成、Cognito ユーザープールの管理、Amazon Bedrock AgentCore エージェントをデプロイするアクセス許可を持つ AWS アカウント。

  • Amazon Bedrock モデルアクセス - Anthropic Claude Sonnet 4 (us.anthropic.claude-sonnet-4-6) が AWS リージョンで有効になっています。セットアップ手順については、Amazon Bedrock ドキュメントの「モデルアクセス」を参照してください。

  • 以下で構成される開発環境。

    - Python 3.11 以降

    - AWS CLI がインストールされ、設定されている

    - リポジトリのクローンを作成するための Git

  • AWS Lambda 関数 - 分析のためにアクセス可能なソースコードを持つデプロイされた Lambda 関数が少なくとも 1 つあります。関数は、コンパイルされたバイトコードだけでなく、デプロイパッケージにソースファイル (.py、.js、.java、.cs、.rb) を含める必要があります。

  • サポートされている Lambda ランタイム:

    - Python 3.x (すべてのバージョン)

    - Node.js (JavaScript/TypeScript)

    - Java 8、11、17、21 (デプロイパッケージに .java ソースファイルが必要です)

    - .NET Core/。NET 6+ (C#) (デプロイパッケージに .cs ソースファイルが必要)

    - Ruby 2.7、3.2

制限事項

  • そのためには、Claude Sonnet 4.6 の us-east-1 リージョンで Amazon Bedrock モデルにアクセスする必要があります。AWS Lambda 関数は任意のリージョンに配置できます。

  • Amazon DynamoDB のパターンデータは、関連性を維持し、コストを制御するために 90 日後に期限切れになります (有効期限 (TTL) を介して設定可能)。

  • Java および C# Lambda 関数には、デプロイパッケージにソースファイル (.java、.cs) を含める必要があります。コンパイル専用パッケージ (.class、.dll) は分析できません。

  • システムは、ユーザーあたりのメモリ内レート制限 (60 秒あたり 5 リクエスト) を実装します。複数の AgentCore インスタンスを含む分散デプロイの場合、整合性を保つためにレート制限を DynamoDB または Redis に移動する必要があります。

  • 一部の AWS サービスは、すべての AWS リージョンで利用できるわけではありません。利用可能なリージョンについては「AWS サービス (リージョン別)」を参照してください。特定のエンドポイントについては、「Service endpoints and quotas page」から、サービスのリンクを選択してご確認ください。

製品バージョン

アーキテクチャ

ターゲット アーキテクチャ

次の図は、このパターンのアーキテクチャとワークフローを示しています。

このワークフローでは、次の操作を行います。

  1. ユーザーは入力を提供します。デベロッパーはローカルで実行されている Streamlit UI (app.py) を操作し、Lambda 関数名、テスト生成用のオプションのカスタム手順、特定のfunctions/classes/files、テストファイルまたは依存関係を除外するパターンを無視します。

  2. Cognito 認証: アプリケーションは Cognito でリクエストを認証し、JWT (ID/アクセストークン) を Streamlit に返します。

  3. AgentCore API 呼び出し: Streamlit は、ベアラートークン + ペイロード (関数名、フィルタ、命令、無視パターン) を使用して AgentCore API を呼び出します。

  4. JWT 検証: AgentCore API は、Cognito トークン署名を使用して JWT を検証します。

  5. リクエストルーティング: AgentCore API は、リクエストを Lambda テストジェネレーターワークフロー (AgentCore ランタイム) にルーティングします。

  6. コード分析リクエスト: Analyzer Agent は、ターゲット Lambda 関数のコードとメタデータを取得するリクエストを開始します。

  7. AWS Authentication for Lambda Access: Boto3 は AgentCore 実行ロールを使用して AWS で認証し、読み取りアクセス許可をリクエストします。

  8. AWS Lambda コードの取得と処理: IAM ロールは、アクセスを許可し、Lambda 関数コードを ZIP ファイルとしてフェッチし、ソースファイルを抽出し、依存関係 (node_modules、venv など) と非コードファイルをフィルタリングし、ユーザー定義の無視パターンを適用し、コードを管理可能な部分にチャンクします。

  9. Amazon Bedrock 認証: Boto3 Amazon Bedrock クライアントは Amazon Bedrock アクセス用の AWS IAM で認証し、Anthropic Claude Sonnet 4.6 を使用するためのモデルアクセス許可の呼び出しをリクエストします。

  10. AI を活用したコード分析: IAM ロールは、Anthropic Claude Sonnet 4 (us.anthropic.claude-sonnet-4-6) を使用してコードチャンクを承認し、Amazon Bedrock (us-east-1) に送信します。Amazon Bedrock ガードレールは、迅速な攻撃フィルタリングとコンテンツの安全性に適用されます。Amazon Bedrock は正規表現 + LLM 拡張分析を実行して、実際の入力パターン (例: event['body']、Headers['Authorization'])、出力パターン (例: statusCode、レスポンス本文構造)、依存関係、エラー処理パターン、エッジケースをコードから抽出します。

  11. 分析結果はパッケージ化されます。 Analyzer Agent は、分析結果をコードチャンク、入力パターン、出力パターン、依存関係、エラーパターン、メタデータを含む AnalysisResult オブジェクトにパッケージ化し、ジェネレーターエージェントに渡します。

  12. テスト生成プロセスの開始: Generator Agent は分析結果を受け取り、テストケースを生成するリクエストを開始し、まず学習する履歴パターンについて DynamoDB メモリストアにクエリを実行します。

  13. Amazon DynamoDB Authentication for Memory Access: Boto3 DynamoDB クライアントは、保存されたパターンを取得するための読み取りアクセス許可を AWS IAM で認証します。

  14. 履歴パターンはデータベースから取得されます。IAM ロールは、DynamoDB メモリストアテーブル (lambda-testcase-memory) を承認してクエリし、特定の Lambda 関数に対して以前に受け入れられたパターンと拒否されたパターン (拒否理由による失敗したテスト) を取得します。

  15. Amazon Bedrock Authentication for Test Generation: Boto3 Amazon Bedrock クライアントは、AWS IAM for Amazon Bedrock アクセスで再度認証してテストケースを生成します。

  16. AI テストケースの生成: IAM ロールは、メモリパターンと組み合わせた分析結果を認可して Amazon Bedrock に送信します。Amazon Bedrock は、実際のコードパターンに基づいて現実的な入力イベントを含むテストケーススキーマを生成し、肯定的なテスト (35%)、否定的なテスト (35%)、エッジケース (30%) を作成します。生成は、効率のためにチャンクごとに並行して行われ、メモリから学習パターンを適用し、拒否されたパターンを回避し、大規模なコードベースで必要な場合はチャンク生成を回避します。すべての Bedrock converse() 呼び出しには、プロンプト攻撃フィルタリング、PII 秘匿化、拒否されたトピックの適用のための guardrailConfig が含まれます。

  17. テスト検証の開始: Generator Agent は、生成されたテストケース候補をバリデーターエージェントに渡して、品質管理、重複排除、最終選択を行います。

  18. 検証プロセスが設定されている: Validator エージェントはテスト候補を受け取り、検証プロセスを開始し、スコアリングと検証のために DynamoDB メモリストアへのアクセスをリクエストします。

  19. 検証のための DynamoDB 認証: Boto3 DynamoDB クライアントは、検証スコアリングのメモリパターンをクエリするための読み取りアクセスのために AWS IAM で認証します。

  20. テスト品質が評価されます。IAM ロールは DynamoDB メモリストアを承認して使用し、以前のパターンの成功率、関数カバレッジ、コードの複雑さに基づいてテストケースをスコアリングします。Validator は、構造検証、パターンハッシュを使用した重複排除、ハンドラ関数とエラー処理の信頼度を高める品質スコアリング、さまざまなチャンクとテストタイプをカバーする多様性の選択を実行し、最高品質の最も多様なテストケースの上位 N つを選択します。

  21. AgentCore に返される最終テストケース: Validator Agent は、メタデータ (信頼スコア、説明、入力イベント、カテゴリ) を含む最終検証済みテストケースをメインオーケストレーターに返し、フォーマットして Amazon Bedrock AgentCore API に返します。

  22. UI に配信される結果: AgentCore API は、生成されたテストを Streamlit UI に返し、分析の概要、生成メタデータ、テストケースの詳細を表示します。

  23. ユーザーがレビューしてフィードバックを提供する: デベロッパーは、Streamlit UI で表示されたテストケースを確認し、各テストの品質と関連性を評価し、良いテストケースを受け入れるか、特定の拒否理由 (missing_auth_headers、 wrong_status_code、unrealistic_data、 Missing_required_fields、 incorrect_event_source など) と、拒否を説明するオプションのカスタムノートを持つ不良のテストケースを拒否し、フィードバックを送信します。

  24. フィードバックはシステムに送信されます。Streamlit UI は、収集されたフィードバック (承認/拒否ステータス、拒否理由、カスタムノート) を AgentCore API (save_feedback) に送信します。

  25. AgentCore はフィードバックをルーティングします: AgentCore API は、DynamoDB にフィードバックを保存するロジックを含む Validator エージェントを呼び出します。

  26. フィードバックストレージプロセスの開始: 検証エージェントはフィードバックを保存するプロセスを開始します。

  27. DynamoDB 書き込みアクセスが認証される: Boto3 DynamoDB クライアントは、AWS IAM (AgentCore Execution ロール) でフィードバックパターンを保存するための書き込みアクセス許可を認証します。

  28. 学習パターンが保存される: IAM ロールはユーザーのフィードバックを許可し、DynamoDB メモリストアテーブルに保存します。各パターンは、複合パーティションキー (function_name#target_function または function_name#GLOBAL)、複合ソートキー (FEEDBACK#accepted/rejected#PATTERN#hash)、重複排除のパターンハッシュ、テストタイプ、入力パターン構造、フィードバックステータス、拒否理由 (拒否された場合)、カスタムノート、使用数、成功率、タイムスタンプ、自動クリーンアップの TTL 90 日間で保存されます。この保存されたデータにより、システムはユーザーのフィードバックから学習し、将来のテスト生成を改善できます。

自動化とスケール

このパターンは、AWS マネージドサービスを使用して自動的にスケーリングされます。Amazon Bedrock は、通話ごとに 200K トークンの出力で AI 推論をオンデマンドで処理し、Amazon DynamoDB はトラフィックパターンに自動的に調整するオンデマンド請求を使用します。 64K システムは速度に並列処理を使用し、アナライザーエージェントは 5 つの同時 Bedrock 呼び出しを実行してコードチャンクを分析し (max_workers=5 の ThreadPoolExecutor)、ジェネレーターエージェントは 5 つの同時ワーカーと並行してチャンクを処理します。継続メカニズムは、リクエストを自動的に再試行することで、不完全なレスポンスを処理します。レート制限 (ユーザーあたり 60 秒あたり 5 リクエスト) は、過剰な Bedrock API コールによるコスト濫用を防ぎます。

コスト最適化には、90 日以上経過したパターンを削除する TTL ベースのクリーンアップ、テーブルスキャンなしでの即時ルックアップのための begins_with() を使用した複合キークエリ、DynamoDB 書き込みオペレーションを約 90% 削減する BatchWriteItem オペレーションが含まれます。パフォーマンスは関数のサイズによって異なります。小さな関数 (10 ファイル未満) は 30 ~ 60 秒で 10 個のテストケースを生成し、中程度の関数 (10 ~ 50 ファイル) は 1 ~ 3 分かかり、大きな関数 (50 以上のファイル) は 3 ~ 5 分かかりますが、ターゲットフィルターを使用して特定のコードセクションに集中すると、時間は 50 ~ 70% 短縮されます。

ツール

AWS のサービス

  • Amazon Bedrock – Anthropic Claude Sonnet 4 を通じて生成 AI 機能を提供し、コード分析、テスト生成、検証、拒否の要約を行います。モデルアクセスには常に us-east-1 リージョンを使用します。

  • Amazon Bedrock AgentCore – 自動スケーリング、OAuth ベースの認可、CloudWatch オブザーバビリティを使用して、テスト生成バックエンドをデプロイおよびホストするためのサーバーレスエージェントのランタイムを提供します。

  • Amazon Bedrock ガードレール – プロンプト攻撃検出 (高強度)、コンテンツフィルタリング、PII 匿名化 (E メール、電話、名前)、AWS アクセスキー/プライベートキー/JWT トークンのブロック、拒否されたトピックの適用 (エクスプロイトコード生成、未加工ソースコード出力) など、すべての Bedrock API コールに対して ML ベースのセキュリティフィルタリングを提供します。CloudFormation 経由でデプロイされます。

  • AWS CloudFormation – DynamoDB テーブル、Cognito ユーザープール、バージョニングを備えた Amazon Bedrock ガードレール、AgentCore の IAM 実行ロールなど、完全なインフラストラクチャプロビジョニングを自動化します。

  • Amazon Cognito – AgentCore バックエンドの E メールベースのサインアップ、JWT トークン発行、安全な API 認可によるユーザー認証を提供します。

  • Amazon DynamoDB – 継続的な学習と改善のために、受け入れたテストパターンと拒否されたテストパターンを使用状況統計とともに保存します。ゼロスキャンクエリとターゲット固有のパターンストレージに複合キー (function_target、 pattern_sk) を使用します。

  • AWS Lambda – 分析用の関数コードのソース、GetFunction API はコードと設定を取得します。このツールは、Python、Node.js、Java、.NET、Ruby ランタイムをサポートしています。

その他のツール

  • Python 3.11+ – アプリケーションとエージェントのオーケストレーション用のランタイム環境。

  • Streamlit – 認証、テスト生成、フィードバック収集、システムステータスモニタリングのためのウェブベースのユーザーインターフェイス。

  • Boto3 – Lambda、Amazon Bedrock、DynamoDB、Cognito サービスとやり取りするための AWS SDK for Python。

コードリポジトリ

このパターンのコードは、Github - Lambda Test Event Generator で入手できます。

ベストプラクティス

このパターンでは、次のベストプラクティスを実装します。

  • AWS Lambda (読み取り専用)、Amazon Bedrock (呼び出し)、Amazon DynamoDB (クエリ/書き込み)、Amazon Cognito (認証) アクセスに最小特権の IAM ポリシーを使用します。

  • グローバルフォールバックを使用してターゲット固有のパターン学習を実装し、テスト精度を向上させます。

  • DynamoDB TTL を有効にして古いパターン (90 日) を自動的にクリーンアップし、ストレージコストを制御します。

  • パターンをすばやく取得するには、複合キー (function_target、 pattern_sk) でゼロスキャンクエリを使用します。

  • 無視パターンを適用して、テストファイル、依存関係、非コードファイルを分析から除外します。

  • 抽象構文ツリー (AST) 解析 (Python) と正規表現パターン (Java、C#、JS、Ruby) で多言語コードチャンキングを使用します。

  • 真の重複排除のために、実際の値 (構造だけでなく) を持つパターンを保存します。

  • Amazon Bedrock AgentCore にバックエンドをデプロイして、サーバーレススケーリングとマネージドインフラストラクチャを実現します。

  • すべての API リクエストで JWT トークン検証を使用して Amazon Cognito 経由でユーザーを認証します。

  • プロンプト攻撃フィルタリング、PII 秘匿化、機密データブロック (AWS キー、プライベートキー、JWTs。

  • ユーザーに戻る前に分析結果をサニタイズする - すべての未加工のソースコードチャンクがレスポンスから削除されるため、Lambda ソースコードが AgentCore ランタイム境界から外れることはありません。

  • 正規表現パターンと長さ制限 (関数名は最大 170 文字、カスタム命令は最大 2000 文字、無視パターンは最大 50 個) を使用してすべての API 入力を検証し、インジェクションと不正使用を防止します。

  • ユーザーあたりのレート制限 (60 秒あたり 5 リクエスト) を実装して、過剰な Bedrock API コールによるコストの不正使用を防止します。

  • ユーザーに戻る前にエラーメッセージをサニタイズする - 内部ファイルパス、AWS SDK の詳細、インフラストラクチャ情報がエラーレスポンスで公開されることはありません。

以下の追加のベストプラクティスを検討してください。

  • 学習精度を向上させるためにテストケースを拒否する場合は、具体的なフィードバック理由を記載してください。

  • 同じ関数のテストを反復的に (2~3 回) 生成し、システムが学習して改善できるようにします。

  • 特定のテストシナリオまたはデータ形式が必要な場合は、カスタム手順を提供します。

  • IAM Access Analyzer を有効にして、リソースのアクセス許可をモニタリングし、意図しないアクセスを識別します。

  • 小さな Lambda 関数から始めて、大きなコードベースを分析する前にシステムを理解します。

  • IAM ポリシーを定期的に確認し、未使用のアクセス許可を削除します。

  • 強力なパスワードポリシーを使用し、脅威検出のために Cognito AdvancedSecurityMode を有効にします。

エピック

タスク説明必要なスキル

リポジトリのクローン作成

GitHub リポジトリをローカルシステムにクローンし、プロジェクトディレクトリに移動します。

git clone https://github.com/aws-samples/sample-lambda-test-event-generator.git cd sample-lambda-test-event-generator

このリポジトリには、Python アプリケーション、CloudFormation テンプレート、および設定ファイルが含まれています。

アプリ開発者

AWS 認証情報を設定します。

AWS 認証情報を設定して、AWS CLI が AWS アカウントとやり取りし、アプリケーションがテストする Lambda 関数にアクセスできるようにします。

これを行うには、AWS CLI 設定コマンドを使用します。

aws configure

プロンプトが表示されたら、次の情報を入力します。

  • AWS アクセスキー ID: AWS アクセスキー

  • AWS シークレットアクセスキー: AWS シークレットアクセスキー

  • デフォルトのリージョン名: リソースをデプロイする AWS リージョン (例: us-east-1)

  • デフォルトの出力形式: 優先出力形式 (例: json)

アプリ開発者
タスク説明必要なスキル

CloudFormation を使用してインフラストラクチャをデプロイします。

  1. 提供された CloudFormation テンプレートを使用して、完全なバックエンドインフラストラクチャ (DynamoDB、Cognito、IAM ロール) をデプロイします。CLI で次のコマンドを実行します。

    aws cloudformation create-stack \ --stack-name lambda-test-generator-infra \ --template-body file://cloudformation/complete-infrastructure.yaml \ --capabilities CAPABILITY_NAMED_IAM \ --region us-east-1
  2. スタックのデプロイが完了するまで待ちます。

    aws cloudformation wait stack-create-complete \ --stack-name lambda-test-generator-infra \ --region us-east-1
  3. すべての出力を取得します。

    aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs' \ --output table

作成されるもの:

  • TTL が有効になっている DynamoDB テーブル、point-in-timeリカバリ、サーバー側の暗号化。

  • E メール認証、AdvancedSecurityMode ENFORCED、オプションの MFA (TOTP)、管理者専用ユーザー作成を備えた Cognito ユーザープール。

  • プロンプト攻撃フィルタリング、PII 秘匿化、コンテンツフィルタリング、拒否トピックブロックを備えた Amazon Bedrock ガードレール。

  • bedrock:ApplyGuardrail アクセス許可を含む最小特権ポリシーを持つ AgentCore の IAM 実行ロール。

注記

スタックは、必要なすべてのリソースを作成します。次のステップに進む前に、CloudFormation テンプレートが正常に完了していることを確認します。

アプリ開発者

設定変数をエクスポートします。

CloudFormation スタック出力からすべての値を環境変数としてエクスポートします。

export AGENTCORE_ROLE_ARN=$(aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs[?OutputKey==`AgentCoreExecutionRoleArn`].OutputValue' \ --output text) export DISCOVERY_URL=$(aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs[?OutputKey==`DiscoveryUrl`].OutputValue' \ --output text) export CLIENT_ID=$(aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs[?OutputKey==`ClientId`].OutputValue' \ --output text) export DYNAMODB_TABLE=$(aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs[?OutputKey==`DynamoDBTableName`].OutputValue' \ --output text) export COGNITO_POOL_ID=$(aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs[?OutputKey==`UserPoolId`].OutputValue' \ --output text) export BEDROCK_GUARDRAIL_ID=$(aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs[?OutputKey==`BedrockGuardrailId`].OutputValue' \ --output text) export BEDROCK_GUARDRAIL_VERSION=$(aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs[?OutputKey==`BedrockGuardrailVersion`].OutputValue' \ --output text)

これらの変数は、AgentCore 設定と .env ファイル作成の後続のステップで使用されます。

AWS 管理者
タスク説明必要なスキル

仮想環境を作成します。

  1. Python 仮想環境を作成してアクティブ化し、プロジェクトの依存関係を分離します。

    python3 -m venv venv source venv/bin/activate
  2. 要件ファイルから必要な Python パッケージをインストールします。

    pip install -r requirements.txt

    これにより、AWS SDK 用の boto3、環境設定用の python-dotenv、AgentCore 統合用の bedrock-agentcore-runtime、ユーザーインターフェイス用の Streamlit など、必要なすべてのライブラリがインストールされます。

    注記

    アプリケーションを実行するために新しいターミナルセッションを開くたびに、仮想環境を ( を使用してsource venv/bin/activate) アクティブ化する必要があります。

アプリ開発者

AgentCore を設定してデプロイします。

  • AgentCore エージェントを設定します。

    agentcore configure \ --entrypoint main.py \ --name lambda_test_generator \ --requirements-file requirements.txt \ --region us-east-1 \ --execution-role $AGENTCORE_ROLE_ARN
  • プロンプトが表示されたら:

    1. デプロイタイプ: 1 (Direct Code Deploy - Docker 不要)

    2. Python バージョン: 2 (PYTHON_3_11 または特定の Python バージョンを選択)

    3. S3 バケット: Enter キーを押す (自動作成)

    4. OAuth オーソライザー: はい

    5. 検出 URL: $DISCOVERY_URL 値を貼り付ける

    6. クライアント IDs: $CLIENT_ID 値を貼り付ける

    7. 対象者: Enter キーを押します (空のままにします)

    8. スコープ: Enter キーを押します (空のままにします)

    9. カスタムクレーム: Enter キーを押します (空のままにします)

    10. リクエストヘッダー: はい

    11. ヘッダー: 認可

    12. メモリ: s (スキップ - DynamoDB を使用)

  • エージェントをデプロイします。

    agentcore deploy \ --env DYNAMODB_TABLE_NAME=$DYNAMODB_TABLE \ --env AWS_REGION=us-east-1 \ --env BEDROCK_GUARDRAIL_ID=$BEDROCK_GUARDRAIL_ID \ --env BEDROCK_GUARDRAIL_VERSION=$BEDROCK_GUARDRAIL_VERSION
  • AgentCore ランタイム ID とエンドポイントを取得します。

    RUNTIME_ID=$(agentcore status | grep "Agent ARN:" | sed 's/.*runtime\///' | sed 's/[│ ].*//') AGENTCORE_ENDPOINT="https://bedrock-agentcore-runtime.us-east-1.amazonaws.com/agents/${RUNTIME_ID}/endpoints/DEFAULT"
アプリ開発者

ローカル開発用の .env ファイルを作成します。

すべての設定値を使用して、プロジェクトルートディレクトリに .env ファイルを作成します。

cat > .env << EOF AWS_REGION=us-east-1 DYNAMODB_TABLE_NAME=$DYNAMODB_TABLE COGNITO_POOL_ID=$COGNITO_POOL_ID COGNITO_CLIENT_ID=$CLIENT_ID COGNITO_REGION=us-east-1 AGENTCORE_ENDPOINT=$AGENTCORE_ENDPOINT BEDROCK_GUARDRAIL_ID=$BEDROCK_GUARDRAIL_ID BEDROCK_GUARDRAIL_VERSION=$BEDROCK_GUARDRAIL_VERSION EOF

AWS サービスへの接続をテストします。

aws dynamodb describe-table --table-name $DYNAMODB_TABLE aws bedrock list-foundation-models --region us-east-1

どちらのコマンドも成功したレスポンスを返すはずです。アクセス許可エラーが発生した場合は、IAM ポリシーが正しく設定されていることを確認します。

アプリ開発者
タスク説明必要なスキル

新しい Cognito ユーザーを作成します。

Cognito ユーザープールは、セキュリティのために管理者専用のユーザー作成で設定されているため、ユーザーは自己登録できません。CloudFormation スタック出力からエクスポートされた Cognito プール ID とクライアント ID を使用して、AWS CLI 経由でユーザーを作成します。新しいユーザーを作成します ( を E メールuser@example.comに置き換えます)。

aws cognito-idp admin-create-user \ --user-pool-id $COGNITO_POOL_ID \ --username user@example.com \ --user-attributes Name=email,Value=user@example.com Name=email_verified,Value=true \ --temporary-password '[PASSWORD]!' \ --region us-east-1

永続的なパスワードを設定します (8 文字以上で、大文字、小文字、数字を含める必要があります)。

aws cognito-idp admin-set-user-password \ --user-pool-id $COGNITO_POOL_ID \ --username user@example.com \ --password '[PASSWORD]!' \ --permanent \ --region us-east-1

これらの認証情報を使用して、次のステップで Streamlit UI を通じてサインインします。

アプリ開発者
タスク説明必要なスキル

Streamlit UI を起動します。

アプリケーションを起動します。

streamlit run app.py

UI がデフォルトのブラウザで で開きます。 http://localhost:8501

前のステップで作成した認証情報を使用してサインインする

アプリ開発者

生成オプションを設定する

UI で、次のオプションを設定します。

  1. Lambda 関数名または ARN: ターゲット Lambda 関数識別子を入力します

  2. ターゲットフィルター (オプション): フォーカスする関数、クラス、またはファイルを指定します (例: 、validate_userUserServiceauth.py)

  3. パターンを無視する (オプション): 除外するファイルまたはフォルダパターンを行ごとに 1 つずつ追加します。

    • tests/ - テストディレクトリを無視する

    • *.test.js - テストファイルを無視する

    • mock_data/ - モックデータを無視する

  4. カスタム手順 (オプション): 特定のテスト要件を追加する

アプリ開発者

テストケースを生成します。

「テストケースの生成」ボタンをクリックします。システムは以下を行います。

  1. Cognito JWT トークンを使用して AgentCore で認証します。

  2. AWS から Lambda コードを取得します。

  3. 不要なファイルを除外するには、無視パターンを適用します。

  4. 言語固有の戦略を使用したチャンクコード。

  5. 指定された場合はターゲットフィルターを適用します。

  6. Amazon Bedrock でコードを分析します。

  7. 学習パターンについて DynamoDB をクエリします。

  8. テストケースを生成します。

  9. テストケースを検証してランク付けします。

アプリ開発者

生成されたテストを確認します。

生成された各テストケースを確認します。これには、以下が含まれます。

  • タイプ: 正 (有効な入力)、負 (無効な入力)、またはエッジ (境界条件)

  • 説明: テストで検証される内容

  • テストデータ: 実際のテストイベントペイロード

DevOps エンジニア、アプリケーションデベロッパー

フィードバックを提供します。

テストケースごとに、フィードバックを提供します。

テストケースを受け入れるには:

  • 「承諾」ボタンをクリックします。

テストケースを拒否するには:

  1. 「拒否」ボタンをクリックします。

  2. ドロップダウンから拒否理由を選択するか、カスタム理由を追加します。

  3. 「拒否の送信」ボタンをクリックします。

テストエンジニア

フィードバックはメモリに保存します。

すべてのテストケースを確認した後:

  1. 「すべてのフィードバックをメモリに保存」ボタンをクリックします。

  2. システムは、拒否されたすべてのケースが理由を送信したことを検証します

  3. フィードバックは、検証エージェントにルーティングされる AgentCore API に送信されます。

  4. フィードバックは、重複排除用のパターンハッシュを使用して DynamoDB にバッチ保存されます。

  5. 承諾/拒否された数を示すフィードバックの概要を表示する

テストエンジニア

繰り返して改善します。

同じ関数のテストを 2~3 回生成して品質を向上させます。

  • システムは DynamoDB から学習パターンを取得します。

  • フィードバックに基づいて反復するたびに品質が向上する

  • 特定のコンポーネントに焦点を当てたテストにターゲットフィルターを使用する

  • 無視パターンを使用して無関係なコードを除外し、生成品質を向上させる

注記

学習システムは、繰り返し使用するとより効果的になります。各フィードバックサイクルは、AI がテスト設定を理解し、Lambda 関数に関連するテストケースを生成するのに役立ちます。

アプリ開発者
タスク説明必要なスキル

AgentCore API を直接呼び出します。

自動化と統合では、Cognito 認証で API コールを使用して AgentCore バックエンドを直接呼び出します。

Cognito トークンを取得します。

TOKEN=$(agentcore identity get-cognito-inbound-token)

テスト生成を呼び出す:

agentcore invoke --bearer-token "$TOKEN" '{"action": "generate_test_cases", "function_name": "your-lambda-function", "num_test_cases": 10,"custom_instructions": "Focus on authentication scenarios", "target_filter": "validate_user","ignore_patterns": ["tests/", "*.test.js"] }'

または、curl を使用します。

curl -X POST "$AGENTCORE_ENDPOINT" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "action": "generate_test_cases", "function_name": "your-lambda-function", "num_test_cases": 10}'
アプリ開発者
タスク説明必要なスキル

DynamoDB パターンをモニタリングし、コストを追跡します。

  1. DynamoDB テーブルをクエリして、受け入れられたパターンを確認し、システムが学習した内容を理解します。

    aws dynamodb query \ --table-name $DYNAMODB_TABLE \ --key-condition-expression "function_target = :ft AND begins_with(pattern_sk, :prefix)" \ --expression-attribute-values '{":ft":{"S":"my-function#GLOBAL"},":prefix":{"S":"FEEDBACK#accepted"}}'

    を実際の Lambda 関数名my-functionに置き換えて、その関数に固有のパターンを表示します。

  2. リソースの消費量を追跡してコストを最適化します。

    • AWS Cost Explorer: Bedrock、DynamoDB、Lambda サービスの全体的な支出をモニタリングする

    • Amazon Bedrock: Bedrock コンソールでトークンの使用状況と API コールメトリクスを確認する

    • DynamoDB: リクエストメトリクス、消費キャパシティ、ストレージの使用状況を確認します。

    • AgentCore: CloudWatch でエージェントのランタイムメトリクスと呼び出し数をモニタリングする

  3. CloudWatch Logs を使用して問題を診断し、システム動作をモニタリングします。

    • AgentCore ログ:

      aws logs tail /aws/bedrock-agentcore/runtimes/lambda_test_generator --follow
    • アプリケーションエラー: アプリケーションレベルのエラーと例外を確認する

    • Bedrock API レスポンス: AI モデルのレスポンスとトークン消費を分析する

    • DynamoDB オペレーション: 読み取り/書き込みパターンとスロットリングイベントのモニタリング

注記

定期的なモニタリングは、コスト最適化の機会を特定し、システムが引き続き効果的に学習できるようにするのに役立ちます。DynamoDB テーブルの TTL 設定は、古いパターンを自動的にクリーンアップし、時間の経過とともにストレージコストを管理するのに役立ちます。

AWS 管理者
タスク説明必要なスキル

デプロイされたリソースを削除します。

デプロイされたリソースをすべて削除するには:

AgentCore エージェントを削除します。

agentcore destroy

CloudFormation スタックを削除します (DynamoDB テーブル、Cognito ユーザープール、IAM ロールを削除します)。

aws cloudformation delete-stack \ --stack-name lambda-test-generator-infra \ --region us-east-1
AWS 管理者

トラブルシューティング

問題ソリューション

Lambda コードの取得時の「アクセス拒否」エラー

  • ターゲット Lambda 関数lambda:GetFunctionConfigurationの IAM アクセス許可に lambda:GetFunctionと が含まれていることを確認する

  • AWS CLI 認証情報を確認する

    aws sts get-caller-identity

DynamoDB 書き込みエラー」

  • .env ファイル内のテーブル名がデプロイされたテーブル名と一致することを確認する

  • CloudFormation 出力を確認します。

    aws cloudformation describe-stacks --stack-name lambda-test-generator-infra --query 'Stacks[0].Outputs[?OutputKey=DynamoDBTableName].OutputValue' --output text
  • または、直接検証します。

    aws dynamodb describe-table --table-name $DYNAMODB_TABLE

テストケースは生成されません

考えられる原因と解決策:

  • Lambda 関数コードにアクセスできない: Lambda アクセスの IAM アクセス許可を確認する

  • Lambda デプロイパッケージにはコンパイルされたコードのみが含まれています: .class、ソース.dllファイルのないファイルは分析できません

  • 無視パターンで除外されたすべてのファイル: 無視パターンを確認して調整する

  • カスタム指示が制限的すぎる: カスタム指示を簡素化または削除する

  • Lambda 関数が存在することを確認します。

    aws lambda get-function --function-name <name>

Java/C# Lambda に「ソースコードが見つかりません」と表示

Java および C# Lambdas では、デプロイパッケージにソースファイルが必要です。

Java (Maven):

  1. ソース包含設定を に追加する pom.xml (「」を参照docs/JAVA_SETUP.md)

  2. Lambda 関数の再構築と再デプロイ

C# (.NET):

  1. ビルド設定に.csファイルを含める (「」を参照docs/CSHARP_SETUP.md)

  2. Lambda 関数の再構築と再デプロイ

DynamoDB 書き込みエラー

  • DynamoDB のアクセス許可とテーブルのステータスを確認します。

  • IAM ポリシーに dynamodb:PutItemと が含まれていることを確認する dynamodb:BatchWriteItem

  • テーブルのステータスを確認します。

    aws dynamodb describe-table --table-name $DYNAMODB_TABLE

    テーブル名にはスタック名のサフィックスが含まれます。CloudFormation 出力または .env ファイルの値を使用します。

  • CloudWatch Logs for DynamoDB を有効にして詳細なエラーメッセージを表示する

テスト生成が遅い

生成速度を最適化します。

  1. ターゲットフィルターを使用して特定の関数に集中する (50~70% 高速)

  2. 無視パターンを追加して、テストファイル、依存関係、無関係なコードを除外する

  3. 分析前に不要なファイルをフィルタリングしてコードサイズを減らす

AgentCore: "Agent not found"

エージェントがデプロイされていることを確認します。

agentcore status agentcore configure list

AgentCore: 実行時に「アクセス許可が拒否されました」

実行ロールに正しいポリシーがあることを確認します。

aws iam list-role-policies --role-name agentcore-exec-lambda-test-generator-infra

Cognito:「無効なユーザー名またはパスワード」

認証情報が正しいことを確認します。Streamlit UI の「アカウントの作成」フローを使用するか、AWS CLI を使用して新しいユーザーを作成できます。

aws cognito-idp admin-create-user --user-pool-id <POOL_ID> --username <username> --temporary-password '<password>' --region us-east-1
aws cognito-idp admin-set-user-password --user-pool-id <POOL_ID> --username <username> --password '<password>' --permanent --region us-east-1

ログの「Bedrock ガードレールが設定されていません」警告

AgentCore デプロイで BEDROCK_GUARDRAIL_IDBEDROCK_GUARDRAIL_VERSION環境変数が設定されていることを確認します。

CloudFormation 出力を確認します。

aws cloudformation describe-stacks --stack-name lambda-test-generator-infra --query 'Stacks[0].Outputs[?OutputKey==`BedrockGuardrailId`].OutputValue' --output text

「レート制限超過」エラー

システムは、ユーザーあたり 60 秒あたり 5 リクエストに制限します。指定された時間を待ってから再試行します。スループットのニーズが高い本番稼働用には、main.py で RATE_LIMIT_MAX_REQUESTSおよび RATE_LIMIT_WINDOW 定数を調整します。

関連リソース

AWS ドキュメント