Skip to main content

Amazon Bedrock AgentCore 가시성 가이드

Amazon Bedrock AgentCore가 기본 제공 관측 가능성을 통해 보안성과 확장성을 갖춘 AI 에이전트를 어떻게 배포할 수 있게 하는지, 그리고 W&B Weave 통합으로 개발자에게 트레이스 가능성과 성능 인사이트가 어떻게 강화되는지 알아보세요. 이 글은 AI 번역본입니다. 오역이 의심되면 댓글로 알려주세요.
Created on September 15|Last edited on September 15
AI 중심 애플리케이션의 시대에, 자율 에이전트 구축 대규모 환경에서도 안정적으로 동작하는 것이 중요합니다. Amazon Bedrock AgentCore는 이를 위해 설계된 강력한 서비스 모음입니다.
이 글에서는 AgentCore가 대규모 에이전트 배포를 어떻게 지원하는지에 초점을 맞추겠습니다. 강력한 관측 가능성, 통합이 어떻게 W&B Weave 관측 가능성을 어떻게 강화할 수 있는지, 그리고 개발자와 AI 실무자가 AgentCore와 Weave를 활용해 효과적인 프로덕션 환경에서 신뢰할 수 있는 AI 에이전트.
바로 시작하겠습니다.


목차



Amazon Bedrock AgentCore

Amazon Bedrock AgentCore는 조직이 AI 에이전트를 프로토타입 단계에서 프로덕션 준비가 된 시스템으로 전환할 수 있도록 지원합니다. 엔터프라이즈급 보안과 신뢰성을 제공하는 동시에, 어떤 오픈 소스 AI 프레임워크나 모델이든 유연하게 사용할 수 있습니다. 즉, 최신 오픈 소스 도구와 보안적이며 확장 가능한 인프라 사이에서 선택할 필요가 없습니다. AgentCore는 두 가지를 모두 제공합니다.
AgentCore의 가장 큰 특징은 관측 가능성에 대한 집중입니다. 에이전트의 동작과 성능을 실시간으로 파악할 수 있어, 복잡한 AI 워크플로를 디버깅하고 최적화하는 데 필수적입니다. 여기에 W&B Weave로 관측 가능성을 강화하면, 대시보드와 트레이스 시각화를 통해 에이전트의 의사 결정 과정을 더욱 깊이 있게, 인터랙티브하게 들여다볼 수 있습니다.
결국 배포 문제를 줄이고 디버깅 역량을 강화하며, 두 솔루션으로 구축한 에이전트에 대한 신뢰를 높이는 결과로 이어집니다.

Amazon Bedrock AgentCore란 무엇인가요?

Amazon Bedrock AgentCore는 엔터프라이즈급 보안과 오픈 소스 프레임워크를 자유롭게 사용할 수 있는 유연성을 결합하여, 팀이 AI 에이전트를 개념 단계에서 대규모 운영으로 신속하게 확장할 수 있도록 지원합니다 모든 LLMCloudWatch를 통해 실시간 관측 가능성을 제공합니다. 토큰 사용량, 지연 시간, 도구 호출, 세션, 오류율을 추적합니다. Weights & Biases Weave와 통합하면 각 의사 결정 단계를 드러내는 정교한 트레이스 시각화와 인터랙티브 대시보드를 사용할 수 있습니다. 결과는 무엇일까요? 더 쉬운 배포, 더 빠른 디버깅, 그리고 프로덕션 AI 에이전트에 대한 더 높은 신뢰.
간단히 말해, Amazon Bedrock AgentCore는 프로덕션 환경에서 AI 기반 에이전트를 운영하는 데 필요한 인프라와 도구를 폭넓게 제공하여, 개발자가 서버나 복잡한 백엔드 시스템을 직접 관리할 필요를 없애줍니다. AgentCore는 프레임워크에도, 모델에도 구애받지 않습니다. 인기 있는 오픈 소스 에이전트 프레임워크(예: LangGraph)와 함께 사용할 수 있으며, CrewAI, 또는 Strands)뿐만 아니라 AWS Bedrock의 모델 허브나 외부 제공업체의 어떤 대형 언어 모델도 사용할 수 있습니다.
이 유연성 덕분에 엔터프라이즈급 보안과 신뢰성을 유지하면서 AI 에이전트를 개념 검증 단계에서 프로덕션까지 빠르게 가속할 수 있습니다. 또한 AgentCore는 연산, 메모리, 인증과 같은 요소를 관리하여 조직이 에이전트를 잠재적으로 수백만 명의 사용자까지 확장할 수 있도록 지원합니다. 그 결과 개발자는 인프라가 아니라 에이전트의 로직과 기능에 집중할 수 있습니다.

Amazon Bedrock AgentCore의 핵심 구성 요소

