From Local MCP Server to AWS Deployment in Two Commands
핵심 포인트
- 1이 문서는 `agentcore configure` 및 `agentcore launch` 두 가지 CLI 명령만을 사용하여 MCP 서버를 AWS Bedrock AgentCore Runtime에 간단하고 빠르게 배포하는 방법을 보여줍니다.
- 2Bedrock AgentCore Runtime은 상태 저장 세션, 격리된 실행 환경 및 자동화된 인프라 관리를 제공하여 Agent 워크로드에 이상적인 Serverless 호스팅 환경으로 강조됩니다.
- 3튜토리얼은 로컬 서버 개발 및 테스트부터 클라우드 배포, AWS CLI를 통한 배포된 서버 테스트, 그리고 IAM 기반 인증을 사용하여 AI Agent와 통합하는 전체 워크플로우를 다룹니다.
이 논문은 로컬 MCP(Message Control Protocol) 서버를 AWS의 Bedrock AgentCore Runtime에 배포하는 가장 간단한 방법을 설명합니다. 특히, 로컬 개발 환경에서 몇 분 만에 확장 가능하고 안전한 프로덕션 환경으로 전환하는 전체 워크플로우를 안내합니다.
핵심 방법론 및 기술적 설명:
이 배포 방식의 핵심은 Bedrock AgentCore Runtime입니다. 기존의 서버리스 옵션인 AWS Lambda가 무상태(stateless)여서 세션 관리를 직접 처리해야 하는 반면, 컨테이너 서비스인 ECS는 상태를 유지할 수 있지만 세션 격리를 직접 구현해야 하는 문제를 해결합니다. AgentCore Runtime은 다음과 같은 특징을 가집니다:
- 서버리스(Serverless): 처리 시간에 대해서만 비용을 지불합니다.
- 상태 유지(Stateful): Lambda와 달리 여러 호출에 걸쳐 세션 상태를 유지합니다. 이는 특히 에이전트 워크로드(agent workloads)에 필수적입니다.
- 세션 격리(Session Isolation): 각 세션은 완전히 격리된 실행 환경에서 실행되어 보안 및 안정성을 보장합니다.
- 자동화된 인프라 관리: 에이전트 워크로드를 위해 특별히 설계되어 인프라 관리가 자동화됩니다.
배포 워크플로우:
- MCP 서버 생성 (Local Development):
- FastMCP 프레임워크를 사용하여 간단한 다이스 롤링(dice-rolling) 서버를 구현합니다.
mcp.server.fastmcp.FastMCP를 초기화할 때 은 컨테이너화된 배포를 위해 모든 네트워크 인터페이스에 바인딩하며, 는 HTTP 기반 전송을 사용하도록 설정하여 AgentCore Runtime과의 호환성을 확보합니다.@mcp.tool()데코레이터를 사용하여roll_d20함수를 MCP 툴로 등록합니다. 함수의 docstring은 툴 설명이 되고, 타입 힌트(type hints)는 입력 스키마(input schema)를 정의합니다.- 는 AgentCore Runtime과 호환되는 표준 MCP 전송 방식인
streamable-http를 사용하여 서버를 시작합니다.
- 로컬 테스트:
uv run server.py명령어로 서버를 로컬에서 실행하고,curl을 사용하여 JSON-RPC 2.0 over HTTP 방식으로 테스트합니다.tools/list메서드를 호출하여 사용 가능한 툴 목록을 확인하고,tools/call메서드를 사용하여roll_d20툴을 인자(number_of_dice)와 함께 호출하여 서버 로직이 올바르게 작동하는지 검증합니다.
- AgentCore Runtime을 위한 구성:
- Bedrock AgentCore Starter Toolkit을 설치하고
uv run agentcore configure명령어를 사용하여 배포 구성을 생성합니다. - 주요 파라미터는 다음과 같습니다:
--entrypoint: 서버의 메인 파일 경로를 지정합니다.--requirements-file: 종속성 관리를 위한pyproject.toml파일의 경로를 지정합니다.--disable-memory --disable-otel: 간단한 배포를 위해 선택적 기능(세션 메모리 유지, 관측성)을 비활성화합니다.--deployment-type container: 서버를 컨테이너 이미지로 패키징하도록 지정하며, 로컬 Docker 없이 CodeBuild를 통해 클라우드에서 빌드됩니다.--protocol MCP: 서버가 MCP 프로토콜을 사용함을 명시합니다.--name: MCP 서버의 이름을 설정합니다.
- 이 구성 과정을 통해
.bedrock_agentcore.yaml(주요 구성 파일),.bedrock_agentcore/my_mcp_server/Dockerfile(컨테이너 정의), 그리고mcp-server/.dockerignore파일이 자동으로 생성됩니다.
- Bedrock AgentCore Starter Toolkit을 설치하고
- AgentCore Runtime으로 배포:
uv run agentcore launch --agent my_mcp_server명령어를 통해 배포 과정을 오케스트레이션(orchestrate)합니다.- 배포 과정의 내부 동작:
- ECR Repository Creation: Amazon ECR(Elastic Container Registry)에 컨테이너 이미지를 저장할 리포지토리가 생성됩니다.
- IAM Role Setup: 두 가지 IAM 역할(실행 역할: ECR에서 이미지를 풀고 컨테이너를 실행하며 CloudWatch에 로그를 작성할 권한; CodeBuild 역할: 컨테이너를 빌드하고 ECR에 푸시할 권한)이 생성됩니다.
- Container Build: CodeBuild가 클라우드에서 컨테이너를 빌드합니다. 이 과정에서 생성된 Dockerfile을 사용하고,
pyproject.toml에서 종속성을 설치하며, ARM64 아키텍처용 이미지를 생성하여 ECR에 푸시합니다. - Runtime Deployment: AgentCore Runtime이 컨테이너 이미지를 사용하여 새로운 런타임 인스턴스를 생성합니다.
- 배포 성공 시 Agent ARN(Amazon Resource Name)이 출력되며, 이 ARN은 서버에 연결하는 데 필요한 AWS Region, AWS Account ID, Runtime ID를 포함합니다.
- 배포된 서버 테스트:
aws bedrock-agentcore invoke-agent-runtimeAWS CLI 명령어를 사용하여 배포된 서버를 테스트합니다.- 로컬 테스트와 동일한 JSON-RPC 페이로드(
tools/list,tools/call)를--payload옵션으로 전달하여 사용하며,--agent-runtime-arn을 통해 특정 서버 인스턴스를 지정합니다. - 요청은 로컬 테스트와 동일한 MCP 프로토콜을 따르지만, 엔드포인트와 인증 방식(IAM 기반)만 다릅니다.
- 에이전트 연결 (선택 사항):
mcp-proxy-for-aws(AWS IAM 기반 인증을 지원하는 MCP 클라이언트)와strands-agentsSDK를 사용하여 배포된 MCP 서버에 AI 에이전트를 연결하는 방법을 시연합니다.aws_iam_streamablehttp_client팩토리 함수를 사용하여 AWS 자격 증명(credentials)으로 요청에 서명하는 MCP 클라이언트를 생성합니다.mcp_client.list_tools_sync()를 통해 서버에서 사용 가능한 툴을 가져오고, 에이전트는 이를 사용하여 사용자 쿼리에 따라 툴을 호출합니다.
- 정리 (Cleanup):
uv run agentcore destroy --agent my_mcp_server명령어를 사용하여 배포된 모든 AWS 리소스(AgentCore 런타임, ECR 리포지토리 및 이미지, CodeBuild 프로젝트, IAM 역할, S3 아티팩트 등)를 삭제합니다. 이 작업은 되돌릴 수 없으므로 확인 프롬프트(prompt)를 제공합니다.
핵심 요약: Bedrock AgentCore Runtime은 서버리스면서도 세션 상태를 유지하며 세션 격리를 제공하는 에이전트 워크로드에 최적화된 환경입니다. Bedrock AgentCore Starter Toolkit을 사용하여 로컬에서 개발한 MCP 서버를 AWS에 쉽게 배포하고, IAM 기반 인증을 통해 에이전트와 통합할 수 있습니다. 이는 복잡한 OAuth 설정 없이 빠르고 안전하게 서버를 운영할 수 있는 간소화된 워크플로우를 제공합니다.