Home / AgentCore Runtime & Harness / AgentCore Runtime
Module

AgentCore Runtime

세션 격리 MicroVM, 배포 파이프라인, 프로토콜·스트리밍, 운영

⏱ 45분 177 / 189

AgentCore Runtime

세션 격리 · 배포 파이프라인 · 프로토콜 · 운영

세션 하나에 VM 하나 — 에이전트 전용 실행 환경

MicroVM 격리부터 배포 파이프라인, 스트리밍 호출, 운영까지

세션 격리 모델

MicroVM · 세션 수 기반 확장 · 콜드와 웜

PART 1 · 세션 격리 모델

AgentCore Runtime

AI 에이전트 코드를 프로덕션에서 실행하는 관리형 환경

AgentCore Runtime

세션마다 MicroVM 하나 — 격리·확장은 세션 단위, 과금은 실제 소비 기반(활성 처리 CPU + 피크 메모리, 요청당·세션 시간당 과금 없음)입니다

  • 세션 1개 = 전용 MicroVM 1개
  • 세션당 2vCPU / 8GB 고정
  • 세션 수 기반 0→N 자동 확장
  • 최대 8시간 세션 · 유휴 비용 0
takeaway

Lambda의 격리 단위가 요청이라면, Runtime의 격리 단위는 세션입니다.
이 차이 하나가 확장·과금·격리 모델 전부를 바꿉니다.

PART 1 · 세션 격리 모델

에이전트 전용 실행 환경인가

챗봇은 요청 1회로 끝, 에이전트는 수 분에서 수 시간의 멀티스텝 루프

항목LambdaFargateAgentCore Runtime
최대 실행 시간15분무제한세션 8시간
스트리밍응답 스트리밍만직접 구현SSE · WebSocket 내장
세션 격리·상태 유지없음직접 구현MicroVM 자동
스케일링자동 (요청 기반)수동 설정자동 (세션 수 기반, 0→N)
인프라 코드적음 — 함수 설정 수준많음 — 클러스터·태스크 정의0줄
유휴 비용0상시 가동0 (세션 없으면 0원)
takeaway

Lambda는 시간이 부족하고, Fargate는 운영이 무겁습니다.
장시간 루프 + 세션 격리 + 유휴 비용 0을 동시에 — 에이전트 전용 환경이 필요한 이유입니다.

PART 1 · 세션 격리 모델

세션 1개 = MicroVM 1개

User → Endpoint → MicroVM 격리 세션 → Tools·Bedrock 연동 — 세션마다 VM 하나씩, 대화가 섞일 수 없는 구조

takeaway

다른 사용자의 에이전트와 메모리·파일시스템·네트워크가 완전히 분리됩니다.
세션이 끝나면 MicroVM은 즉시 제거 — 데이터 잔존도, 유휴 비용도 없습니다.

PART 1 · 세션 격리 모델

확장의 단위는 세션 수

세션이 생기면 MicroVM이 늘고, 세션이 끝나면 0으로 — 쿼터도 세션 단위

0 → N 세션 수 기반 자동 확장 — 세션이 없으면 0
5,000 계정당 활성 세션 — 버지니아·오레곤 기준 (기타 리전 2,500, 조정 가능)
200 TPS InvokeAgentRuntime 스로틀링 (에이전트당)
2vCPU · 8GB 세션당 고정 할당 (조정 불가)
takeaway

확장 트리거는 CPU 사용률이 아니라 세션 수입니다.
상시 최소 인스턴스 개념이 없습니다 — 세션이 0이면 인스턴스도 0, 비용도 0입니다.

PART 1 · 세션 격리 모델

콜드 스타트와 웜 — 세션 재사용

콜드의 대부분은 VM이 아니라 코드·이미지 로드에서 발생

콜드 스타트 — 새 MicroVM 기동

  • VM 부팅 자체는 약 100ms
  • 코드 로드를 포함한 전체 초기화는 수 초
  • 공식 절대 수치는 미공표 — 릴리스 노트는 개선율(25~35%)만 공개
  • Direct Code(ZIP)는 새 세션 생성 25 TPS — 초당 단위