Amazon Bedrock AgentCore는 여러 모듈형 서비스로 구성되어 있으며, 각 서비스는 AI 에이전트 운영의 서로 다른 측면을 담당합니다. 이 구성 요소들은 필요에 따라 서로 유기적으로 함께 사용하거나, 독립적으로 통합하여 활용할 수 있습니다.
  • AgentCore 런타임: AI 에이전트를 호스팅하고 확장하기 위한 보안성 높은 서버리스 환경입니다. 런타임은 지연 시간이 낮은 대화형 워크로드는 물론, 복잡한 추론을 위한 장기 실행 작업(최대 8시간)도 지원합니다. 각 에이전트 세션은 격리된 마이크로 VM에서 실행되어 보안 측면에서 진정한 세션 격리를 제공합니다. 개발자는 서버 관리 걱정 없이 이 런타임에 에이전트를 배포할 수 있으며, 어떤 프레임워크나 프로토콜과도 동작하므로 로컬 에이전트 코드를 신속하게 클라우드에 배포할 수 있습니다.
  • AgentCore 아이덴티티: 에이전트를 위한 관리형 ID 및 액세스 서비스입니다. AgentCore 아이덴티티는 기존 ID 제공자(Amazon Cognito, Okta, Microsoft Entra ID 등)와 통합되어, 별도의 인증 시스템을 재구축하지 않고도 사용자와 에이전트를 인증할 수 있습니다. 또한 보안 토큰 볼트와 최소 필요 권한을 제공하여, 에이전트가 사용자를 대신해 AWS 리소스와 서드파티 API에 안전하게 접근하도록 합니다. 이를 통해 에이전트는 안전한 권한 범위 내에서 동작하며, 다른 서비스와의 신뢰할 수 있는 상호작용을 유지합니다.
  • AgentCore 메모리: AI 에이전트가 문맥을 유지할 수 있도록 설계된 확장 가능한 메모리 저장소입니다. 메모리는 다중 턴 대화를 위한 단기 메모리와, 세션 간 또는 서로 다른 에이전트 간에도 공유할 수 있는 장기 메모리를 모두 제공합니다. 개발자가 복잡한 메모리 데이터베이스를 직접 관리할 필요를 없애면서도, 에이전트가 무엇을 “기억”할지에 대한 완전한 통제권을 제공합니다. AgentCore 메모리를 사용하면 관련 정보를 정확하게 회상하는 문맥 인지형 에이전트를 구축할 수 있어, 에이전트 응답의 응집성과 개인화를 향상시킬 수 있습니다.
  • AgentCore 코드 인터프리터: 에이전트가 고급 추론이나 데이터 처리를 위해 코드를 실행할 수 있게 해주는 보안성 높은 코드 실행 샌드박스입니다. 이 도구는 통제된 환경에서 Python 코드를(추후 다른 언어도 가능) 실행할 수 있어, 계산 수행, 데이터 분석, 즉석 시각화 생성과 같은 작업에 유용합니다. 코드 인터프리터는 시스템의 다른 부분과 격리되어 있으므로, 호스트 환경의 보안을 침해하지 않고 복잡한 연산을 수행할 수 있습니다. 또한 개발자는 애플리케이션 요구에 맞게 샌드박스를 구성할 수 있으며(예: 특정 컴퓨팅 리소스나 라이브러리 선택), 필요한 설정을 세밀하게 조정할 수 있습니다.
  • AgentCore 브라우저: 클라우드 기반의 브라우저 자동화 도구로, AI 에이전트가 웹사이트와 웹 애플리케이션과 상호작용할 수 있도록 합니다. AgentCore 브라우저는 에이전트가 페이지 탐색, 버튼 클릭, 양식 입력, 웹 데이터 스크래핑 등을 수행할 수 있는 헤드리스이면서 보안성이 강화된 브라우저 인스턴스를 제공합니다. 대규모 환경에서도 엔터프라이즈 보안을 유지합니다. 이 기본 제공 도구를 사용하면, 에이전트는 별도의 맞춤형 브라우저 자동화 코드나 외부 서비스 없이도, 그리고 통제되지 않은 웹 브라우저로 인한 시스템 노출 위험 없이, 뉴스 사이트 확인이나 웹 양식 제출과 같은 웹 기반 작업을 수행할 수 있습니다.
  • AgentCore 게이트웨이: 에이전트가 외부 도구와 API를 쉽게 발견하고 사용할 수 있게 해주는 서비스입니다. Gateway를 사용하면 기존 API, AWS Lambda 함수, 클라우드 서비스를 에이전트가 사용할 수 있는 도구로 변환할 수 있습니다. 본질적으로 에이전트와 필요한 외부 서비스 사이를 연결하는 브리지를 제공하여, 수주에 걸릴 맞춤형 통합 작업을 없애줍니다. Gateway는 이러한 도구 호출에 대한 인증과 보안을 처리하므로, 예를 들어 에이전트가 사내 내부 API나 서드파티 서비스를 안전하게 호출할 수 있습니다. 덕분에 통합을 처음부터 직접 구축할 필요가 없어, 새로운 액션이나 데이터 소스로 에이전트의 기능을 확장하는 작업이 크게 단순해집니다.
  • AgentCore 관측 가능성: 에이전트를 트레이싱하고 디버깅하기 위한 기본 제공 관측 가능성 및 모니터링 서비스입니다. AgentCore 관측 가능성은 Amazon CloudWatch로 구동되는 통합 대시보드를 제공하여 에이전트 성능을 실시간으로 확인할 수 있게 합니다. 토큰 사용량, 응답 지연 시간, 세션 지속 시간, 오류율 등 핵심 메트릭에 대한 텔레메트리를 수집합니다. 또한 에이전트 워크플로의 각 단계를 트레이싱하여, 어떤 도구가 호출되었는지와 각 단계에서 모델이 어떻게 응답했는지를 보여줌으로써 개발자에게 의사 결정 과정에 대한 깊은 가시성을 제공합니다. 이는 프로덕션 환경에서 에이전트를 운영할 때 디버깅, 감사, 품질 유지에 매우 중요합니다.

