View a markdown version of this page

使用 Amazon Bedrock AgentCore 自動化 Lambda 測試事件產生 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Amazon Bedrock AgentCore 自動化 Lambda 測試事件產生

Ishita Gupta 和 Kriti Gupta,Amazon Web Services

摘要

此模式提供採用 AI 的方法,可使用 Amazon Bedrock 的生成式 AI 功能自動產生 AWS Lambda 函數的完整測試案例。此模式實作部署在 Amazon Bedrock AgentCore 上的三代理程式架構 (Analyzer、 Generator 和 Validator),可分析實際的 Lambda 函數程式碼,以擷取輸入/輸出模式,並使用逼真的資料產生正面、負面和邊緣案例測試案例。

架構會建立智慧工作流程,分析器代理程式會使用 Amazon Bedrock 擷取和分析 Lambda 程式碼,產生器代理程式會根據學習到的模式建立測試案例,而驗證器代理程式會透過重複資料刪除和排名來確保品質。Amazon DynamoDB 型記憶體存放區可從使用者意見回饋中持續學習,隨著時間改善測試產生的準確性。Amazon Cognito 使用 JSON Web Token (JWT) 型 API 授權提供安全的使用者身分驗證。Amazon Bedrock Guardrails 可在所有 Amazon Bedrock API 呼叫上提供即時攻擊篩選、敏感資訊修訂和內容安全強制執行。關鍵功能:

  • 多語言支援:Python、Java、C#、JavaScript/TypeScript 和 Ruby Lambda 函數

  • 智慧型程式碼區塊:自動將大型程式碼庫分割為可管理區塊以供分析

  • 平行處理:並行 Amazon Bedrock API 需要更快速的測試產生 (5 個並行工作者用於程式碼分析、平行每個區塊測試產生)

  • 目標特定分析:專注於 Lambda 程式碼中的特定函數、類別或檔案

  • 模式學習:具有目標特定和全域模式儲存的 Amazon DynamoDB 型記憶體儲存

  • 避免拒絕:從拒絕的測試案例中學習,以避免常見的錯誤

  • 持續機制:透過自動繼續處理不完整的 Amazon Bedrock 回應。

  • 忽略模式:從分析中排除測試檔案、相依性和非程式碼檔案。

  • 無伺服器部署:使用 Cognito 型身分驗證在 Amazon Bedrock AgentCore 上執行

  • 安全護欄:Amazon Bedrock 護欄用於即時攻擊篩選、個人身分識別資訊 (PII) 修訂、內容安全,以及拒絕封鎖所有 AI 呼叫的主題

    此模式非常適合想要加速 Lambda 測試、改善測試涵蓋範圍,以及透過 AI 輔助測試產生維持高程式碼品質的開發團隊和組織。此模式使用 AWS 受管服務來簡化測試建立、透過學習提高品質,以及擴展以滿足不斷變化的測試需求。

先決條件和限制

先決條件

