View a markdown version of this page

HTTP 프로토콜 계약 - Amazon Bedrock AgentCore

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

HTTP 프로토콜 계약

에이전트 애플리케이션에서 HTTP 프로토콜을 구현하기 위한 요구 사항을 이해합니다. HTTP 프로토콜을 사용하여 기존 요청/응답 패턴을 위한 직접 REST API 엔드포인트와 실시간 양방향 스트리밍 연결을 위한 WebSocket 엔드포인트를 생성합니다.

참고

HTTP( /invocations ) 및 WebSocket( /ws ) 엔드포인트는 포트 8080을 사용하여 동일한 컨테이너에 배포할 수 있으므로 단일 에이전트 구현을 통해 기존 API 상호 작용과 실시간 양방향 스트리밍을 모두 지원할 수 있습니다.

예제 코드는 AgentCore CLI 시작하기를 참조하세요.

컨테이너 요구 사항

에이전트는 다음 사양을 충족하는 컨테이너화된 애플리케이션으로 배포되어야 합니다.

  • 호스트: 0.0.0.0

  • 포트: 8080 - HTTP 기반 에이전트 통신을 위한 표준 포트

  • 플랫폼: ARM64 컨테이너 - AgentCore 런타임 환경과의 호환성에 필요합니다.

경로 요구 사항

/호출 - POST

JSON 입력 및 JSON/SSE 출력이 있는 기본 에이전트 상호 작용 엔드포인트입니다.

용도

사용자 또는 애플리케이션으로부터 수신 요청을 수신하고 에이전트의 비즈니스 로직을 통해 처리합니다.

사용 사례

/invocations 엔드포인트는 다음과 같은 몇 가지 주요 용도로 사용됩니다.

  • 직접 사용자 상호 작용 및 대화

  • 외부 시스템과 API 통합

  • 여러 요청의 배치 처리

  • 장기 실행 작업을 위한 실시간 스트리밍 응답

요청 형식 예

Content-Type: application/json { "prompt": "What's the weather today?" }

응답 형식

에이전트는 사용 사례에 따라 다음 형식 중 하나를 사용하여 응답할 수 있습니다.

JSON 응답(비스트리밍)

용도

빠르게 처리할 수 있는 요청에 대한 전체 응답을 제공합니다.

사용 사례

JSON 응답은 다음과 같은 경우에 적합합니다.

  • 간단한 질문 응답 시나리오

  • 결정적 계산

  • 빠른 데이터 조회

  • 상태 확인

JSON 응답 형식의 예

Content-Type: application/json { "response": "Your agent's response here", "status": "success" }

SSE 응답(스트리밍)

서버 전송 이벤트(SSE)를 사용하면 실시간 스트리밍 응답을 제공할 수 있습니다. 자세한 내용은 서버 전송 이벤트 사양을 참조하세요.

용도

장기 실행 작업과 향상된 사용자 경험을 위해 증분 응답 전송을 활성화합니다.

사용 사례

SSE 응답은 다음과 같은 경우에 적합합니다.

  • 실시간 대화 경험

  • 점진적 콘텐츠 생성

  • 중간 결과를 사용한 장기 실행 계산

  • 라이브 데이터 피드 및 업데이트

예제 SSE 응답 형식

Content-Type: text/event-stream data: {"event": "partial response 1"} data: {"event": "partial response 2"} data: {"event": "final response"}

/ws - WebSocket(선택 사항)

실시간 양방향 통신을 위한 기본 WebSocket 연결 엔드포인트입니다.

용도

WebSocket 업그레이드 요청을 수락하고 스트리밍 에이전트 상호 작용을 위한 지속적인 연결을 유지합니다.

사용 사례

/ws 엔드포인트는 다음과 같은 몇 가지 주요 용도로 사용됩니다.

  • 실시간 대화형 인터페이스

  • 즉각적인 피드백이 포함된 대화형 에이전트 세션

  • 양방향 통신을 통한 스트리밍 데이터 처리

연결 설정

WebSocket 연결은 HTTP 업그레이드 요청으로 시작됩니다.