AgentCore 런타임은 어떻게 보안 배포를 보장하나요?

보안은 AgentCore 설계의 핵심이며, 특히 런타임 환경에서 그렇습니다. 먼저, AgentCore 런타임의 각 에이전트 세션은 자체적으로 격리된 마이크로 VM에서 실행됩니다. 즉, 한 에이전트 세션의 CPU, 메모리, 파일 시스템이 다른 어떤 세션과도 완전히 분리됩니다. 어떤 에이전트(또는 사용자의 세션)가 오류를 겪거나 악성 입력을 받더라도 샌드박스를 벗어나거나 다른 실행 중인 에이전트에 영향을 줄 수 없습니다. 세션이 종료되면 마이크로 VM이 종료되고 메모리가 초기화(소거)되어, 세션 간에 민감한 데이터가 남지 않도록 보장합니다. 이러한 수준의 격리는 세션 간 데이터 누출을 방지하고, 설계 단계부터 배포의 보안을 강화합니다.
AgentCore의 보안은 에이전트가 외부 리소스에 접근하는 방식까지 확장됩니다. 런타임은 인증 토큰과 권한을 관리하는 AgentCore Identity와 긴밀하게 통합되어 있습니다. 각 에이전트는 자신의 작업을 수행하는 데 충분한 최소한의 접근 권한만 부여받습니다. 예를 들어 에이전트가 S3 버킷에서 읽거나 서드파티 API를 호출해야 하는 경우, AgentCore Identity는 해당 목적에 한정된 임시 범위 자격 증명 또는 API 키를 제공할 수 있습니다. 이를 통해 에이전트는 최소 권한 원칙에 따라, 필요한 자원에만 필요한 기간 동안 접근하도록 보장됩니다.
보안 토큰 위임과 엔터프라이즈용 아이덴티티 제공자와의 호환성을 통해 AgentCore 런타임은 무단 접근을 차단하고 사용자 데이터를 보호합니다. 요약하면, 격리된 실행 환경과 강력한 아이덴티티 관리의 결합으로, 개발자는 기반 인프라와 접근 지점이 안전하다는 확신을 가지고 AI 에이전트를 배포할 수 있습니다.

개발자는 AgentCore를 AI 프레임워크에 어떻게 통합할 수 있나요?