웜 — Idle 세션 재사용

  • 기동된 세션은 Idle timeout(기본 15분, 60초~8시간 설정)까지 유지
  • Idle 세션은 컴퓨트 과금 없이 대기 — 재호출 시 즉시 재사용(콜드스타트 회피)
  • Container는 이미지 로딩 탓에 새 세션 생성 400 TPM — 분당 단위
takeaway

"항상 웜 인스턴스 몇 대" 같은 설정은 없습니다.
웜은 Idle 세션 재사용에서 옵니다 — 세션 ID를 유지해 콜드스타트를 회피하세요.

배포 파이프라인

agentcore dev · deploy -y · CDK L2 · Harness

PART 2 · 배포 파이프라인

배포 경로

로컬에서 검증한 코드가 그대로 프로덕션으로

로컬에서 프로덕션까지

같은 코드 한 벌 — dev로 검증하고, deploy로 올리고, CDK로 코드화합니다

  • agentcore dev — 로컬 서버 + 인스펙터
  • agentcore deploy -y — 원커맨드 배포
  • CDK L2 — aws-cdk-lib 통합 (stable)
  • Managed Harness — 선언적 대안
takeaway

dev → deploy → IaC 순서로 굳혀 갑니다.
배포 방식이 바뀌어도 에이전트 코드는 그대로입니다.

PART 2 · 배포 파이프라인

에이전트 코드의 배포 계약

Strands든 LangGraph든 — 진입점 하나만 지키면 Runtime에 배포 가능

핵심 포인트

BedrockAgentCoreApp
HTTP 엔드포인트를 자동 관리하는 런타임 래퍼 — 서버 코드 불필요
@app.entrypoint
사용자 요청이 라우팅되는 진입점 함수 — payload를 받아 결과 반환
payload["prompt"]
호출 측이 보낸 JSON — invoke 시 넘긴 프롬프트가 담김
requirements.txt
의존성 목록 — 배포 시 자동 설치, 인프라 코드는 0줄

코드

python
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}
PART 2 · 배포 파이프라인

CLI 파이프라인 — create · dev · deploy · invoke

네 명령으로 이어지는 로컬 개발부터 프로덕션 호출까지






터미널 — 로컬 개발부터 프로덕션 호출까지



1

$ agentcore create --name MyAgent --defaults

--defaults면 Python + Strands + HTTP 구성 · 이름은 영숫자만(최대 36자), 하이픈·밑줄 금지




2

$ agentcore dev

로컬 dev 서버 + 브라우저 인스펙터 — 도구 호출·모델 응답 실시간 확인, 프롬프트를 인자로 바로 전송 가능




3

$ agentcore deploy -y

-y는 자동 확인, --dry-run은 미리보기 — 내부적으로 CDK가 CloudFormation 스택 생성




4

$ agentcore invoke "이탈리안 메뉴 추천해줘"

배포된 에이전트 호출 — --stream 실시간 스트리밍 · --session-id로 세션 유지






deploy 한 번에 자동 생성 — IAM 실행 역할 · CodeBuild · ECR · S3 · Runtime · Endpoint. 프로덕션 반영 전에는 --dry-run으로 변경 사항부터 확인하세요.


PART 2 · 배포 파이프라인

IaC로 굳히기 — CDK L2 Constructs

CLI도 결국 CDK로 스택 생성 — 팀 파이프라인이라면 처음부터 CDK L2

agentcore CLI

  • deploy -y 원커맨드 — 가장 빠른 반복 주기
  • 내부적으로 CDK → CloudFormation 스택 생성
  • IAM·ECR·CodeBuild·S3까지 자동 프로비저닝

언제 — 개인 개발 · 프로토타입 · 빠른 반복 배포

takeaway

둘은 대립이 아니라 같은 길의 두 구간입니다.
혼자서는 CLI로 달리고, 팀 파이프라인에 들어가면 CDK L2로 코드화하세요.

PART 2 · 배포 파이프라인

선언적 대안 — Managed Harness

코드를 배포하는 Runtime, 구성을 선언하는 Harness — 갈림길은 커스텀 로직의 유무