HTTP 업그레이드 요청 예

GET /ws HTTP/1.1 Host: agent-endpoint Connection: Upgrade Upgrade: websocket Sec-WebSocket-Version: 13 Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== X-Amzn-Bedrock-AgentCore-Runtime-Session-Id: session-uuid

WebSocket 업그레이드 응답 예제

HTTP/1.1 101 Switching Protocols Connection: Upgrade Upgrade: websocket Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

메시지 처리 요구 사항

WebSocket 엔드포인트는 다음을 처리해야 합니다.

  • 연결 수락: 연결을 설정await websocket.accept()하기 위한 호출

  • 메시지 수신: 애플리케이션 요구 사항에 따라 텍스트 또는 이진 메시지 유형 지원

  • 메시지 처리: 에이전트의 비즈니스 로직에 따라 수신 메시지 처리

  • 응답 전송: send_text() 또는를 사용하여 적절한 응답 전송 send_bytes()

  • 연결 수명 주기: 연결 설정, 유지 관리 및 종료 관리

메시지 형식

텍스트 메시지
JSON 형식(권장)

용도

에이전트 상호 작용을 위한 구조화된 데이터 교환

메시지 예

{ "prompt": "Hello, can you help me with this question?", "session_id": "session-uuid", "message_type": "user_message" }

응답의 예

{ "response": "I'd be happy to help you with your question!", "session_id": "session-uuid", "message_type": "agent_response" }
일반 텍스트 형식

용도

간단한 텍스트 기반 통신

예제

Hello, can you help me with this question?
바이너리 메시지

용도

이미지, 오디오 또는 기타 바이너리 형식과 같은 텍스트가 아닌 데이터 지원

사용 사례

이진 메시지는 여러 시나리오를 지원합니다.

  • 다중 모달 에이전트 상호 작용

  • 파일 업로드 및 다운로드

  • 압축 데이터 전송

  • 이진 프로토콜 데이터

요구 사항 처리

이진 메시지 처리에는 다음이 필요합니다.

  • receive_bytes() 및 send_bytes() 메서드 사용

  • 적절한 바이너리 데이터 처리 구현

  • 메시지 크기 제한 고려

연결 수명 주기

연결 설정
  1. HTTP 핸드셰이크: 클라이언트가 WebSocket 업그레이드 요청 전송

  2. 업그레이드 응답: 에이전트가 101 전환 프로토콜을 수락하고 반환합니다.

  3. WebSocket Active: 양방향 통신 시작

  4. 세션 바인딩: 연결을 세션 식별자와 연결

메시지 교환
  1. 연속 루프: 메시지 수신 루프 구현

  2. 메시지 처리: 수신 메시지를 비동기적으로 처리

  3. 응답 생성: 적절한 응답 전송

  4. 오류 처리: 예외 및 연결 문제 관리

/ping - GET

용도

에이전트가 작동 중이고 요청을 처리할 준비가 되었는지 확인합니다.

사용 사례

/ping 엔드포인트는 다음과 같은 몇 가지 주요 용도로 사용됩니다.

  • 문제를 감지하고 해결하기 위한 서비스 모니터링

  • AWS의 관리형 인프라를 통한 자동 복구

응답 형식

에이전트의 상태를 나타내는 상태 코드를 반환합니다.

  • Content-Type: application/json

  • HTTP 상태 코드: 비정상 상태에 200 대한 정상적이고 적절한 오류 코드

에이전트가 백그라운드 작업을 처리해야 하는 경우 /ping 상태로 표시할 수 있습니다. ping 상태가 HealthyBusy 이면 런타임 세션이 활성 상태로 간주됩니다.

예제 Ping 응답 형식

{ "status": "<status_value>" }
상태(필수)

Healthy - 시스템이 새 작업을 수락할 준비가 되었습니다.

HealthyBusy - 시스템이 작동 중이지만 현재 비동기 작업으로 사용 중입니다. 상태가 인 동안 HealthyBusy런타임 세션은 활성 상태로 간주되고 활성 상태로 유지됩니다.