AgentCore 서비스를 AI 프레임워크에 통합하려면 제공되는 SDK와 API를 사용해 Runtime, Memory, 각종 도구 같은 기능을 에이전트 코드에 연결하면 됩니다. AgentCore는 모듈식이므로 점진적으로 도입할 수 있습니다. 예를 들어 먼저 AgentCore Runtime으로 에이전트를 호스팅하고, 이후 지속성을 위해 AgentCore Memory를 추가하는 식으로 확장할 수 있습니다. Amazon은 이러한 기능 전반을 감싼 통합 SDK를 제공하므로, 대규모 리팩터링 없이도 손쉽게 포함할 수 있습니다.
실제로, 인기 있는 프레임워크로 에이전트를 만들었다면(예를 들어 LangChain 또는 다른 오픈 소스 라이브러리)로 만든 에이전트를 약간만 수정하면 AgentCore에 배포할 수 있습니다. 예를 들어 로컬 런타임 대신 AgentCore 런타임 세션을 초기화하거나, SDK를 사용해 에이전트 코드를 등록해 클라우드 환경에서 실행되도록 할 수 있습니다. AgentCore 런타임은 기존 에이전트 로직을 거의 몇 줄의 코드만으로 클라우드 네이티브 배포로 전환해 줍니다. 이는 LangGraph, Strands, CrewAI 같은 프레임워크는 물론, 커스텀 에이전트 구현과도 매끄럽게 동작하므로 에이전트를 처음부터 다시 작성할 필요가 없습니다.
런타임 호스팅을 넘어, 다른 서비스도 같은 방식으로 통합할 수 있습니다. 에이전트에 장기 메모리가 필요하다면, API로 AgentCore Memory 리소스를 생성하고, 인메모리 Python 리스트나 외부 데이터베이스 대신 그 리소스에 대화 컨텍스트를 저장·조회하도록 하면 됩니다. 에이전트가 외부 API나 AWS 서비스를 호출해야 하는 경우에는 AgentCore Gateway를 통해 호출을 라우팅할 수 있으며, Gateway는 이를 에이전트가 안전하게 호출할 수 있는 도구로 노출합니다. 통합은 Gateway에 API 엔드포인트를 정의하고 인증과 도구 인터페이스는 AgentCore에 맡기는 것만으로도 충분할 수 있습니다. 마찬가지로, 에이전트가 코드 실행 기능의 이점을 얻을 수 있다면, 에이전트 프로세스에서 직접 코드를 실행하는 대신 SDK를 통해 코드 스니펫을 전달하여 AgentCore Code Interpreter를 호출하면 됩니다.
이 전 과정에서 AgentCore는 어떤 모델과도 호환되므로 특정 ML 제공자에 종속되지 않습니다. Amazon의 Titan 모델, OpenAI의 모델, 또는 Bedrock 인터페이스를 통한 다른 어떤 모델이든 사용��� 수 있으며, AgentCore는 이러한 선택을 모두 지원합니다. 핵심은 Amazon Bedrock AgentCore가 기존 개발 워크플로와 잘 맞물린다는 점입니다. 선호하는 프레임워크나 모델을 바꾸지 않고도, 클라우드 기반 지원(호스팅, 메모리, 아이덴티티, 도구)으로 에이전트를 보강할 수 있습니다. 이러한 서비스를 통합하면 개발자는 최소한의 코드 변경만으로 AI 에이전트를 빠르게 확장하고, 보안과 관측 가능성을 모두 확보할 수 있습니다.

AgentCore Observability는 성능 가시성을 어떻게 강화하나요?


AgentCore Observability는 통합된 메트릭과 트레이싱을 통해 개발자에게 AI 에이전트의 상태를 실시간으로 보여줍니다. 기본 제공 기능으로, AgentCore는 에이전트와 해당 에이전트가 사용하는 리소스에 대한 다양한 메트릭을 자동으로 수집합니다. 수집된 메트릭은 Amazon CloudWatch(전용 Generative AI Observability 대시보드 포함)로 전송되며, 여기에서 핵심 성능 지표를 한눈에 확인할 수 있습니다. 예를 들어, 요청당 에이전트가 사용하는 토큰 수, 각 모델 추론 호출의 지연 시간, 세션 지속 시간, 오류율과 실패 건수를 모니터링할 수 있습니다. 이러한 메트릭을 즉시 확인할 수 있으므로 오류율 급증이나 비정상적으로 긴 응답 시간 같은 이상 징후를 빠르게 포착하고, 심각한 문제로 번지기 전에 조치할 수 있습니다.
기본 메트릭을 넘어서, AgentCore의 관측 가능성은 에이전트 워크플로의 상세한 트레이싱을 포함합니다. 에이전트가 수행하는 모든 작업(예: 게이트웨이를 통해 도구 호출, 메모리에서 조회, 파운데이션 모델 호출 등)은 트레이스되고 로그로 기록될 수 있습니다. 시스템은 OpenTelemetry와 호환되는 텔레메트리 데이터를 사용하므로, 에이전트 실행의 각 단계에 대한 스팬과 트레이스를 캡처할 수 있습니다. 개발자는 이러한 트레이스를 깊이 탐색하여, 예를 들어 에이전트가 특정 도구를 어떻게 선택했는지, 각 단계에 얼마나 시간이 소요됐는지, 중간 결과가 무엇이었는지를 확인할 수 있습니다. 이 수준의 세부 정보는 복잡한 에이전트 로직이나 오작동을 디버깅하는 데 매우 유용합니다. 트레이스에 기록된 에이전트의 사고 과정을 그대로 따라갈 수 있기 때문입니다.
AgentCore Observability는 기존 모니터링 시스템과의 통합을 염두에 두고 설계되었습니다. 표준 텔레메트리(및 CloudWatch)에 기반하므로, 필요 시 관측 데이터(Observability 데이터)를 다른 도구로 내보내거나 전달할 수 있고, 애플리케이션의 광범위한 모니터링과 결합할 수도 있습니다. 요약하면, AgentCore의 관측 가능성 기능은 에이전트 운영을 위한 통합 대시보드와 로그를 제공하여 성능 가시성을 강화합니다. 개발자는 에이전트가 어떻게, 왜 동작하는지에 대한 실시간 창을 확보하게 되며, 이는 문제 해결에 유용할 뿐만 아니라 관찰된 행동을 바탕으로 프롬프트나 도구 사용 방식을 조정하는 등 에이전트 설계를 최적화하는 데에도 도움을 줍니다. 다음으로, W&B Weave를 활용해 관측 가능성과 디버깅 역량을 한층 강화하고, 이러한 인사이트를 더 깊이 확장하는 방법을 살펴보겠습니다.

