AgentCore Runtime
세션 격리 MicroVM, 배포 파이프라인, 프로토콜·스트리밍, 운영
AgentCore Runtime
세션 격리 · 배포 파이프라인 · 프로토콜 · 운영
세션 하나에 VM 하나 — 에이전트 전용 실행 환경
MicroVM 격리부터 배포 파이프라인, 스트리밍 호출, 운영까지
세션 격리 모델
MicroVM · 세션 수 기반 확장 · 콜드와 웜
AgentCore Runtime
AI 에이전트 코드를 프로덕션에서 실행하는 관리형 환경
AgentCore Runtime
세션마다 MicroVM 하나 — 격리·확장은 세션 단위, 과금은 실제 소비 기반(활성 처리 CPU + 피크 메모리, 요청당·세션 시간당 과금 없음)입니다
- 세션 1개 = 전용 MicroVM 1개
- 세션당 2vCPU / 8GB 고정
- 세션 수 기반 0→N 자동 확장
- 최대 8시간 세션 · 유휴 비용 0
Lambda의 격리 단위가 요청이라면, Runtime의 격리 단위는 세션입니다.
이 차이 하나가 확장·과금·격리 모델 전부를 바꿉니다.
왜 에이전트 전용 실행 환경인가
챗봇은 요청 1회로 끝, 에이전트는 수 분에서 수 시간의 멀티스텝 루프
| 항목 | Lambda | Fargate | AgentCore Runtime |
|---|---|---|---|
| 최대 실행 시간 | 15분 | 무제한 | 세션 8시간 |
| 스트리밍 | 응답 스트리밍만 | 직접 구현 | SSE · WebSocket 내장 |
| 세션 격리·상태 유지 | 없음 | 직접 구현 | MicroVM 자동 |
| 스케일링 | 자동 (요청 기반) | 수동 설정 | 자동 (세션 수 기반, 0→N) |
| 인프라 코드 | 적음 — 함수 설정 수준 | 많음 — 클러스터·태스크 정의 | 0줄 |
| 유휴 비용 | 0 | 상시 가동 | 0 (세션 없으면 0원) |
Lambda는 시간이 부족하고, Fargate는 운영이 무겁습니다.
장시간 루프 + 세션 격리 + 유휴 비용 0을 동시에 — 에이전트 전용 환경이 필요한 이유입니다.
세션 1개 = MicroVM 1개
User → Endpoint → MicroVM 격리 세션 → Tools·Bedrock 연동 — 세션마다 VM 하나씩, 대화가 섞일 수 없는 구조
다른 사용자의 에이전트와 메모리·파일시스템·네트워크가 완전히 분리됩니다.
세션이 끝나면 MicroVM은 즉시 제거 — 데이터 잔존도, 유휴 비용도 없습니다.
확장의 단위는 세션 수
세션이 생기면 MicroVM이 늘고, 세션이 끝나면 0으로 — 쿼터도 세션 단위
확장 트리거는 CPU 사용률이 아니라 세션 수입니다.
상시 최소 인스턴스 개념이 없습니다 — 세션이 0이면 인스턴스도 0, 비용도 0입니다.
콜드 스타트와 웜 — 세션 재사용
콜드의 대부분은 VM이 아니라 코드·이미지 로드에서 발생
콜드 스타트 — 새 MicroVM 기동
- VM 부팅 자체는 약 100ms
- 코드 로드를 포함한 전체 초기화는 수 초
- 공식 절대 수치는 미공표 — 릴리스 노트는 개선율(25~35%)만 공개
- Direct Code(ZIP)는 새 세션 생성 25 TPS — 초당 단위
웜 — Idle 세션 재사용
- 기동된 세션은 Idle timeout(기본 15분, 60초~8시간 설정)까지 유지
- Idle 세션은 컴퓨트 과금 없이 대기 — 재호출 시 즉시 재사용(콜드스타트 회피)
- Container는 이미지 로딩 탓에 새 세션 생성 400 TPM — 분당 단위
"항상 웜 인스턴스 몇 대" 같은 설정은 없습니다.
웜은 Idle 세션 재사용에서 옵니다 — 세션 ID를 유지해 콜드스타트를 회피하세요.
배포 파이프라인
agentcore dev · deploy -y · CDK L2 · Harness
배포 경로
로컬에서 검증한 코드가 그대로 프로덕션으로
로컬에서 프로덕션까지
같은 코드 한 벌 — dev로 검증하고, deploy로 올리고, CDK로 코드화합니다
- agentcore dev — 로컬 서버 + 인스펙터
- agentcore deploy -y — 원커맨드 배포
- CDK L2 — aws-cdk-lib 통합 (stable)
- Managed Harness — 선언적 대안
dev → deploy → IaC 순서로 굳혀 갑니다.
배포 방식이 바뀌어도 에이전트 코드는 그대로입니다.
에이전트 코드의 배포 계약
Strands든 LangGraph든 — 진입점 하나만 지키면 Runtime에 배포 가능
핵심 포인트
- BedrockAgentCoreApp
- HTTP 엔드포인트를 자동 관리하는 런타임 래퍼 — 서버 코드 불필요
- @app.entrypoint
- 사용자 요청이 라우팅되는 진입점 함수 — payload를 받아 결과 반환
- payload["prompt"]
- 호출 측이 보낸 JSON — invoke 시 넘긴 프롬프트가 담김
- requirements.txt
- 의존성 목록 — 배포 시 자동 설치, 인프라 코드는 0줄
코드
from bedrock_agentcore import BedrockAgentCoreApp
from strands import Agent, tool
# 런타임 래퍼 — HTTP 엔드포인트를 자동 관리
app = BedrockAgentCoreApp()
@tool
def search_menu(query: str) -> str:
"""식당 메뉴를 검색합니다."""
return f"'{query}' 검색 결과: 파스타 35,000원"
# 사용자 요청이 이 함수로 라우팅되는 진입점
@app.entrypoint
def my_agent(payload):
agent = Agent(tools=[search_menu])
result = agent(payload.get("prompt"))
return {"result": result.message}
CLI 파이프라인 — create · dev · deploy · invoke
네 명령으로 이어지는 로컬 개발부터 프로덕션 호출까지
터미널 — 로컬 개발부터 프로덕션 호출까지
1
2
3
4
deploy 한 번에 자동 생성 — IAM 실행 역할 · CodeBuild · ECR · S3 · Runtime · Endpoint. 프로덕션 반영 전에는 --dry-run으로 변경 사항부터 확인하세요.
IaC로 굳히기 — CDK L2 Constructs
CLI도 결국 CDK로 스택 생성 — 팀 파이프라인이라면 처음부터 CDK L2
agentcore CLI
- deploy -y 원커맨드 — 가장 빠른 반복 주기
- 내부적으로 CDK → CloudFormation 스택 생성
- IAM·ECR·CodeBuild·S3까지 자동 프로비저닝
언제 — 개인 개발 · 프로토타입 · 빠른 반복 배포
CDK L2 Constructs 추천
- aws-cdk-lib/aws-bedrockagentcore — v2.255.0부터 stable
- Runtime·Memory·Gateway·Identity 등 stable — Policy 서브모듈만 alpha
- 기존 CDK 앱·CI/CD 파이프라인에 통합, 하위 호환 보장
언제 — 팀 공유 인프라 · 리뷰 가능한 IaC · CI/CD 파이프라인
둘은 대립이 아니라 같은 길의 두 구간입니다.
혼자서는 CLI로 달리고, 팀 파이프라인에 들어가면 CDK L2로 코드화하세요.
선언적 대안 — Managed Harness
코드를 배포하는 Runtime, 구성을 선언하는 Harness — 갈림길은 커스텀 로직의 유무
Runtime — 코드를 배포
- Strands·LangGraph·CrewAI 등 커스텀 코드 직접 배포
- 에이전트 루프를 코드로 완전히 제어
- 이 모듈에서 다룬 dev → deploy 파이프라인
Harness — 구성을 선언 (GA)
- 모델·도구·메모리·Skills를 선언만 — 코드 작성 불필요
- CreateHarness + InvokeHarness 2개 API로 배포·호출
- Strands 기반 오케스트레이션 — agentcore export로 코드 전환 가능
커스텀 로직이 필요하면 Runtime, 선언으로 충분하면 Harness
Harness의 자세한 이야기는 AgentCore Harness 모듈에서 이어집니다.
프로토콜과 스트리밍
HTTP · MCP · A2A · InvokeAgentRuntime · WebSocket
호출 인터페이스
배포된 에이전트를 부르는 데이터 플레인 API
InvokeAgentRuntime
세션·버전·스트리밍이 파라미터 하나씩 — 호출의 모든 축이 이 API에 모입니다
- boto3.client("bedrock-agentcore")
- runtimeSessionId — 세션 = 격리 단위
- qualifier — 호출할 버전 지정
- 응답은 청크 스트리밍
리소스 관리는 bedrock-agentcore-control, 호출은 bedrock-agentcore
컨트롤 플레인과 데이터 플레인부터 구분하면 서비스명 혼동이 사라집니다.
프로토콜 3종 — create 시점의 선언
에이전트 로직은 그대로 — 바뀌는 것은 노출 방식뿐
HTTP
기본 프로토콜 — 요청/응답 + 스트리밍
- agentcore create 기본값
- dev 서버 포트 8080
- 일반 클라이언트·서비스 연동
MCP
Runtime을 MCP 서버로 노출
- --protocol MCP로 선택
- dev 서버 포트 8000
- Stateful MCP 세션 지원 (stateless_http=False)
A2A
에이전트 간 통신 프로토콜
- --protocol A2A로 선택
- dev 서버 포트 9000
- Agent Card: /.well-known/agent-card.json
프로토콜은 create 시점의 선언입니다 — 사람이 부르면 HTTP, 도구로 쓰이면 MCP, 에이전트끼리면 A2A입니다.
InvokeAgentRuntime — boto3로 호출
이미 배포된 에이전트를 다른 서비스에서 호출할 때 — Lambda·Step Functions의 한 스텝으로도
핵심 포인트
- agentRuntimeArn
- 배포된 에이전트의 ARN — 어느 에이전트를 부를지
- runtimeSessionId
- 세션 식별자 (33자 이상, UUID 권장) — 같은 ID면 같은 MicroVM
- qualifier
- 호출할 버전 — DEFAULT는 최신 배포를 가리킴
- response
- 청크 단위 스트리밍 — 모아서 디코딩
코드
import boto3, json, uuid
# 데이터 플레인 클라이언트 — 호출 전용 (리소스 관리는 -control)
client = boto3.client("bedrock-agentcore", region_name="us-east-1")
# 에이전트 호출 — 세션 ID가 곧 MicroVM 격리 단위
response = client.invoke_agent_runtime(
agentRuntimeArn="arn:aws:bedrock-agentcore:us-east-1:123456789012:runtime/MyAgent",
runtimeSessionId=str(uuid.uuid4()),
payload=json.dumps({"prompt": "최근 주문 상태 확인해줘"}).encode(),
qualifier="DEFAULT",
)
# 스트리밍 응답 — 청크를 모아 디코딩
content = [chunk.decode("utf-8") for chunk in response.get("response", [])]
print(json.loads("".join(content)))
호출 모드와 시간 한도
에이전트가 오래 달릴수록 UX를 결정하는 스트리밍
| 호출 모드 | 최대 시간 | 용도 |
|---|---|---|
| 동기 요청/응답 | 15분 | 짧은 단일 작업 — 응답을 기다렸다 한 번에 반환 |
| SSE · WebSocket 스트리밍 | 60분 | 진행 상황·토큰을 실시간 전달 (프레임 64KB) |
| 비동기 작업 | 8시간 | 장시간 루프 — 세션 최대 수명과 동일 |
| 인터랙티브 셸 (PTY) | 세션 내 | agentcore exec --it — WebSocket 터미널로 세션 접속 |
동기 15분 · 스트리밍 60분 · 비동기 8시간 — 페이로드는 최대 100MB
분 단위를 넘는 작업이라면 처음부터 스트리밍이나 비동기로 설계하세요.
양방향 스트리밍 — WebSocket
듣는 동시에 말하는 에이전트 — 음성·실시간 UI가 요구하는 진짜 양방향
- InvokeAgentRuntimeWithWebsocketStream
- 전용 데이터 플레인 API — wss://bedrock-agentcore.{region}.amazonaws.com/runtimes/{arn}/ws
- 컨테이너 계약
- 8080 포트 /ws 경로 + /ping 헬스체크 — 같은 컨테이너가 InvokeAgentRuntime과 WebSocket을 동시 서빙
- 인증 3종
- SigV4 헤더 · SigV4 pre-signed URL(브라우저 직결용) · OAuth 2.0
- 용도
- 음성 에이전트·인터럽트 처리 — 대화 중간에 끼어들어도 컨텍스트 유지
SSE가 응답의 실시간이라면 WebSocket은 대화의 실시간입니다.
클라이언트 측 연결은 AgentCore SDK의 AgentCoreRuntimeClient가 담당합니다.
운영
버전 · 엔드포인트 · 네트워크 · 파일시스템 · 관측
운영 축
배포가 끝난 뒤 남는 세 가지 관리 축
버전 · 엔드포인트 · 관측
코드는 버전으로 쌓이고, 트래픽은 엔드포인트로 들어오고, 상태는 CloudWatch로 보입니다
- 버전 — 에이전트당 최대 1,000
- 엔드포인트 — 에이전트당 최대 10
- default 엔드포인트 자동 생성 (개발용)
- CloudWatch 자동 수집 — 계측 코드 0줄
배포(P2)와 호출(P3)을 잇는 것이 이 세 축입니다.
버전 → 엔드포인트 → 관측 순서로 하나씩 짚어 봅니다.
버전과 엔드포인트
배포의 기록과 호출의 진입점 — 분리되어 있어 가능한 운영
버전 — 배포의 기록
- 업데이트할 때마다 새 버전으로 쌓임 — 콘솔 Latest version
- 에이전트당 최대 1,000개 (Service Quotas 조정 가능)
- invoke의 qualifier가 가리키는 대상
엔드포인트 — 호출의 진입점
- 클라이언트가 부르는 이름 — 버전과 분리된 호출 지점
- 에이전트당 최대 10개 (조정 가능)
- 생성 시 default 엔드포인트 자동 제공 — 개발용
- qualifier="DEFAULT"는 최신 배포를 가리킴
호출 측은 엔드포인트만 알면 됩니다 — 어떤 버전이 응답할지는 운영이 결정합니다.
개발은 자동 생성된 default로, 프로덕션 진입점은 분리해 두세요.
네트워크 — PUBLIC과 VPC
에이전트가 사내 DB·내부 API에 닿아야 하는 순간, 갈림길이 되는 네트워크 모드
PUBLIC (기본)
- 관리형 네트워크에서 실행 — 인터넷 egress 자동
- networkConfiguration 기본값 — 설정 0
언제 — 공개 API·SaaS 호출에는 이것으로 충분
VPC
- 내 서브넷·보안 그룹 안에서 실행 — RDS·내부 API 접근
- 보안 그룹 아웃바운드로 최소 권한 제어
- 컨테이너 에이전트는 ECR·S3·Logs VPC 엔드포인트 필요
언제 — 사내 DB·내부 API 등 VPC 안 리소스에 닿아야 할 때
호출 경로까지 사설로 좁히려면 PrivateLink — 데이터 플레인(bedrock-agentcore)·컨트롤 플레인(-control) 인터페이스 엔드포인트로 인터넷 우회 없이 호출합니다.
세션을 넘는 파일 — BYO File System
세션이 끝나면 사라지는 MicroVM — 남길 파일은 외부 파일시스템을 세션 경로에 마운트
S3 Files
버킷 자동 동기화
- S3 버킷을 세션 경로에 마운트 — 자동 동기화
- 공유 스킬·프롬프트·데이터셋을 재다운로드 없이 로드
- 세션 간 중간 결과 유지
EFS
공유 NFS
- EFS 액세스 포인트를 세션 경로에 마운트
- sub-ms 지연 — 빈번한 읽기·쓰기에 적합
- 멀티 에이전트가 같은 파일시스템을 공유
세션당 최대 5개 마운트, Runtime 지원 전 리전 제공
stop → resume 간 파일을 남기려면 Managed Session Storage(S3 기반 관리형)를 함께 구성합니다 — 세션당 1GB·최대 14일 유지.
관측 연결 — 계측 코드 0줄
트레이스·메트릭·로그 자동 수집 — CloudWatch AI Operations에서 바로 조회
- AWS/Bedrock-AgentCore
- CloudWatch 메트릭 네임스페이스 — Invocations · Latency · Throttles · SystemErrors/UserErrors
- ActiveSessionCount
- 활성 세션 수 (신규 메트릭) — 분당 1회, Service 차원 필터. 세션 쿼터 감시에 직결
- GenAI Observability
- 콘솔 Assess > Observability → CloudWatch AI Operations — 세션·트레이스·토큰·에러율 대시보드
- Unified span destination
- 스팬을 에이전트 자체 로그 그룹의 spans 스트림으로 수신 — UNIFIED_TRACES_DESTINATION_ENABLED, 2026-07-20부터 신규 에이전트 기본
- agentcore logs
- 에이전트 로그를 CLI에서 바로 조회 — traces 명령으로 트레이스도 확인
세션 격리(P1)는 세션 지표로 이어집니다 — 확장 단위가 세션이니 감시 단위도 세션입니다.
ActiveSessionCount를 쿼터(5,000/2,500) 대비로 지켜보세요.
실습
AgentCore CLI 배포 — create · dev · deploy · invoke
실습 — AgentCore CLI 배포
AgentCore CLI로 에이전트 프로젝트를 생성하고 배포한 후, 도구를 추가하여 재배포합니다
학습 목표
- agentcore create로 프로젝트 생성 (--defaults)
- agentcore dev로 로컬에서 동작 확인 — 브라우저 인스펙터
- agentcore deploy -y로 배포하고 agentcore invoke로 호출
- 도구를 추가하여 재배포
MicroVM 격리 · dev → deploy → CDK · InvokeAgentRuntime · 버전과 관측