time_of_last_update(선택 사항)

status 마지막 변경 시점의 Unix 타임스탬프(초)입니다. 실제 상태 변경 시에만 설정합니다.

주의

모든 pingtime_of_last_update에서 현재 시간으로 설정하지 마십시오. 모든 ping에서 진행되는 타임스탬프는 지속적인 상태 변경 신호를 보내 유휴 세션 제한 시간이 실행되지 않도록 합니다. 그러면 세션은 MaxLifetime가 세션 할당량을 소진할 수 있을 때까지 지속됩니다. 필드를 생략하면 플랫폼이 자체적으로 상태 변경을 추적합니다. Bedrock AgentCore SDK를 사용하는 경우 ping 응답이 처리됩니다.

오류 처리

A2A, MCP 및 AG-UI 프로토콜과 달리 HTTP 프로토콜은 프로토콜별 봉투에 오류를 래핑하지 않습니다. 서비스는 오류를 네이티브 HTTP 응답으로 직접 반환합니다. HTTP 상태 코드는 예외를 반영하고 x-amzn-ErrorType 응답 헤더에는 예외 이름이 포함됩니다. 다음 표에는 받을 수 있는 예외가 나열되어 있습니다.

HTTP 오류 코드 런타임 예외(x-amzn-ErrorType) 설명

400

ValidationException

잘못된 요청 데이터 또는 파라미터

401

UnauthorizedException

인증 필요 또는 잘못된 자격 증명(OAuth 구성 에이전트)

402

ServiceQuotaExceededException

요청이 서비스 할당량을 초과함

403

AccessDeniedException

요청된 작업에 대한 권한 부족

404

ResourceNotFoundException

요청된 리소스가 존재하지 않음

409

ConflictException

리소스 충돌 - 리소스가 이미 있음

409

RetryableConflictException

세션 작업이 진행 중입니다. 다시 시도하세요.

424

RuntimeClientError

에이전트의 컨테이너가 4xx 또는 5xx 오류를 반환했습니다. CloudWatch 로그를 확인하세요.

429

ThrottlingException

요청이 너무 많음 - 요청 속도 제한을 초과했습니다.

500

InternalServerException

요청을 처리하는 동안 예기치 않은 오류가 발생했습니다.

ConflictException 및 RetryableConflictException 모두 HTTP 409를 반환합니다. x-amzn-ErrorType 헤더와 메시지는 이를 구분합니다. 두 번째 작업이 서비스가 프로비저닝하거나 해제하는 세션을 대상으로 하면 서비스는 RetryableConflictException (Session operation in progress, please retry)를 반환합니다. 이 조건은 일시적이며 재시도 가능합니다. 짧은 지수 백오프로 재시도합니다. 기본 재시도가 활성화된 경우 AWS SDKs 자동 재시도합니다. AWS SDK 없이 API를 직접 호출하는 경우 직접 다시 시도해야 합니다.

참고

ServiceQuotaExceededException는이 네이티브 HTTP 표면에서 HTTP 402를 반환합니다. A2A 프로토콜에서는 제한과 동일한 HTTP 상태인 HTTP 429를 반환합니다. MCP 프로토콜에서는 제한 JSON-RPC 오류 코드(-32003)를 공유하지만 HTTP 200을 반환합니다. AG-UI에서는 고유한 SERVICE_QUOTA_EXCEEDED SSE 코드를 사용하고 HTTP 429를 반환합니다.

OAuth 인증 응답

OAuth로 구성된 에이전트는 RFC 6749(OAuth 2.0) 인증 표준을 따릅니다. 인증이 누락된 경우 서비스는 클라이언트가 GetRuntimeProtectedResourceMetadata API를 통해 권한 부여 서버 엔드포인트를 검색할 수 있도록 (RFC 7235에 따라) WWW-Authenticate 헤더와 함께 401 무단 응답을 반환합니다.

401 권한이 없음

권한 부여 헤더가 누락된 경우 반환됩니다.

다음과 같이 WWW-Authenticate 헤더를 포함합니다.

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 헤더를 포함하지 않습니다.