튜토리얼: W&B Weave로 AgentCore 관측 가능성 강화

Amazon Bedrock AgentCore가 AI 에이전트를 위한 탄탄한 기본 모니터링을 제공하지만, 외부 관측 도구를 사용하면 한층 더 깊은 인사이트를 얻을 수 있습니다. Weights & Biases(W&B) Weave는 에이전트의 동작을 상세히 트레이스하고 상호작용형 시각화를 제공하여 AgentCore를 보완하는 강력한 도구입니다. 이 튜토리얼에서는 W&B Weave를 활용해 AgentCore 기반 AI 에이전트의 관측 가능성을 강화하는 방법을 처음부터 끝까지 따라 할 수 있는 실무형 가이드를 제공합니다.

사전 준비사항

  • 파이썬 3.11
  • Bedrock에 접근 권한이 있는 AWS 계정
  • W&B 계정(무료 가입: wandb.ai)
  • AWS 자격 증명 구성됨(AWS CLI, 환경 변수, 또는 IAM 역할을 통해)
  • 도커
  • uv 설치됨(다음을 통해 curl -LsSf https://astral.sh/uv/install.sh | sh)

단계 1: 환경에 W&B Weave 설정하기

먼저 필요한 패키지를 설치합니다:
pip install wandb boto3 strands-agents strands-agents-tools weave
다음으로 W&B에 인증하고 스크립트에서 Weave를 초기화합니다:
import wandb
import weave
import boto3
import json
from datetime import datetime
from typing import Dict, Any, Optional

# Login to W&B (you'll be prompted for your API key if not already logged in)
wandb.login()

# Initialize Weave with a project name
weave.init("bedrock-agent-observability")

단계 2: Bedrock 모델 활성화

이 튜토리얼을 진행하려면 선호하는 리전에 Amazon Bedrock 접근 권한이 있는 AWS 계정이 필요합니다. Claude 모델 접근 권한은 AWS 콘솔의 Bedrock 설정에서 계정과 리전에 대해 명시적으로 활성화해야 합니다. 이 튜토리얼에서는 저는 anthropic.claude-3-5-sonnet-20240620-v1:0예를 들어, us-east-1자세한 모델 활성화 방법은 이전 튜토리얼을 참고하세요.

단계 3: 로컬 프로젝트와 IAM 권한 설정하기

작업 디렉터리를 만들고 uv를 사용해 Python 환경을 설정하세요. 워크스페이스 내부에서 다음을 실행합니다:
mkdir my-custom-agent && cd my-custom-agent
uv init --python 3.11
uv add fastapi 'uvicorn[standard]' pydantic httpx strands-agents
다음의 AWS 및 Docker 명령을 더 쉽게 실행할 수 있도록, 리전, 계정 ID, 에이전트 이름, ECR 리포지토리, 역할 이름 값을 환경 변수로 내보내세요.
export REGION=us-east-1
export ACCOUNT_ID=your_aws_account_id
export AGENT_NAME=myagent
export ECR_REPO=my-agent-repo
export ROLE_NAME=AgentCoreRuntime-ExecutionRole-${AGENT_NAME}
export IMAGE=${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/${ECR_REPO}:latest
export EXECUTION_ROLE_ARN=arn:aws:iam::${ACCOUNT_ID}:role/${ROLE_NAME}
모든 플레이스홀더를 실제 AWS 계정 값으로 바꾸고, Bedrock/Claude 접근을 활성화한 동일한 리전을 일관되게 사용하세요. 이제 에이전트를 위한 ‘신뢰 정책’을 생성하겠습니다. 다음 신뢰 정책을 다음 이름으로 저장하세요 trust-policy.json. 역할은 반드시 bedrock-agentcore.amazonaws.com 귀하의 AWS 계정과 리전에서 이를 승계하여 사용하도록 합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AssumeRolePolicy",
"Effect": "Allow",
"Principal": {
"Service": "bedrock-agentcore.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "YOUR_AWS_ACCOUNT_ID"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:bedrock-agentcore:YOUR_REGION:YOUR_AWS_ACCOUNT_ID:*"
}
}
}
]
}
다음으로 역할을 생성하세요:
aws iam create-role \
--role-name $ROLE_NAME \
--assume-role-policy-document file://trust-policy.json \
--region $REGION
다음으로 라는 이름의 JSON 파일도 생성합니다 policy.json:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ECRImageAccess",
"Effect": "Allow",
"Action": [
"ecr:BatchGetImage",
"ecr:GetDownloadUrlForLayer"
],
"Resource": [
"arn:aws:ecr:YOUR_REGION:YOUR_AWS_ACCOUNT_ID:repository/*"
]
},
{
"Effect": "Allow",
"Action": [
"logs:DescribeLogStreams",
"logs:CreateLogGroup"
],
"Resource": [
"arn:aws:logs:YOUR_REGION:YOUR_AWS_ACCOUNT_ID:log-group:/aws/bedrock-agentcore/runtimes/*"
]
},
{
"Effect": "Allow",
"Action": [ "logs:DescribeLogGroups" ],
"Resource": [ "arn:aws:logs:YOUR_REGION:YOUR_AWS_ACCOUNT_ID:log-group:*" ]
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": [
"arn:aws:logs:YOUR_REGION:YOUR_AWS_ACCOUNT_ID:log-group:/aws/bedrock-agentcore/runtimes/*:log-stream:*"
]
},
{
"Sid": "ECRTokenAccess",
"Effect": "Allow",
"Action": [ "ecr:GetAuthorizationToken" ],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"xray:PutTraceSegments",
"xray:PutTelemetryRecords",
"xray:GetSamplingRules",
"xray:GetSamplingTargets"
],
"Resource": [ "*" ]
},
{
"Effect": "Allow",
"Resource": "*",
"Action": "cloudwatch:PutMetricData",
"Condition": {
"StringEquals": {
"cloudwatch:namespace": "bedrock-agentcore"
}
}
},
{
"Sid": "GetAgentAccessToken",
"Effect": "Allow",
"Action": [
"bedrock-agentcore:GetWorkloadAccessToken",
"bedrock-agentcore:GetWorkloadAccessTokenForJWT",
"bedrock-agentcore:GetWorkloadAccessTokenForUserId"
],
"Resource": [
"arn:aws:bedrock-agentcore:YOUR_REGION:YOUR_AWS_ACCOUNT_ID:workload-identity-directory/default",
"arn:aws:bedrock-agentcore:YOUR_REGION:YOUR_AWS_ACCOUNT_ID:workload-identity-directory/default/workload-identity/${AGENT_NAME}-*"
]
},
{
"Sid": "BedrockModelInvocation",
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream"
],
"Resource": [
"arn:aws:bedrock:*::foundation-model/*",
"arn:aws:bedrock:YOUR_REGION:YOUR_AWS_ACCOUNT_ID:*"
]
}
]
}
이제 다음 명령으로 정책을 연결하세요:
aws iam put-role-policy \
--role-name $ROLE_NAME \
--policy-name AgentCoreRuntimePolicy \
--policy-document file://policy.json \
--region $REGION