Runtime — 코드를 배포

  • Strands·LangGraph·CrewAI 등 커스텀 코드 직접 배포
  • 에이전트 루프를 코드로 완전히 제어
  • 이 모듈에서 다룬 dev → deploy 파이프라인

Harness — 구성을 선언 (GA)

  • 모델·도구·메모리·Skills를 선언만 — 코드 작성 불필요
  • CreateHarness + InvokeHarness 2개 API로 배포·호출
  • Strands 기반 오케스트레이션 — agentcore export로 코드 전환 가능
takeaway

커스텀 로직이 필요하면 Runtime, 선언으로 충분하면 Harness
Harness의 자세한 이야기는 AgentCore Harness 모듈에서 이어집니다.

프로토콜과 스트리밍

HTTP · MCP · A2A · InvokeAgentRuntime · WebSocket

PART 3 · 프로토콜과 스트리밍

호출 인터페이스

배포된 에이전트를 부르는 데이터 플레인 API

InvokeAgentRuntime

세션·버전·스트리밍이 파라미터 하나씩 — 호출의 모든 축이 이 API에 모입니다

  • boto3.client("bedrock-agentcore")
  • runtimeSessionId — 세션 = 격리 단위
  • qualifier — 호출할 버전 지정
  • 응답은 청크 스트리밍
takeaway

리소스 관리는 bedrock-agentcore-control, 호출은 bedrock-agentcore
컨트롤 플레인과 데이터 플레인부터 구분하면 서비스명 혼동이 사라집니다.

PART 3 · 프로토콜과 스트리밍

프로토콜 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
takeaway

프로토콜은 create 시점의 선언입니다 — 사람이 부르면 HTTP, 도구로 쓰이면 MCP, 에이전트끼리면 A2A입니다.

PART 3 · 프로토콜과 스트리밍

InvokeAgentRuntime — boto3로 호출

이미 배포된 에이전트를 다른 서비스에서 호출할 때 — Lambda·Step Functions의 한 스텝으로도

핵심 포인트

agentRuntimeArn
배포된 에이전트의 ARN — 어느 에이전트를 부를지
runtimeSessionId
세션 식별자 (33자 이상, UUID 권장) — 같은 ID면 같은 MicroVM
qualifier
호출할 버전 — DEFAULT는 최신 배포를 가리킴
response
청크 단위 스트리밍 — 모아서 디코딩

코드

python
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)))
PART 3 · 프로토콜과 스트리밍

호출 모드와 시간 한도

에이전트가 오래 달릴수록 UX를 결정하는 스트리밍

호출 모드최대 시간용도
동기 요청/응답15분짧은 단일 작업 — 응답을 기다렸다 한 번에 반환
SSE · WebSocket 스트리밍60분진행 상황·토큰을 실시간 전달 (프레임 64KB)
비동기 작업8시간장시간 루프 — 세션 최대 수명과 동일
인터랙티브 셸 (PTY)세션 내agentcore exec --it — WebSocket 터미널로 세션 접속
takeaway

동기 15분 · 스트리밍 60분 · 비동기 8시간 — 페이로드는 최대 100MB
분 단위를 넘는 작업이라면 처음부터 스트리밍이나 비동기로 설계하세요.

PART 3 · 프로토콜과 스트리밍

양방향 스트리밍 — 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
용도
음성 에이전트·인터럽트 처리 — 대화 중간에 끼어들어도 컨텍스트 유지
takeaway

SSE가 응답의 실시간이라면 WebSocket은 대화의 실시간입니다.
클라이언트 측 연결은 AgentCore SDK의 AgentCoreRuntimeClient가 담당합니다.

운영

버전 · 엔드포인트 · 네트워크 · 파일시스템 · 관측

PART 4 · 운영

운영 축

배포가 끝난 뒤 남는 세 가지 관리 축

버전 · 엔드포인트 · 관측

코드는 버전으로 쌓이고, 트래픽은 엔드포인트로 들어오고, 상태는 CloudWatch로 보입니다

  • 버전 — 에이전트당 최대 1,000
  • 엔드포인트 — 에이전트당 최대 10
  • default 엔드포인트 자동 생성 (개발용)
  • CloudWatch 자동 수집 — 계측 코드 0줄
takeaway

