A2A 프로토콜 계약
A2A 프로토콜 계약은 Amazon Bedrock AgentCore 런타임에서 agent-to-agent 통신을 구현하기 위한 요구 사항을 정의합니다. 이 계약은 A2A 서버가 구현해야 하는 기술 요구 사항, 엔드포인트 및 통신 패턴을 지정합니다.
예제 코드는 AgentCore 런타임에서 A2A 서버 배포를 참조하세요.
프로토콜 구현 요구 사항
A2A 서버는 다음과 같은 특정 프로토콜 요구 사항을 구현해야 합니다.
-
전송: HTTP를 통한 JSON-RPC 2.0
- 표준화된 agent-to-agent 통신 활성화 -
세션 관리: 플랫폼은 세션 격리를 위한
X-Amzn-Bedrock-AgentCore-Runtime-Session-Id헤더를 자동으로 추가합니다. -
에이전트 검색:
/.well-known/agent-card.json엔드포인트에 에이전트 카드를 제공해야 합니다.
컨테이너 요구 사항
A2A 서버는 다음 사양을 충족하는 컨테이너화된 애플리케이션으로 배포되어야 합니다.
-
호스트:
0.0.0.0 -
포트:
9000- A2A 서버 통신을 위한 표준 포트(HTTP 및 MCP 프로토콜과 다름) -
플랫폼: ARM64 컨테이너 - AWS Amazon Bedrock AgentCore 런타임 환경과의 호환성에 필요합니다.
경로 요구 사항
/ - POST
용도
JSON-RPC 2.0 메시지를 수신하고 에이전트의 기능을 통해 이를 처리하고 A2A 프로토콜 메시지를 사용하여 InvokeAgentRuntime API 페이로드를 완전히 전달합니다.
사용 사례
루트 엔드포인트는 다음과 같은 몇 가지 주요 용도로 사용됩니다.
-
Agent-to-agent 통신 및 협업
-
다단계 에이전트 워크플로 및 작업 위임
-
에이전트 간의 실시간 대화 경험
-
도구 호출 및 기능 공유
요청 형식
A2A 서버는 JSON-RPC 2.0 형식의 요청을 예상합니다.
Content-Type: application/json { "jsonrpc": "2.0", "id": "req-001", "method": "message/send", "params": { "message": { "role": "user", "parts": [ { "kind": "text", "text": "Your message content here" } ], "messageId": "unique-message-id" } } }
응답 형식
A2A 서버는 작업 및 아티팩트가 포함된 JSON-RPC 2.0 형식의 응답으로 응답합니다.
Content-Type: application/json { "jsonrpc": "2.0", "id": "req-001", "result": { "artifacts": [ { "artifactId": "unique-artifact-id", "name": "agent_response", "parts": [ { "kind": "text", "text": "Agent response content" } ] } ] } }
/.well-known/agent-card.json - GET
용도
에이전트 검색 및 기능 광고를 위한 에이전트 카드 메타데이터 제공
사용 사례
에이전트 카드 엔드포인트는 다음과 같은 몇 가지 주요 용도로 사용됩니다.
-
다중 에이전트 시스템에서 에이전트 검색
-
역량 및 기술 광고
-
인증 요구 사항 사양
-
서비스 엔드포인트 구성
응답 형식
에이전트의 자격 증명과 기능을 설명하는 JSON 메타데이터를 반환합니다.
Content-Type: application/json { "name": "Agent Name", "description": "Agent description and purpose", "version": "1.0.0", "url": "https://bedrock-agentcore.region.amazonaws.com/runtimes/agent-arn/invocations/", "protocolVersion": "0.3.0", "preferredTransport": "JSONRPC", "capabilities": { "streaming": true }, "defaultInputModes": ["text"], "defaultOutputModes": ["text"], "skills": [ { "id": "skill-id", "name": "Skill Name", "description": "Skill description and capabilities", "tags": [] } ] }
/ping - GET
용도
A2A 서버가 작동하고 요청을 처리할 준비가 되었는지 확인합니다.
응답 형식
에이전트의 상태를 나타내는 상태 코드를 반환합니다.
-
Content-Type:
application/json -
HTTP 상태 코드: 비정상 상태에
200대한 정상적이고 적절한 오류 코드
{ "status": "Healthy" }
status는 필수이며 Healthy 또는 중 하나입니다HealthyBusy. 상태가 인 동안 HealthyBusy런타임 세션은 활성 상태로 유지됩니다.
선택적 time_of_last_update 필드(초 단위의 Unix 타임스탬프)를 포함하여가 status 마지막으로 변경된 시기를 보고할 수 있습니다.
주의
모든 pingtime_of_last_update에서 현재 시간으로 설정하지 마십시오. 모든 ping에서 진행되는 타임스탬프는 지속적인 상태 변경 신호를 보내 유휴 세션 제한 시간이 실행되지 않도록 합니다. 그러면 세션은 MaxLifetime가 세션 할당량을 소진할 수 있을 때까지 지속됩니다. 필드를 생략하면 플랫폼이 자체적으로 상태 변경을 추적합니다. Bedrock AgentCore SDK를 사용하는 경우 ping 응답이 처리됩니다.
인증 요구 사항
A2A 서버는 여러 인증 메커니즘을 지원합니다.
OAuth 2.0 베어러 토큰
A2A 클라이언트 인증의 경우 요청 헤더에 베어러 토큰을 포함합니다.
Authorization: Bearer <oauth-token> X-Amzn-Bedrock-AgentCore-Runtime-Session-Id: <session-id>
SigV4 인증
Standard AWS SigV4 인증은 프로그래밍 방식 액세스에도 지원됩니다.
오류 처리
A2A 서버는 프로토콜 준수를 유지하기 위해 HTTP 200 상태 코드와 함께 오류를 표준 JSON-RPC 2.0 오류 응답으로 반환합니다.
| JSON-RPC 오류 코드 | 런타임 예외 | HTTP 오류 코드 | JSON-RPC 오류 메시지 |
|---|---|---|---|
|
-32501 |
ResourceNotFoundException |
404 |
리소스를 찾을 수 없음 - 요청된 리소스가 존재하지 않음 |
|
-32052 |
ValidationException |
400 |
검증 오류 - 잘못된 요청 데이터 |
|
-32053 |
ThrottlingException |
429 |
속도 제한 초과 - 요청이 너무 많음 |
|
-32054 |
ResourceConflictException |
409 |
리소스 충돌 - 리소스가 이미 있음 |
|
-32055 |
RuntimeClientError |
424 |
런타임 클라이언트 오류 - 자세한 내용은 CloudWatch 로그를 확인하세요. |
오류 응답 예제:
{ "jsonrpc": "2.0", "id": "req-001", "error": { "code": -32052, "message": "Validation error - Invalid request data" } }
OAuth 인증 응답
OAuth로 구성된 에이전트는 RFC 6749(OAuth 2.0)
401 무단 - 인증 누락
HTTP/1.1 401 Unauthorized WWW-Authenticate: Bearer resource_metadata="https://bedrock-agentcore.{region}.amazonaws.com/runtimes/{ESCAPED_ARN}/invocations/.well-known/oauth-protected-resource?qualifier={QUALIFIER}"
참고
SigV4-configured 에이전트는 ACCESS_DENIED 오류와 함께 HTTP 403을 반환하며 WWW-Authenticate 헤더를 포함하지 않습니다.