단계 4: ECR 리포지토리 생성

다음 명령을 실행하여 ECR 리포지토리를 생성하세요:
aws ecr create-repository --repository-name $ECR_REPO --region $REGION

단계 5: ECR에 Docker 로그인

다음 명령으로 Docker를 개인 ECR 레지스트리에 인증하세요:
aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com
이 명령은 임시 비밀번호를 사용해 Docker를 개인 Amazon ECR 레지스트리에 로그인시켜, ECR 리포지토리에 이미지를 푸시하거나 풀 수 있도록 합니다.

단계 6: 에이전트 코드를 작성하세요

에이전트 코드에서 Bedrock Claude 모델과 리전을 명시적으로 지정해야 합니다. agent.py 예시는 아래와 같습니다. 항상 region_name을 모델 액세스가 활성화된 정확한 리전으로 설정하세요. 그렇지 않으면 에이전트 호출이 실패합니다. 아래는 에이전트 코드이며, 다음 이름으로 저장할 수 있습니다 agent.py:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import Dict, Any
from datetime import datetime

from strands import Agent, tool
from strands.models import BedrockModel

@tool
def word_count(text: str) -> int:
return len(text.split())

@tool
def reverse(text: str) -> str:
return text[::-1]

bedrock_model = BedrockModel(
model_id="anthropic.claude-3-5-sonnet-20240620-v1:0",
temperature=0.3,
streaming=False,
region_name="us-east-1" # IMPORTANT: set this to your exact Claude-enabled region
)

strands_agent = Agent(
model=bedrock_model,
tools=[word_count, reverse],
system_prompt="You are a helpful assistant who uses tools when they help."
)

app = FastAPI(title="Strands Agent Server", version="1.0.0")

class InvocationRequest(BaseModel):
input: Dict[str, Any]

class InvocationResponse(BaseModel):
output: Dict[str, Any]

@app.post("/invocations", response_model=InvocationResponse)
async def invoke_agent(request: InvocationRequest):
try:
user_message = request.input.get("prompt", "")
if not user_message:
raise HTTPException(status_code=400, detail="No prompt found in input. Please provide a 'prompt' key in the input.")
result = strands_agent(user_message)
response = {
"message": result.message,
"timestamp": datetime.utcnow().isoformat(),
"model": bedrock_model.config["model_id"],
}
return InvocationResponse(output=response)
except Exception as e:
raise HTTPException(status_code=500, detail=f"Agent processing failed: {str(e)}")

