View a markdown version of this page

Amazon Bedrock AgentCore를 사용하여 Lambda 테스트 이벤트 생성 자동화 - 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon Bedrock AgentCore를 사용하여 Lambda 테스트 이벤트 생성 자동화

Ishita Gupta 및 Kriti Gupta, Amazon Web Services

요약

이 패턴은 Amazon Bedrock의 생성형 AI 기능을 사용하여 AWS Lambda 함수에 대한 포괄적인 테스트 사례를 자동으로 생성하기 위한 AI 기반 접근 방식을 제공합니다. 이 패턴은 Amazon Bedrock AgentCore에 배포된 3-에이전트 아키텍처(분석기, 생성기 및 검사기)를 구현합니다.이 아키텍처는 실제 Lambda 함수 코드를 분석하여 입력/출력 패턴을 추출하고 사실적인 데이터를 사용하여 긍정적, 부정적 및 엣지 케이스 테스트 시나리오를 생성합니다.

아키텍처는 분석기 에이전트가 Amazon Bedrock을 사용하여 Lambda 코드를 가져오고 분석하고, 생성기 에이전트가 학습된 패턴을 기반으로 테스트 사례를 생성하고, 검사기 에이전트가 중복 제거 및 순위를 통해 품질을 보장하는 지능형 워크플로를 설정합니다. Amazon DynamoDB 기반 메모리 스토어를 사용하면 사용자 피드백에서 지속적으로 학습할 수 있으므로 시간이 지남에 따라 테스트 생성 정확도가 향상됩니다. Amazon Cognito는 JSON 웹 토큰(JWT) 기반 API 권한 부여를 통해 안전한 사용자 인증을 제공합니다. Amazon Bedrock 가드레일은 모든 Amazon Bedrock API 호출에 대해 즉각적인 공격 필터링, 민감한 정보 수정 및 콘텐츠 안전 적용을 제공합니다. 주요 기능:

  • 다국어 지원: Python, Java, C#, JavaScript/TypeScript 및 Ruby Lambda 함수

  • Intelligent Code Chunking: 분석을 위해 대규모 코드베이스를 관리 가능한 청크로 자동 분할

  • 병렬 처리: 더 빠른 테스트 생성을 위한 동시 Amazon Bedrock API 호출(코드 분석을 위한 동시 작업자 5명, 병렬 청크당 테스트 생성)

  • 대상별 분석: Lambda 코드 내의 특정 함수, 클래스 또는 파일에 집중

  • 패턴 학습: 대상별 및 글로벌 패턴 스토리지가 있는 Amazon DynamoDB 기반 메모리 스토어

  • 거부 방지: 거부된 테스트 사례에서 학습하여 일반적인 실수를 방지합니다.

  • 연속 메커니즘: 자동 연속으로 불완전한 Amazon Bedrock 응답을 처리합니다.

  • 패턴 무시: 분석에서 테스트 파일, 종속성 및 코드 외 파일을 제외합니다.

  • 서버리스 배포: Cognito 기반 인증을 사용하여 Amazon Bedrock AgentCore에서 실행

  • 보안 가드레일: 모든 AI 호출에 대한 프롬프트 공격 필터링, 개인 식별 정보(PII) 수정, 콘텐츠 안전 및 거부된 주제 차단을 위한 Amazon Bedrock 가드레일

    이 패턴은 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일 후에 만료됩니다(Time to Live(TTL)를 통해 구성 가능).

  • Java 및 C# Lambda 함수는 배포 패키지에 소스 파일(.java, .cs)을 포함해야 합니다. 컴파일 전용 패키지(.class, .dll)는 분석할 수 없습니다.

  • 시스템은 사용자당 인 메모리 속도 제한(60초당 요청 5개)을 구현합니다. 여러 AgentCore 인스턴스가 있는 분산 배포의 경우 일관성을 위해 속도 제한을 DynamoDB 또는 Redis로 이동해야 합니다.

  • 일부 AWS 서비스는 일부 AWS 리전에서 사용할 수 없습니다. 리전별 가용성은 리전별 AWS 서비스를 참조하세요. 구체적인 엔드포인트는 서비스 엔드포인트 및 할당량 페이지를 참조하고 서비스 링크를 선택합니다.

제품 버전

아키텍처

대상 아키텍처·

다음 다이어그램은이 패턴의 아키텍처와 워크플로를 보여줍니다.