배포(P2)와 호출(P3)을 잇는 것이 이 세 축입니다.
버전 → 엔드포인트 → 관측 순서로 하나씩 짚어 봅니다.

PART 4 · 운영

버전엔드포인트

배포의 기록과 호출의 진입점 — 분리되어 있어 가능한 운영

버전 — 배포의 기록

  • 업데이트할 때마다 새 버전으로 쌓임 — 콘솔 Latest version
  • 에이전트당 최대 1,000개 (Service Quotas 조정 가능)
  • invoke의 qualifier가 가리키는 대상

엔드포인트 — 호출의 진입점

  • 클라이언트가 부르는 이름 — 버전과 분리된 호출 지점
  • 에이전트당 최대 10개 (조정 가능)
  • 생성 시 default 엔드포인트 자동 제공 — 개발용
  • qualifier="DEFAULT"는 최신 배포를 가리킴
takeaway

호출 측은 엔드포인트만 알면 됩니다 — 어떤 버전이 응답할지는 운영이 결정합니다.
개발은 자동 생성된 default로, 프로덕션 진입점은 분리해 두세요.

PART 4 · 운영

네트워크 — PUBLIC과 VPC

에이전트가 사내 DB·내부 API에 닿아야 하는 순간, 갈림길이 되는 네트워크 모드

PUBLIC (기본)

  • 관리형 네트워크에서 실행 — 인터넷 egress 자동
  • networkConfiguration 기본값 — 설정 0

언제 — 공개 API·SaaS 호출에는 이것으로 충분

VPC

  • 내 서브넷·보안 그룹 안에서 실행 — RDS·내부 API 접근
  • 보안 그룹 아웃바운드로 최소 권한 제어
  • 컨테이너 에이전트는 ECR·S3·Logs VPC 엔드포인트 필요

언제 — 사내 DB·내부 API 등 VPC 안 리소스에 닿아야 할 때

takeaway

호출 경로까지 사설로 좁히려면 PrivateLink — 데이터 플레인(bedrock-agentcore)·컨트롤 플레인(-control) 인터페이스 엔드포인트로 인터넷 우회 없이 호출합니다.

PART 4 · 운영

세션을 넘는 파일 — BYO File System

세션이 끝나면 사라지는 MicroVM — 남길 파일은 외부 파일시스템을 세션 경로에 마운트

S3 Files

버킷 자동 동기화

  • S3 버킷을 세션 경로에 마운트 — 자동 동기화
  • 공유 스킬·프롬프트·데이터셋을 재다운로드 없이 로드
  • 세션 간 중간 결과 유지

EFS

공유 NFS

  • EFS 액세스 포인트를 세션 경로에 마운트
  • sub-ms 지연 — 빈번한 읽기·쓰기에 적합
  • 멀티 에이전트가 같은 파일시스템을 공유
takeaway

세션당 최대 5개 마운트, Runtime 지원 전 리전 제공
stop → resume 간 파일을 남기려면 Managed Session Storage(S3 기반 관리형)를 함께 구성합니다 — 세션당 1GB·최대 14일 유지.

PART 4 · 운영

관측 연결 — 계측 코드 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 명령으로 트레이스도 확인
takeaway

세션 격리(P1)는 세션 지표로 이어집니다 — 확장 단위가 세션이니 감시 단위도 세션입니다.
ActiveSessionCount를 쿼터(5,000/2,500) 대비로 지켜보세요.

실습

AgentCore CLI 배포 — create · dev · deploy · invoke

실습 — AgentCore CLI 배포

⏱ 25분

AgentCore CLI로 에이전트 프로젝트를 생성하고 배포한 후, 도구를 추가하여 재배포합니다

학습 목표

  • agentcore create로 프로젝트 생성 (--defaults)
  • agentcore dev로 로컬에서 동작 확인 — 브라우저 인스펙터
  • agentcore deploy -y로 배포하고 agentcore invoke로 호출
  • 도구를 추가하여 재배포
격리는 세션 단위로, 배포는 명령 한 줄로 — 인프라는 Runtime이 대신합니다.

MicroVM 격리 · dev → deploy → CDK · InvokeAgentRuntime · 버전과 관측