@app.get("/ping")
async def ping():
return {"status": "healthy"}

if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8080)

두 가지 간단한 도구(word_count 그리고 reverse)는 에이전트에 정의되고 등록되어 기능을 확장할 수 있게 합니다. The /invocations 엔드포인트는 JSON 페이로드를 받아 프롬프트를 Claude 모델로 전달하고, 모델 정보와 타임스탬프와 함께 결과를 반환합니다.

단계 7: Dockerfile 생성

Bedrock AgentCore용 ARM64 Python 3.11 uv 베이스를 사용하는 Dockerfile을 생성하세요. agent.py, pyproject.toml, uv.lock 파일을 루트 디렉터리에 배치합니다.
FROM --platform=linux/arm64 ghcr.io/astral-sh/uv:python3.11-bookworm-slim
WORKDIR /app
COPY pyproject.toml uv.lock ./
RUN uv sync --frozen --no-cache
COPY agent.py ./
EXPOSE 8080
CMD ["uv", "run", "uvicorn", "agent:app", "--host", "0.0.0.0", "--port", "8080"]
이 Dockerfile은 슬림한 Python 3.11 컨테이너를 기반으로 ARM64 이미지를 빌드하며, 이는 Bedrock 컨테이너 런타임과의 호환을 위해 필요합니다.

단계 8: Docker 이미지 빌드 및 AWS로 푸시

이미지를 빌드하고 푸시하세요. Bedrock을 위해 ARM64여야 합니다.
docker buildx build --platform linux/arm64 -t $IMAGE --push .
그런 다음 이미지가 ECR에 있는지 확인합니다:
aws ecr describe-images --repository-name $ECR_REPO --region $REGION

단계 9: 에이전트 런타임 등록

콘솔 또는 boto3로 런타임을 등록할 수 있습니다. 다음은 Python에서 boto3를 사용해 등록하는 방법입니다:
import boto3
# Set your account info here
ACCOUNT_ID = “your”_id” # <-- Replace with your AWS account ID
ROLE_ARN = “your agent ARN” # <-- Replace with your role ARN

client = boto3.client('bedrock-agentcore-control', region_name='us-east-1')

response = client.create_agent_runtime(
agentRuntimeName='strands_agent',
agentRuntimeArtifact={
'containerConfiguration': {
'containerUri': f'{ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/my-strands-agent:latest'
}
},
networkConfiguration={
"networkMode": "PUBLIC"
},
roleArn=ROLE_ARN
)

print("Agent Runtime created successfully!")
print(f"Agent Runtime ARN: {response['agentRuntimeArn']}")
print(f"Status: {response['status']}")

단계 10: 에이전트 호출

등록이 완료되면 Python SDK를 사용해 페이로드를 전달하며 에이전트를 호출하세요. 모범 사례로 무작위 세션 ID를 생성해 사용합니다.
import boto3
import json
import random
import string
import weave

# 1. Initialize Weave Tracing (use your project name)
weave.init("bedrock-agentcore-demo")

# 2. Trace the core agent call as a "Call" with Weave.
@weave.op
def invoke_bedrock_agent(prompt: str):
agent_core_client = boto3.client('bedrock-agentcore', region_name='us-east-1')
agent_runtime_arn = "Your_Agent_Runtime_ARN_Here" # <-- Replace with your actual agent runtime ARN

# Build session id for Bedrock API (randomized, 40 chars)
random_part = ''.join(random.choices(string.ascii_letters + string.digits, k=40))
runtime_session_id = f"strandsagent-{random_part}"

payload = json.dumps({
"input": {"prompt": prompt}
})

response = agent_core_client.invoke_agent_runtime(
agentRuntimeArn=agent_runtime_arn,
runtimeSessionId=runtime_session_id,
payload=payload,
qualifier="DEFAULT"
)

response_body = response['response'].read()
try:
response_data = json.loads(response_body)
except Exception:
response_data = response_body # fallback if not JSON

return response_data

if __name__ == "__main__":
# This call is tracked in Weave!
resp = invoke_bedrock_agent(
"how many words are in the string 'ML is cool' ?"
)

