Loading...
Loading...
Amazon Bedrock AgentCore platform for building, deploying, and operating production AI agents. Covers Runtime, Gateway, Browser, Code Interpreter, and Identity services. Use when building Bedrock agents, deploying AI agents to production, or integrating with AgentCore services.
npx skill4agent add adaptationio/skrillz bedrock-agentcorebedrock-agentcore-sdk-pythonbedrock-agentcore-starter-toolkit# Install SDK and CLI
pip install bedrock-agentcore strands-agents bedrock-agentcore-starter-toolkit
# Verify installation
agentcore --helpimport boto3
# Data plane operations
client = boto3.client('bedrock-agentcore')
# Control plane operations
control = boto3.client('bedrock-agentcore-control')# Using starter toolkit
# agentcore configure -e main.py -n my-agent
# agentcore deploy
# Using boto3 control plane
response = control.create_agent_runtime(
name='my-production-agent',
description='Customer service agent',
agentRuntimeArtifact={
's3': {
'uri': 's3://my-bucket/agent-package.zip'
}
},
roleArn='arn:aws:iam::123456789012:role/AgentCoreExecutionRole',
pythonRuntime='PYTHON_3_13',
entryPoint=['main.py']
)
agent_runtime_arn = response['agentRuntimeArn']# Invoke deployed agent
response = client.invoke_agent_runtime(
agentRuntimeArn='arn:aws:bedrock-agentcore:us-east-1:123456789012:agent-runtime/xxx',
runtimeSessionId='session-123',
payload={
'prompt': 'What is my order status?',
'context': {'user_id': 'user-456'}
}
)
result = response['payload']
print(result)from bedrock_agentcore import BedrockAgentCoreApp
from strands import Agent
app = BedrockAgentCoreApp(debug=True)
agent = Agent()
@app.entrypoint
def invoke(payload):
"""Main agent entry point"""
user_message = payload.get("prompt", "Hello!")
app.logger.info(f"Processing: {user_message}")
result = agent(user_message)
return {"result": result.message}
if __name__ == "__main__":
app.run()response = control.create_gateway(
name='customer-service-gateway',
description='Gateway for customer service tools',
protocolType='REST'
)
gateway_arn = response['gatewayArn']# Add an existing Lambda as a tool
response = control.create_gateway_target(
gatewayId='gateway-xxx',
name='GetOrderStatus',
description='Retrieves order status by order ID',
targetConfiguration={
'lambdaTarget': {
'lambdaArn': 'arn:aws:lambda:us-east-1:123456789012:function:GetOrder'
}
},
toolSchema={
'name': 'get_order_status',
'description': 'Get the current status of a customer order',
'inputSchema': {
'type': 'object',
'properties': {
'order_id': {
'type': 'string',
'description': 'The unique order identifier'
}
},
'required': ['order_id']
}
}
)# Sync gateway tools for discovery
control.synchronize_gateway_targets(
gatewayId='gateway-xxx'
)response = client.start_browser_session(
browserId='browser-xxx',
sessionConfiguration={
'timeout': 300,
'viewport': {'width': 1920, 'height': 1080}
}
)
session_id = response['browserSessionId']# Navigate and interact
response = client.update_browser_stream(
browserSessionId=session_id,
action={
'navigate': {'url': 'https://example.com'},
'click': {'selector': '#submit-button'},
'type': {'selector': '#search', 'text': 'query'}
}
)response = client.start_code_interpreter_session(
codeInterpreterId='interpreter-xxx'
)
session_id = response['codeInterpreterSessionId']response = client.invoke_code_interpreter(
codeInterpreterSessionId=session_id,
code='''
import pandas as pd
import matplotlib.pyplot as plt
# Analyze data
df = pd.DataFrame({'x': [1,2,3,4,5], 'y': [2,4,6,8,10]})
plt.plot(df['x'], df['y'])
plt.savefig('output.png')
print(df.describe())
''',
language='PYTHON'
)
output = response['output']
files = response['files'] # Generated filesresponse = control.create_oauth2_credential_provider(
name='okta-provider',
credentialProviderVendor='OKTA',
oauth2ProviderConfig={
'clientId': 'your-client-id',
'clientSecret': 'your-client-secret',
'authorizationServerUrl': 'https://your-domain.okta.com/oauth2/default',
'scopes': ['openid', 'profile', 'email']
}
)response = control.create_workload_identity(
name='agent-identity',
allowedRoleArns=['arn:aws:iam::123456789012:role/AgentRole']
)# Get token for workload
response = client.get_workload_access_token(
workloadIdentityId='identity-xxx'
)
access_token = response['accessToken']# In your agent entry point
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
# Configure tracing
provider = TracerProvider()
trace.set_tracer_provider(provider)
# Entry point with OTel
# entryPoint: ['opentelemetry-instrument', 'main.py']bedrock-agentcore| Method | Purpose |
|---|---|
| Execute agent logic |
| Halt active session |
| List all sessions |
| Initialize browser |
| End browser session |
| Launch interpreter |
| Execute code |
| Create memories |
| Fetch memories |
| Get auth token |
| Run evaluation |
bedrock-agentcore-control| Method | Purpose |
|---|---|
| Create runtime |
| Remove runtime |
| Modify runtime |
| Create gateway |
| Add tool |
| Create memory store |
| Create policy |
| Create evaluator |
| Create browser |
| Create interpreter |
# main.py
from bedrock_agentcore import BedrockAgentCoreApp
from strands import Agent
app = BedrockAgentCoreApp()
agent = Agent(model="anthropic.claude-sonnet-4-20250514-v1:0")
@app.entrypoint
def invoke(payload):
prompt = payload.get("prompt", "Hello!")
result = agent(prompt)
return {"response": result.message}
if __name__ == "__main__":
app.run()# Configure
agentcore configure -e main.py -n hello-world-agent
# Test locally
python main.py &
curl -X POST http://localhost:8080/invocations \
-H "Content-Type: application/json" \
-d '{"prompt": "Hello!"}'
# Deploy to AWS
agentcore deploy
# Test deployed
agentcore invoke '{"prompt": "Hello from production!"}'import boto3
client = boto3.client('bedrock-agentcore')
response = client.invoke_agent_runtime(
agentRuntimeArn='arn:aws:bedrock-agentcore:us-east-1:123456789012:agent-runtime/hello-world',
runtimeSessionId='test-session-1',
payload={'prompt': 'What can you help me with?'}
)
print(response['payload'])from botocore.exceptions import ClientError
try:
response = client.invoke_agent_runtime(
agentRuntimeArn=agent_arn,
runtimeSessionId='session-1',
payload={'prompt': 'test'}
)
except ClientError as e:
error_code = e.response['Error']['Code']
if error_code == 'ResourceNotFoundException':
print("Agent runtime not found")
elif error_code == 'ValidationException':
print("Invalid request parameters")
elif error_code == 'ThrottlingException':
print("Rate limited - implement backoff")
elif error_code == 'AccessDeniedException':
print("Check IAM permissions")
else:
raise{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"bedrock-agentcore:InvokeAgentRuntime",
"bedrock-agentcore:StartBrowserSession",
"bedrock-agentcore:InvokeCodeInterpreter"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream"
],
"Resource": "arn:aws:bedrock:*::foundation-model/*"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
}
]
}references/gateway-configuration.mdreferences/identity-integration.mdreferences/troubleshooting.md