This CDK stack demonstrates a multi-agent architecture where one agent (orchestrator) can invoke another agent (specialist) to handle complex tasks. This pattern is useful for building sophisticated AI systems with specialized capabilities.
- Overview
- Architecture
- Prerequisites
- Deployment
- Testing
- Sample Queries
- Cleanup
- Cost Estimate
- Troubleshooting
- 🤝 Contributing
- 📄 License
This CDK stack creates a two-agent system that demonstrates agent-to-agent communication:
- Role: Main entry point for user queries
- Capabilities:
- Handles simple queries directly
- Delegates complex tasks to Agent 2
- Has a tool to invoke Agent 2's runtime
- Use Cases: Routing, task delegation, simple Q&A
- Role: Expert agent for detailed analysis
- Capabilities:
- Provides in-depth analytical responses
- Handles complex reasoning tasks
- Focuses on accuracy and completeness
- Use Cases: Data analysis, expert knowledge, detailed explanations
- Multi-Agent Communication: Agent 1 can invoke Agent 2 using
bedrock-agentcore:InvokeAgentRuntime - Automatic Orchestration: Agent 1 decides when to delegate based on query complexity
- Independent Deployment: Each agent has its own ECR repository and runtime
- Modular Architecture: Easy to extend with additional specialized agents
The architecture consists of:
- User: Sends questions to Agent 1 (Orchestrator) and receives responses
- Agent 1 - Orchestrator Agent:
- AWS CodeBuild: Builds the ARM64 Docker container image for Agent 1
- Amazon ECR Repository: Stores Agent 1's container image
- AgentCore Runtime: Hosts the Orchestrator Agent
- Routes simple queries directly
- Delegates complex queries to Agent 2 using the
call_specialist_agenttool - Invokes Amazon Bedrock LLMs for reasoning
- IAM Role: Permissions to invoke Agent 2's runtime and access Bedrock
- Agent 2 - Specialist Agent:
- AWS CodeBuild: Builds the ARM64 Docker container image for Agent 2
- Amazon ECR Repository: Stores Agent 2's container image
- AgentCore Runtime: Hosts the Specialist Agent
- Provides detailed analysis and expert responses
- Invokes Amazon Bedrock LLMs for in-depth reasoning
- IAM Role: Standard runtime permissions and Bedrock access
- Amazon Bedrock LLMs: Provides AI model capabilities for both agents
- Agent-to-Agent Communication: Agent 1 can invoke Agent 2's runtime via
bedrock-agentcore:InvokeAgentRuntimeAPI
-
AWS Account: You need an active AWS account with appropriate permissions
-
AWS CLI: Install and configure AWS CLI with your credentials
aws configure
-
Python 3.10+ and AWS CDK v2 installed
# Install CDK npm install -g aws-cdk # Verify installation cdk --version
-
CDK version 2.220.0 or later (for BedrockAgentCore support)
-
Bedrock Model Access: Enable access to Amazon Bedrock models in your AWS region
- Navigate to Amazon Bedrock Console
- Go to "Model access" and request access to:
- Anthropic Claude models
- Bedrock Model Access Guide
-
Required Permissions: Your AWS user/role needs permissions for:
- CloudFormation stack operations
- ECR repository management
- IAM role creation
- Lambda function creation
- CodeBuild project creation
- BedrockAgentCore resource creation
This is the CDK version of the multi-agent runtime. If you prefer CloudFormation, see the CloudFormation version.
# Install dependencies
pip install -r requirements.txt
# Bootstrap CDK (first time only)
cdk bootstrap
# Deploy
cdk deploy# 1. Create and activate Python virtual environment
python3 -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# 2. Install Python dependencies
pip install -r requirements.txt
# 3. Bootstrap CDK in your account/region (first time only)
cdk bootstrap
# 4. Synthesize the CloudFormation template (optional)
cdk synth
# 5. Deploy the stack
cdk deploy --require-approval never
# 6. Get outputs
cdk list- Expected Duration: 15-20 minutes
- Main Steps:
- Stack creation: ~2 minutes
- Docker image builds (CodeBuild): ~10-12 minutes
- Runtime provisioning: ~3-5 minutes
Agent 1 is your main entry point. It will handle simple queries directly or delegate to Agent 2 for complex tasks.
# Get Agent1 Runtime ID
AGENT1_ID=$(aws cloudformation describe-stacks \
--stack-name MultiAgentDemo \
--region us-east-1 \
--query 'Stacks[0].Outputs[?OutputKey==`Agent1RuntimeId`].OutputValue' \
--output text)
# Test with a simple query (Agent1 handles directly)
aws bedrock-agentcore invoke-agent-runtime \
--agent-runtime-id $AGENT1_ID \
--qualifier DEFAULT \
--payload '{"prompt": "Hello, how are you?"}' \
--region us-east-1 \
response.json
# Test with a complex query (Agent1 delegates to Agent2)
aws bedrock-agentcore invoke-agent-runtime \
--agent-runtime-id $AGENT1_ID \
--qualifier DEFAULT \
--payload '{"prompt": "Provide a detailed analysis of cloud computing benefits"}' \
--region us-east-1 \
response.json
cat response.json- Navigate to Bedrock AgentCore Console
- Go to "Runtimes" in the left navigation
- Find Agent1 runtime (name starts with
MultiAgentDemo_OrchestratorAgent) - Click on the runtime name
- Click "Test" button
- Enter test payload:
{ "prompt": "Hello, how are you?" } - Click "Invoke"
You can also test Agent 2 directly to see its specialized capabilities.
# Get Agent2 Runtime ID
AGENT2_ID=$(aws cloudformation describe-stacks \
--stack-name MultiAgentDemo \
--region us-east-1 \
--query 'Stacks[0].Outputs[?OutputKey==`Agent2RuntimeId`].OutputValue' \
--output text)
# Invoke Agent2 directly
aws bedrock-agentcore invoke-agent-runtime \
--agent-runtime-id $AGENT2_ID \
--qualifier DEFAULT \
--payload '{"prompt": "Explain quantum computing in detail"}' \
--region us-east-1 \
response.jsonThese simple queries don't require specialist knowledge:
-
Greetings:
{"prompt": "Hello, how are you?"} -
Simple Math:
{"prompt": "What is 5 + 3?"}
These complex queries require expert analysis:
-
Detailed Analysis:
{"prompt": "Provide a detailed analysis of the benefits and drawbacks of serverless architecture"} -
Expert Knowledge:
{"prompt": "Explain the CAP theorem and its implications for distributed systems"} -
Complex Reasoning:
{"prompt": "Compare and contrast different machine learning algorithms for time series forecasting"} -
In-depth Explanation:
{"prompt": "Provide expert analysis on best practices for securing cloud infrastructure"}
cdk destroyaws cloudformation delete-stack \
--stack-name MultiAgentDemo \
--region us-east-1
# Wait for deletion to complete
aws cloudformation wait stack-delete-complete \
--stack-name MultiAgentDemo \
--region us-east-1- Navigate to CloudFormation Console
- Select the
MultiAgentDemostack - Click "Delete"
- Confirm deletion
| Service | Usage | Monthly Cost |
|---|---|---|
| AgentCore Runtimes | 2 runtimes, minimal usage | ~$10-20 |
| ECR Repositories | 2 repositories, <2GB storage | ~$0.20 |
| CodeBuild | Occasional builds | ~$2-4 |
| Lambda | Custom resource executions | ~$0.01 |
| CloudWatch Logs | Agent logs | ~$1.00 |
| Bedrock Model Usage | Pay per token | Variable* |
Estimated Total: ~$13-25/month (excluding Bedrock model usage)
*Bedrock costs depend on your usage patterns and chosen models. See Bedrock Pricing for details.
- Delete when not in use: Use
cdk destroyto remove all resources - Monitor usage: Set up CloudWatch billing alarms
- Choose efficient models: Select appropriate Bedrock models for your use case
If you see bootstrap errors:
cdk bootstrap aws://ACCOUNT-NUMBER/REGIONEnsure your IAM user/role has:
CDKToolkitpermissions or equivalent- Permissions to create all resources in the stack
iam:PassRolefor service roles
Install dependencies in the project directory:
pip install -r requirements.txtCheck CodeBuild logs in the AWS Console:
- Go to CodeBuild console
- Find the build projects (names contain "agent1-build" and "agent2-build")
- Check build history and logs
If Agent 1 can't invoke Agent 2:
- Check IAM permissions for
bedrock-agentcore:InvokeAgentRuntime - Verify Agent 2 runtime is running
- Check CloudWatch logs for both agents
We welcome contributions! Please see our Contributing Guide for details.
This project is licensed under the MIT License - see the LICENSE file for details.