try:
text = resp["output"]["message"]["content"][0]["text"]
print(text)
except Exception as e:
print("Could not extract summary text:", e)
제공된 코드는 배포된 Bedrock 에이전트를 호출하고, 관측 가능성과 디버깅을 위해 Weave를 사용해 실행 내역을 추적하는 방법을 보여줍니다. Weave 트레이싱은 다음을 통해 워크스페이스에 초기화됩니다 weave.init("bedrock-agentcore-demo"). 이렇게 하면 이후에 실행되는 모든 추적 함수 호출이 wandb.ai의 프로젝트에 기록됩니다. 그런 다음 다음과 같은 함수를 정의합니다 invoke_bedrock_agent, 로 장식된 @weave.op 그 함수에 대한 모든 호출이 Weave 시스템에서 운영으로 자동 기록되도록 합니다. 함수 내부에서는 에이전트가 실행 중인 리전에서 AWS Bedrock AgentCore용 boto3 클라이언트를 생성합니다. 배포된 에이전트 런타임의 ARN을 반드시 제공해야 합니다(등록 시 받은 실제 에이전트 ARN으로 플레이스홀더 문자열을 교체).

단계 11: Weave에서 에이전트 트레이스 시각화

에이전트를 실행한 후에는 W&B 인터페이스에서 상세 트레이스를 확인할 수 있습니다:

  1. 프로젝트에 접근하기: 이동하기 wandb.ai 그리고 "bedrock-agent-observability" 프로젝트로 이동합니다
  2. 트레이스 보기: 기록된 모든 운영을 보려면 "Traces" 탭을 클릭하세요
  3. 개별 호출 탐색: 아무 트레이스나 클릭하면 다음을 확인할 수 있습니다:
    • 각 함수의 입력 매개변수
    • 출력 결과
    • 실행 타이밍
    • 토큰 사용량과 비용
    • 오류 세부 정보(있는 경우)

주요 관측 가능성 기능

함수 수준 트레이싱
모든 데코레이터가 적용된 함수(@weave.op())는 트레이스 트리에서 노드로 표시되며, 입력, 출력, 실행 시간을 보여 줍니다.
모델 호출 세부 정보
각 Bedrock API 호출에는 다음이 기록됩니다:
  • 모델 ID와 구성
  • 입력 메시지/프롬프트
  • 생성된 응답
  • 토큰 사용 통계
  • 응답 메타데이터
오류 추적
실패한 호출은 오류 메시지와 스택 트레이스로 캡처됩니다.
성능 메트릭
분석할 수 있습니다:
  • 각 구성 요소의 응답 지연 시간
  • 토큰 소비 패턴
  • 성공/실패 비율

결론

Amazon Bedrock AgentCore는 W&B Weave의 관측 가능성 강화 기능과 결합되어, 대규모 AI 에이전트의 배포, 모니터링, 관리를 위한 강력한 솔루션을 제공합니다. AgentCore는 보안이 강화된 런타임 샌드박스와 메모리 스토어부터 통합된 아이덴티티 관리와 도구 접근 제어까지, 실제 프로덕션 환경에서 AI 에이전트가 안정적으로 동작하는 데 필요한 인프라를 제공합니다. CloudWatch와 연동되는 기본 내장 Observability 서비스는 에이전트의 성능과 상태를 실시간으로 추적할 수 있는 대시보드와 텔레메트리를 개발자에게 제공하여 운영 가시성을 높입니다.
여기에 W&B Weave를 추가하면 관측 가능성이 한층 강화되어, 에이전트의 의사 결정과 행동을 세밀한 수준의 트레이스로 파악할 수 있습니다. 이 정도의 인사이트는 복잡한 에이전트 동작을 디버깅하고 지속적으로 개선하는 데 매우 유용합니다. 이제 개발자는 AgentCore 덕분에 에이전트의 보안성과 확장성을 보장할 뿐만 아니라, AWS와 W&B의 모니터링 및 트레이싱 도구를 통해 투명성과 테스트 용이성까지 확보할 수 있습니다.
앞을 내다보면, AI에서 관측 가능성의 중요성은 더욱 커질 것입니다. AI 에이전트가 더 높은 자율성을 갖고 중요 업무를 맡게 될수록, 이들의 추론 과정과 성능을 세밀하게 들여다볼 수 있는 가시성은 신뢰와 안전을 위해 필수적입니다. 클라우드급 에이전트 인프라에 고급 로깅과 시각화 도구를 결합하면 AI 개발의 새로운 시대가 열립니다. 개발자는 더 빠르게 반복하고, 문제를 더 이른 단계에서 포착하며, 더 높은 확신을 가지고 배포할 수 있습니다. 앞으로 AWS Bedrock과 W&B 제품군(Weave, Models 등) 간의 통합은 한층 더 긴밀해져, 고효율 AI 에이전트를 구축하고 운영하는 엔드 투 엔드 솔루션을 제공할 것입니다. 지금 이러한 도구와 모범 사례를 채택하면, 강력하고 확장 가능할 뿐 아니라 관측 가능하고 감사 가능하며 지속적으로 개선되는 AI 에이전트를 구축할 수 있습니다. 이는 향후 성공적인 AI 시스템을 규정짓는 핵심 자질이 될 것입니다.


이 글은 AI 번역본입니다. 오역이 의심되는 부분은 댓글로 알려주세요. 원문 보고서는 다음 링크에서 확인할 수 있습니다: 원문 보고서 보기