若要成功實作此模式,請確定已備妥下列項目:

  • 作用中的 AWS 帳戶 - 具有存取 Lambda 函數、叫用 Amazon Bedrock 模型、建立 DynamoDB 資料表、管理 Cognito 使用者集區和部署 Amazon Bedrock AgentCore 代理程式之許可的 AWS 帳戶。

  • Amazon Bedrock 模型存取 - 在您的 AWS 區域中啟用 Anthropic Claude Sonnet 4 (us.anthropic.claude-sonnet-4-6)。如需設定說明,請參閱 Amazon Bedrock 文件中的模型存取。

  • 開發環境包含:

    - Python 3.11 或更新版本

    - 安裝並設定 AWS CLI

    - Git 用於複製儲存庫

  • AWS Lambda 函數 - 至少一個已部署的 Lambda 函數具有可供分析的可存取原始碼。函數必須在部署套件中包含來源檔案 (.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 服務。如需特定端點,請參閱服務端點和配額頁面,然後選擇服務的連結。

產品版本

Architecture

目標架構

下圖顯示此模式的架構和工作流程:

在此工作流程中:

  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 用戶端使用 AWS IAM 進行身分驗證,以存取 Amazon Bedrock,請求叫用模型許可,以使用 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 Guardrail 以實現即時攻擊篩選和內容安全。Amazon Bedrock 會執行 Regex + LLM 增強型分析,從程式碼擷取實際的輸入模式 (例如 event【'body'】、 headers【'Authorization'】)、輸出模式 (例如 statusCode、回應本文結構)、相依性、錯誤處理模式和邊緣案例。

  11. 分析結果已封裝:分析代理程式會將分析結果封裝到 AnalysisResult 物件中,其中包含程式碼區塊、輸入模式、輸出模式、相依性、錯誤模式和中繼資料,然後將其傳遞至產生器代理程式。

  12. 測試產生程序開始:產生器代理程式會收到分析結果,並啟動產生測試案例的請求,首先查詢 DynamoDB 記憶體存放區以取得歷史模式以供學習。

  13. Amazon DynamoDB 記憶體存取身分驗證:Boto3 DynamoDB 用戶端會使用 AWS IAM 進行身分驗證,以取得擷取儲存模式的讀取存取許可。

  14. 從資料庫擷取歷史模式:IAM 角色會授權和查詢 DynamoDB 記憶體存放區資料表 (lambda-testcase-memory),以針對特定 Lambda 函數擷取先前接受的模式和拒絕的模式 (失敗且具有拒絕原因的測試)。

  15. 測試產生的 Amazon Bedrock 身分驗證:Boto3 Amazon Bedrock 用戶端會使用 Amazon Bedrock 存取的 AWS IAM 再次進行身分驗證,以產生測試案例。

  16. AI 測試案例產生:IAM 角色授權並將結合記憶體模式的分析結果傳送至 Amazon Bedrock。Amazon Bedrock 會根據實際程式碼模式產生具有逼真的輸入事件的測試案例結構描述,進而建立正面測試 (35%)、負面測試 (35%) 和邊緣案例 (30%)。每個區塊都會並行產生,以提高效率、從記憶體套用學習到的模式、避免遭到拒絕的模式,並視需要為大型程式碼庫產生區塊。所有 Bedrock converse() 呼叫都包含 guardrailConfig,用於即時攻擊篩選、PII 修訂和拒絕主題強制執行。

  17. 測試驗證開始:產生器代理程式會將產生的測試案例候選項目傳遞給驗證器代理程式,以進行品質控制、重複資料刪除和最終選擇。

  18. 驗證程序已設定:驗證器代理程式會接收測試候選項目並啟動驗證程序,請求存取 DynamoDB 記憶體存放區以進行評分和驗證。

  19. DynamoDB 驗證:Boto3 DynamoDB 用戶端會使用 AWS IAM 進行驗證,以讀取存取查詢記憶體模式以進行驗證評分。

  20. 評估測試品質:IAM 角色會根據先前的模式成功率、函數涵蓋範圍和程式碼複雜性,授權和使用 DynamoDB 記憶體存放區來評分測試案例。驗證器會執行結構驗證、使用模式雜湊進行重複資料刪除、提高處理常式函數和錯誤處理可信度的品質評分、選擇多樣性以涵蓋不同的區塊和測試類型,以及選擇前 N 個最高品質、最多樣化的測試案例。

  21. 傳回 AgentCore 的最終測試案例:Vactator 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. 意見回饋會提交至系統:串流 UI 會將收集的意見回饋 (接受/拒絕狀態、拒絕原因、自訂備註) 傳送至 AgentCore API (save_feedback)。

  25. AgentCore 路由意見回饋:AgentCore API 會呼叫驗證器代理程式,其中包含在 DynamoDB 中存放意見回饋的邏輯。

  26. 回饋儲存程序開始:驗證器代理程式會啟動儲存回饋的程序。

  27. 已驗證 DynamoDB 寫入存取:Boto3 DynamoDB 用戶端使用 AWS IAM (AgentCore 執行角色) 進行驗證,以取得儲存意見回饋模式的寫入存取許可。

  28. 儲存學習模式:IAM 角色授權並將使用者意見回饋儲存在 DynamoDB 記憶體存放區資料表中。每個模式會以複合分割區索引鍵 (function_name#target_function 或 function_name#GLOBAL)、複合排序索引鍵 (FEEDBACK#accepted/rejected#PATTERN#hash)、重複資料刪除的模式雜湊、測試類型、輸入模式結構、意見回饋狀態、拒絕原因 (如果拒絕)、自訂備註、用量計數、成功率、時間戳記和自動清除的 TTL 90 天來儲存。此預存資料可讓系統從使用者意見回饋中學習,並改善未來的測試產生。

自動化和擴展

此模式會使用 AWS 受管服務自動擴展。Amazon Bedrock 使用每次呼叫的 200K 字符內容視窗和 64K 字符輸出來處理隨需 AI 推論,Amazon DynamoDB 使用隨需計費,可根據流量模式自動調整。系統會針對速度使用平行處理,分析器代理程式會進行 5 次並行 Bedrock 呼叫,以分析程式碼區塊 (ThreadPoolExecutor 搭配 max_workers=5),而產生器代理程式則會與 5 個並行工作者平行處理區塊。接續機制會透過自動重試請求來處理不完整的回應。速率限制 (每位使用者每 60 秒 5 個請求) 可防止過多 Bedrock API 呼叫的成本濫用。

成本最佳化包括移除超過 90 天的模式的 TTL 型清除、使用 start_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 Guardrails – 為所有 Bedrock API 呼叫提供 ML 型安全篩選,包括提示攻擊偵測 (HIGH 強度)、內容篩選、PII 匿名化 (電子郵件、電話、名稱)、封鎖 AWS 存取金鑰/私有金鑰/JWT 權杖,以及拒絕主題強制執行 (產生攻擊碼、原始來源碼輸出)。透過 CloudFormation 部署。

  • AWS CloudFormation – 自動化完整的基礎設施佈建,包括 DynamoDB 資料表、Cognito 使用者集區、具有版本控制的 Amazon Bedrock Guardrail,以及 AgentCore 的 IAM 執行角色。

  • Amazon Cognito – 提供使用者身分驗證,其中包含以電子郵件為基礎的註冊、JWT 字符發行,以及 AgentCore 後端的安全 API 授權。

  • Amazon DynamoDB – 儲存接受和拒絕的測試模式與用量統計資料,以持續學習和改善。使用複合索引鍵 (function_target, pattern_sk) 進行零掃描查詢和目標特定的模式儲存。

  • AWS Lambda – 用於分析的函數程式碼來源,GetFunction API 會擷取程式碼和組態。此工具支援 Python、Node.js、Java、.NET 和 Ruby 執行時間。

其他工具

  • Python 3.11+ – 應用程式和代理程式協同運作的執行期環境。

  • Streamlit – 用於身分驗證、測試產生、意見回饋收集和系統狀態監控的 Web 型使用者介面。

  • Boto3 – 適用於 Python 的 AWS 開發套件,可與 Lambda、Amazon Bedrock、DynamoDB 和 Cognito 服務互動。

程式碼儲存庫

此模式的程式碼可在 Github - Lambda 測試事件產生器中使用。

最佳實務

此模式實作下列最佳實務:

  • 針對 AWS Lambda (唯讀)、Amazon Bedrock (叫用)、Amazon DynamoDB (查詢/寫入) 和 Amazon Cognito (身分驗證) 存取使用最低權限 IAM 政策

  • 實作具有全域備用的目標特定模式學習,以提高測試準確性。

  • 啟用 DynamoDB TTL 以自動清除舊模式 (90 天),以控制儲存成本。

  • 使用零掃描查詢搭配複合索引鍵 (function_target, pattern_sk) 來快速擷取模式。

  • 套用忽略模式,從分析中排除測試檔案、相依性和非程式碼檔案。

  • 使用多語言程式碼區塊搭配抽象語法樹 (AST) 剖析 (Python) 和 regex 模式 (Java、C#、JS、Ruby)。

  • 使用實際值 (不只是結構) 儲存模式,以進行真正的重複資料刪除。

  • 在 Amazon Bedrock AgentCore 上部署後端,以實現無伺服器擴展和管理基礎設施。

  • 在每個 API 請求上使用 JWT 字符驗證透過 Amazon Cognito 驗證使用者。

  • 在所有 converse() 呼叫上套用 Amazon Bedrock Guardrails,以進行提示性攻擊篩選、PII 修訂、敏感資料封鎖 (AWS 金鑰、私有金鑰、JWTs),以及拒絕主題強制執行。

  • 在傳回給使用者之前清理分析結果 - 從回應中移除所有原始原始原始程式碼區塊,確保 Lambda 原始程式碼永遠不會離開 AgentCore 執行期界限。

  • 驗證具有規則運算式模式和長度限制的所有 API 輸入 (函數名稱最多 170 個字元,自訂指示最多 2000 個字元,最多 50 個忽略模式),以防止注入和濫用。

  • 實作每個使用者速率限制 (每 60 秒 5 個請求),以防止過多 Bedrock API 呼叫的成本濫用。

  • 在傳回給使用者之前,請清理錯誤訊息 - 內部檔案路徑、AWS 開發套件詳細資訊和基礎設施資訊絕不會在錯誤回應中公開。

請考慮下列其他最佳實務:

  • 拒絕測試案例以改善學習準確性時,提供具體的意見回饋原因。

  • 針對相同的函數反覆產生測試 (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、point-in-time復原和伺服器端加密的 DynamoDB 資料表。

  • 具有電子郵件身分驗證、AdvancedSecurityMode ENFORCED、選用 MFA (TOTP) 和僅限管理員使用者建立的 Cognito 使用者集區。

  • Amazon Bedrock Guardrail 具有提示攻擊篩選、PII 修訂、內容篩選和拒絕主題封鎖功能。

  • AgentCore 的 IAM 執行角色具有最低權限政策,包括 bedrock:ApplyGuardrail 許可。

注意

堆疊會建立所有必要的資源。確保 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 開發套件的 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 (直接程式碼部署 - 不需要 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 建立使用者。建立新的使用者 (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. 忽略模式 (選用):新增要排除的檔案或資料夾模式,每行一個:

    • tests/ - 忽略測試目錄

    • *.test.js - 忽略測試檔案

    • mock_data/ - 忽略模擬資料

  4. 自訂指示 (選用):新增特定測試需求

應用程式開發人員

產生測試案例。

按一下「產生測試案例」按鈕。系統會:

  1. 使用 Cognito JWT 字符透過 AgentCore 驗證。

  2. 從 AWS 擷取 Lambda 程式碼。

  3. 套用忽略模式以排除不需要的檔案。

  4. 使用特定語言策略的區塊程式碼。

  5. 如果指定,請套用目標篩選條件。

  6. 使用 Amazon Bedrock 分析程式碼。

  7. 查詢 DynamoDB 了解模式。

  8. 產生測試案例。

  9. 驗證和排名測試案例。

應用程式開發人員

檢閱產生的測試。

檢閱每個產生的測試案例,其中包括:

  • 類型:正 (有效輸入)、負 (無效輸入) 或 Edge (邊界條件)

  • 描述:測試驗證的內容

  • 測試資料:實際測試事件承載

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"}}'

    my-function 將 取代為您實際的 Lambda 函數名稱,以檢視該函數特定的模式。

  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 程式碼時發生「存取遭拒」錯誤

  • 驗證 IAM 許可包含目標 Lambda 函數lambda:GetFunctionConfigurationlambda: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 (麥文):

  1. 將來源包含組態新增至 pom.xml(請參閱 docs/JAVA_SETUP.md)

  2. 重建和重新部署 Lambda 函數

C# (.NET):

  1. 在組建組態中包含.cs檔案 (請參閱 docs/CSHARP_SETUP.md)

  2. 重建和重新部署 Lambda 函數

DynamoDB 寫入錯誤

  • 檢查 DynamoDB 許可和資料表狀態:

  • 驗證 IAM 政策包含 dynamodb:PutItemdynamodb:BatchWriteItem

  • 檢查資料表狀態:

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

    資料表名稱包含堆疊名稱尾碼。使用 CloudFormation 輸出或 .env 檔案中的 值。

  • 啟用 DynamoDB 的 CloudWatch Logs 以查看詳細的錯誤訊息

測試產生緩慢

最佳化產生速度:

  1. 使用目標篩選條件來專注於特定函數 (速度加快 50-70%)

  2. 新增忽略模式以排除測試檔案、相依性和不相關的程式碼

  3. 在分析之前篩選掉不必要的檔案,以減少程式碼大小

AgentCore:「找不到代理程式」

確認代理程式已部署:

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 Guardrail 未設定」警告

驗證 BEDROCK_GUARDRAIL_IDBEDROCK_GUARDRAIL_VERSION 環境變數是在 AgentCore 部署中設定。

檢查 CloudFormation 輸出:

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

「超過速率限制」錯誤

系統限制為每位使用者每 60 秒 5 個請求。等待指定的時間再重試。對於具有較高輸送量需求的生產使用,請在 https://main.py 中調整 RATE_LIMIT_MAX_REQUESTSRATE_LIMIT_WINDOW 常數。

相關資源

AWS 文件