AWS 콘솔에서 AWS CloudFormation으로 이동합니다. sample-application 스택을 선택합니다. 중앙 패널에서 Outputs 탭을 클릭합니다. ApplicationURL의 값을 복사합니다.
노트북의 새 브라우저에서 이전 단계의 값을 붙여넣습니다. Support Tickets를 선택하고 View Tickets 탭을 클릭합니다. 새로운 지원 티켓이 생성된 것을 확인할 수 있습니다.
Support Ticket
에이전트 테스트
에이전트 실행
테스트 스크립트 수정 필요: 테스트 스크립트의 Cognito 로그인이 example.com 콜백으로 리다이렉트될 때 SSL 인증서 오류가 발생합니다. 아래 패치를 먼저 실행하세요.
🔍 이 패치는 무엇을 변경하나요?
Cognito 인증 성공 후 https://example.com/auth/callback?code=...로 리다이렉트될 때, requests 라이브러리가 실제로 example.com에 HTTPS 연결을 시도하여 SSL 인증서 오류가 발생합니다. 이 패치는 SSL 오류를 catch하여 실패한 요청 URL에서 인증 코드를 추출합니다. 인증 자체는 이미 성공한 상태이므로 코드 추출만으로 충분합니다.
다음으로, bastion 인스턴스에서 테스트 스크립트를 실행합니다:
🔍 이 스크립트는 무엇을 하나요?
Cognito 로그인 화면이 브라우저에서 열림 (인증정보 입력 필요)
OAuth2 Authorization Code 흐름으로 Bearer Token 획득
AgentCore Runtime에 HTTP 연결 → 대화형 프롬프트 시작
에이전트가 Gateway를 통해 Lambda 도구를 호출하며 응답
Amazon Cognito를 사용하여 다음 자격 증명으로 인증합니다:
사용자명: test@example.com
비밀번호: TestPassword123!
로그인 프로세스는 완료하는 데 10-15초 정도 소요될 수 있습니다.
Cognito Auth
대화형 질문
채팅을 통해 에이전트에게 자연어로 4가지 질문을 합니다:
Q1: 도구 접근 확인
영어: What tools do you have?
Tools Access
에이전트가 사용 가능한 도구 목록(dns-resolve, connectivity, cloudwatch-monitoring)을 응답합니다.
Q2: DNS 해석 테스트
영어: Can you resolve reporting.examplecorp.com?
DNS 도구 테스트
에이전트가 dns-resolve 도구를 호출하여 호스트명을 IP와 인스턴스 ID로 해석합니다.
Q3: CloudWatch 통합 테스트
영어: Can you retrieve CPU Utilization for reporting.examplecorp.com for last 5 minutes?
CloudWatch Tool Test
에이전트가 DNS 해석 후 CloudWatch 메트릭을 조회합니다.
Q4: 연결성 문제 진단
영어: Can you check connectivity between reporting.examplecorp.com and database.examplecorp.com?
Connectivity Check
에이전트가 다음 단계를 자동으로 수행합니다:
dns-resolve로 양쪽 호스트명 해석
connectivity(action="check")로 VPC Reachability Analyzer 실행
보안 그룹 규칙 누락 발견 및 보고
Q5: 수정 요청
해결 요청 메시지가 나타나면 다음을 입력합니다:
영어: Yes, please fix
Connectivity Fix
에이전트가 사용자 동의를 확인한 후:
connectivity(action="fix")로 보안 그룹 규칙 적용
수정 후 connectivity(action="check")로 자동 검증
세션을 종료하려면 exit를 입력합니다.
검증
VPC Reachability Analysis 세부 정보가 포함된 업데이트된 티켓을 확인합니다. VPC Reachability Analyzer로 이동하여 문제 해결 중 사용된 경로를 검토합니다.
VPC Reachability Analyzer 결과
모듈 1 완료! 에이전트가 자율적으로 네트워크 연결성 문제를 진단하고 수정했습니다. 다음 모듈에서는 CloudWatch Investigations로 AI 기반 근본 원인 분석을 수행합니다.
이 단계가 완료되었습니다. Next를 클릭하여 진행하세요.
코드 분석: 에이전트 실행 흐름
TroubleshootingAgent 호출 과정 (agent.py, 179줄)
에이전트가 사용자 질문을 처리하는 전체 흐름:
도구 실행 흐름 (연결성 진단 예시)
시스템 프롬프트 핵심 규칙
규칙
설명
DNS 선행
DNS 이름 사용 시 반드시 dns-resolve 먼저 호출
DB 목적지 규칙
데이터베이스 목적지는 IP 주소 사용 (ENI ID 금지)
사용자 동의
action="fix" 실행 전 반드시 사용자 허가 필요
검증 필수
수정 후 action="check"로 반드시 결과 검증
포트 기본값
DB 연결은 TCP 3306 (MySQL) 사용
Break 스크립트 분석 (module-1-break-script.py, 324줄)
핵심 포인트: Strands Framework의 재귀적 Event Loop이 핵심입니다. LLM이 tool_use를 반환하면 프레임워크가 자동으로 도구를 실행하고 결과를 LLM에 전달합니다. LLM이 최종 텍스트 응답을 반환할 때까지 이 루프가 반복되며, 개발자는 도구 실행 로직을 직접 구현할 필요가 없습니다.
reporting.examplecorp.com 의 지난 5분간 CPU Utilization 알려줘
reporting.examplecorp.com 과 database.examplecorp.com 사이 연결 문제는?
응 고쳐줘
class TroubleshootingAgent:
def __init__(self, bearer_token, memory_hook=None,
bedrock_model_id="global.anthropic.claude-sonnet-4-20250514-v1:0"):
# 1. Bedrock 모델 초기화
self.model = BedrockModel(model_id=self.model_id)
# 2. Gateway MCP 클라이언트 연결
gateway_url = get_ssm_parameter("/app/troubleshooting/agentcore/gateway_url")
self.gateway_client = MCPClient(
lambda: streamablehttp_client(
gateway_url,
headers={"Authorization": f"Bearer {bearer_token}"},
)
)
self.gateway_client.start()
mcp_tools = self.gateway_client.list_tools_sync() # Gateway에서 도구 목록 조회
# 3. Strands Agent 생성 (모델 + 프롬프트 + 도구)
self.agent = Agent(
model=self.model,
system_prompt=self.system_prompt,
tools=[current_time] + mcp_tools, # 기본 도구 + MCP 도구
)
async def stream(self, user_query: str):
"""비동기 스트리밍 응답"""
async for event in self.agent.stream_async(user_query):
if "data" in event:
yield event["data"]
def main():
# 1. RDS 인스턴스에서 보안 그룹 찾기
rds_response = rds_client.describe_db_instances()
# 'sample-app-image-metadata-db' 또는 유사 이름 검색
# 2. MySQL 포트(3306) 인바운드 규칙 찾기
for rule in sg_info.get('IpPermissions', []):
if rule.get('FromPort') == 3306 and rule.get('ToPort') == 3306:
target_rules.append(rule) # CIDR 기반 규칙 수집
# 3. 보안 그룹 규칙 제거 (장애 주입)
ec2_client.revoke_security_group_ingress(
GroupId=target_sg_id,
IpPermissions=[rule] # Reporting VPC CIDR (10.1.0.0/16) 제거
)
# 4. 서포트 티켓 생성 (API Gateway 또는 Lambda 직접 호출)
ticket_data = {
"subject": "Reporting down for Imaging Platform",
"priority": "medium",
}