이 워크플로에서 다음을 수행합니다.

  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. 코드 분석 요청: 분석기 에이전트가 대상 Lambda 함수의 코드 및 메타데이터를 가져오는 요청을 시작합니다.

  7. Lambda 액세스를 위한 AWS 인증: 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 역할은 프롬프트 공격 필터링 및 콘텐츠 안전을 위해 Amazon Bedrock Guardrail이 적용된 Anthropic Claude Sonnet 4(us.anthropic.claude-sonnet-4-6)를 사용하여 코드 청크를 승인하고 Amazon Bedrock(us-east-1)에 전송합니다. Amazon Bedrock은 정규식 + LLM 고급 분석을 수행하여 실제 입력 패턴(예: event['body'], headers['Authorization']), 출력 패턴(예: statusCode, 응답 본문 구조), 종속성, 오류 처리 패턴 및 코드의 엣지 케이스를 추출합니다.

  11. 분석 결과 패키징: Analyzer Agent는 분석 결과를 코드 청크, 입력 패턴, 출력 패턴, 종속성, 오류 패턴 및 메타데이터가 포함된 AnalysisResult 객체로 패키징한 다음 생성기 에이전트에 전달합니다.

  12. 테스트 생성 프로세스 시작: Generator Agent는 분석 결과를 수신하고 테스트 사례 생성 요청을 시작하여 먼저 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() 호출에는 프롬프트 공격 필터링, PII 수정 및 거부된 주제 적용을 위한 guardrailConfig가 포함됩니다.

  17. 테스트 검증 시작: 생성기 에이전트는 생성된 테스트 사례 후보를 품질 관리, 중복 제거 및 최종 선택을 위해 검사기 에이전트에 전달합니다.

  18. 검증 프로세스 구성: Validator Agent가 테스트 후보를 수신하고 검증 프로세스를 시작하여 DynamoDB 메모리 스토어에 대한 액세스를 요청하여 채점 및 검증을 요청합니다.

  19. 검증을 위한 DynamoDB 인증: Boto3 DynamoDB 클라이언트는 검증 점수를 위한 쿼리 메모리 패턴에 대한 읽기 액세스를 위해 AWS IAM으로 인증합니다.

  20. 테스트 품질 평가: IAM 역할은 DynamoDB 메모리 스토어를 승인하고 사용하여 이전 패턴 성공률, 함수 적용 범위 및 코드 복잡성을 기반으로 테스트 사례를 채점합니다. 검사기는 구조 검증, 패턴 해싱을 사용한 중복 제거, 핸들러 함수 및 오류 처리를 위한 신뢰도가 높은 품질 점수, 다양한 청크 및 테스트 유형을 다루기 위한 다양성 선택, 가장 품질이 높고 가장 다양한 상위 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에 피드백을 저장하는 로직이 포함된 검사기 에이전트를 호출합니다.

  26. 피드백 저장 프로세스 시작: Validator Agent가 피드백을 저장하는 프로세스를 시작합니다.

  27. DynamoDB 쓰기 액세스 인증: Boto3 DynamoDB 클라이언트는 AWS IAM(AgentCore 실행 역할)을 사용하여 피드백 패턴을 저장할 수 있는 쓰기 액세스 권한을 인증합니다.Boto3 DynamoDB

  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 호출을 수행하여 코드 청크(max_workers=5인 ThreadPoolExecutor)를 분석하는 반면 생성 에이전트는 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 가드레일 - 프롬프트 공격 탐지(HIGH 강도), 콘텐츠 필터링, PII 익명화(이메일, 전화, 이름), AWS 액세스 키/프라이빗 키/JWT 토큰 차단, 주제 적용 거부(익스플로이트 코드 생성, 원시 소스 코드 출력)를 포함하여 모든 Bedrock API 호출에 대한 ML 기반 보안 필터링을 제공합니다. CloudFormation을 통해 배포됩니다.

  • AWS CloudFormation - DynamoDB 테이블, Cognito 사용자 풀, 버전 관리를 사용하는 Amazon Bedrock Guardrail, AgentCore에 대한 IAM 실행 역할을 포함한 전체 인프라 프로비저닝을 자동화합니다.

  • Amazon Cognito - AgentCore 백엔드에 대한 이메일 기반 가입, 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 서비스와 상호 작용하는 Python용 AWS SDK입니다.

코드 리포지토리

이 패턴의 코드는 Github - Lambda 테스트 이벤트 생성기에서 사용할 수 있습니다.

모범 사례

이 패턴은 다음 모범 사례를 구현합니다.

  • 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 CLI가 AWS 계정과 상호 작용하고 애플리케이션이 테스트하려는 Lambda 함수에 액세스할 수 있도록 AWS 자격 증명을 구성합니다.

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으로 복구 및 서버 측 암호화.

  • 이메일 인증, AdvancedSecurityMode ENFORCED, 선택적 MFA(TOTP) 및 관리자 전용 사용자 생성이 포함된 Cognito 사용자 풀입니다.

  • 프롬프트 공격 필터링, PII 수정, 콘텐츠 필터링 및 거부된 주제 차단이 포함된 Amazon Bedrock Guardrail.

  • 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 파일 생성을 위한 후속 단계에서 사용됩니다.

관리자
작업설명필요한 기술

가상 환경을 생성합니다.

  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(직접 코드 배포 - 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. 요청 헤더: yes

    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_userUserService, auth.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. 테스트 사례를 검증하고 순위를 매깁니다.

앱 개발자

생성된 테스트를 검토합니다.

다음을 포함하여 생성된 각 테스트 사례를 검토합니다.

  • 유형: 양수(유효한 입력), 음수(유효하지 않은 입력) 또는 엣지(경계 조건)

  • 설명: 테스트가 검증하는 내용

  • 테스트 데이터: 실제 테스트 이벤트 페이로드

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 구성은 오래된 패턴을 자동으로 정리하여 시간이 지남에 따라 스토리지 비용을 관리하는 데 도움이 됩니다.

관리자
작업설명필요한 기술

배포된 리소스를 삭제합니다.

배포된 모든 리소스를 제거하려면:

AgentCore 에이전트를 삭제합니다.

agentcore destroy

CloudFormation 스택을 삭제합니다(DynamoDB 테이블, Cognito 사용자 풀 및 IAM 역할 삭제).

aws cloudformation delete-stack \ --stack-name lambda-test-generator-infra \ --region us-east-1
관리자

문제 해결

문제Solution

Lambda 코드를 가져올 때 "액세스 거부" 오류

  • IAM 권한에 대상 Lambda 함수에 lambda:GetFunctionConfiguration 대한 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 파일의 값을 사용합니다.

  • 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이 구성되지 않음" 경고

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

"Rate limit exceeded" 오류

시스템은 사용자당 60초당 5개의 요청으로 제한됩니다. 다시 시도하기 전에 표시된 시간을 기다립니다. 처리량 요구 사항이 더 높은 프로덕션 환경에서 사용하려면 main.py RATE_LIMIT_MAX_REQUESTSRATE_LIMIT_WINDOW 상수를 조정합니다.

관련 리소스

AWS 설명서