Build an AI agent from scratch with the Strands Agents SDK, then deploy and operate it with Amazon Bedrock AgentCore.
-
How you learn: each chapter has a
labs/folder with empty files that you fill in yourself, and acompleted/folder holding the reference implementation. You write the code, then compare against the reference. -
Level: 100 to 200 (beginner to intermediate). No prior agent or LLM experience required.
-
Duration: about 2 hours for the required chapters, about 3 hours for all eight lab chapters.
- Strands Agents SDK: build an agent from a prompt, a model, and tools, then extend it with custom tools and MCP servers
- Retrieval: query an Amazon Bedrock Knowledge Base from an agent with the
retrievetool - Multi-agent systems: Agents-as-Tools, Swarm, and Graph, and when to reach for each
- Memory: short-term and long-term memory with Amazon Bedrock AgentCore Memory
- Deployment: turn a local agent into a serverless one on AgentCore Runtime with four added lines
- Observability: agent metrics, logs, and OpenTelemetry traces, both self-managed and through CloudWatch GenAI Observability
| # | Chapter | What you build | β±οΈ Time | π Level | Track |
|---|---|---|---|---|---|
| 00 | Setup | Python environment, AWS credentials, Bedrock model access | 10 min | Required | |
| 01 | Single agent | Agent with prompt, model, and tools. Bedrock Knowledge Base, MCP tools, self-improving agent | 30 min | Required | |
| 02 | Multi-agent patterns | Agents-as-Tools, Swarm, and Graph | 30 min | Required | |
| 03 | Chatbot application | Streamlit chat UI with streaming and tool-call display | 10 min | Optional | |
| 04 | Observability with Strands | Metrics, logs, and OTLP traces to a local Jaeger | 30 min | Optional | |
| 05 | Agent memory | Short-term and long-term memory with AgentCore Memory | 30 min | Required | |
| 06 | AgentCore Runtime | Serverless deployment of the agent | 20 min | Required | |
| 07 | AgentCore Observability | CloudWatch GenAI Observability dashboard | 10 min | Required | |
| 08 | Developing with Kiro IDE | Steering, MCP config, and spec-driven development | 10 min | Optional |
Important
Chapters 01, 02, 05, 06, and 07 form the core path. Chapters 03, 04, and 08 are self-contained and can be skipped. Chapter 07 is the one dependency worth noting: it reads telemetry from the agent you deploy in chapter 06.
Prerequisites
- An AWS account with permission to call Amazon Bedrock and create AgentCore resources
- Amazon Bedrock model access enabled in
us-west-2for the Anthropic Claude models listed below - Python 3.12
- uv
- Docker, for chapters 04 and 06 only
- AWS CLI configured (
aws configure), default regionus-west-2
Install
git clone https://github.com/aws-samples/sample-aws-agentic-ai-workshop.git
cd sample-aws-agentic-ai-workshop/code/00-setup
uv sync
cd ..Run your first agent
uv run --project 00-setup python 01-single-agent/completed/basic.pyIf that prints an agent response, your environment is ready. Now open the setup guide for the full setup notes, then start chapter 01.
Note
All lab commands are relative to the code/ directory, so run them from there.
The labs run against Amazon Bedrock in us-west-2. Enable model access for these before you start:
| Model ID | Used in |
|---|---|
us.anthropic.claude-sonnet-4-20250514-v1:0 |
Chapters 01 to 06 |
us.anthropic.claude-sonnet-4-6 |
Chapter 01 self-improving agent labs, chapter 02 |
us.amazon.nova-pro-v1:0 |
Chapter 04, metrics lab |
Enable them in the Bedrock console under Model access. Cross-region inference profiles (the us. prefix) require access in the destination regions of the profile, which the console handles for you.
| Technology | Purpose | Used in | Documentation |
|---|---|---|---|
| Strands Agents SDK | Agent framework | All chapters | Docs |
| Amazon Bedrock | Managed model inference | All chapters | Docs |
| Bedrock Knowledge Bases | Managed RAG over your documents | 01 | Docs |
| Model Context Protocol | Tool integration standard | 01, 08 | Docs |
| AWS MCP servers | Ready-made MCP servers for AWS | 01, 08 | Docs |
| Streamlit | Chat UI | 03, 05 | Docs |
| OpenTelemetry, ADOT, Jaeger | Trace collection and viewing | 04 | Docs |
| AgentCore Memory | Short-term and long-term agent memory | 05 | Docs |
| AgentCore Runtime | Serverless agent hosting | 06 | Docs |
| AgentCore Observability | CloudWatch GenAI Observability | 07 | Docs |
| uv | Python environment and dependencies | All chapters | Docs |
| Kiro | AI-powered IDE | 08 | Docs |
Code lives under code/, and the lab guides live under workshop/. The two trees mirror each other chapter for chapter.
sample-aws-agentic-ai-workshop/
βββ code/ # all workshop code, run the commands from here
β βββ 00-setup/ # environment setup, uv project, dependencies
β β βββ pyproject.toml
β β βββ uv.lock
β β βββ create-uv-env.sh
β βββ 01-single-agent/
β β βββ labs/ # you write these
β β βββ completed/ # reference implementation
β βββ 02-multi-agents/
β βββ 03-chatbot-app/
β βββ 04-observability/
β β βββ docker/ # OTel collector + Jaeger
β βββ 05-agent-memory/
β βββ 06-agentcore-runtime/
β βββ 07-agentcore-observability/ # console-only chapter, no code
β βββ 08-kiro-dev/
β βββ .kiro/ # steering rules and MCP config
βββ workshop/ # all lab guides
βββ en/ # English guides, one folder per chapter
β βββ 00-setup/README.md
β βββ 01-single-agent/README.md
β βββ ...
βββ ko/ # Korean guides, same folder names
β βββ 00-setup/README.md
β βββ 01-single-agent/README.md
β βββ ...
βββ images/ # screenshots referenced by the guides
Every chapter follows the same shape:
code/NN-chapter/
βββ labs/ # empty files, you write the code here
βββ completed/ # reference answers, run these if you get stuck
workshop/en/NN-chapter/README.md # English lab guide
workshop/ko/NN-chapter/README.md # Korean lab guide
The labs call Bedrock models on demand, and several chapters create AWS resources that bill for as long as they exist:
| Chapter | Standing resources |
|---|---|
| 01 | Bedrock Knowledge Base, OpenSearch Serverless collection, S3 bucket |
| 05 | AgentCore Memory resource |
| 06 | AgentCore Runtime, ECR repository, IAM execution role, CloudWatch log groups |
| 07 | CloudWatch Transaction Search ingestion, trace and log retention |
Warning
Each chapter has its own Cleanup section. Work through them when you are done, especially chapters 01, 05, and 06. An OpenSearch Serverless collection in particular bills continuously whether or not you query it.
These are the failures that come up across chapters. Each chapter also has its own Troubleshooting section for problems specific to it: 00, 01, 02, 03, 04, 05, 06.
| Symptom | Cause and fix |
|---|---|
uv: command not found |
The installer puts the binary in ~/.local/bin. Open a new shell, or export PATH="$HOME/.local/bin:$PATH". |
ModuleNotFoundError for strands or bedrock_agentcore |
You are on the system Python. Use uv run --project 00-setup python ..., or activate 00-setup/.venv. |
AccessDeniedException when a lab calls a model |
Model access is not enabled for that model ID in us-west-2, or your credentials lack bedrock:InvokeModel. Check the model access page. |
ValidationException mentioning a region, or model not found |
Your default region is not us-west-2. Check with aws configure get region. |
Cannot connect to the Docker daemon in chapter 04 or 06 |
Start Docker Desktop (or Finch / Podman) and confirm with docker info, then re-run. |
| Memory calls fail right after creating a memory (chapter 05) | A new AgentCore Memory takes 1 to 2 minutes to reach ACTIVE. Wait, then retry. LTM extraction is also asynchronous. |
| CloudWatch GenAI Observability dashboards are empty (chapter 07) | Transaction Search must be enabled, and the agent from chapter 06 must have been invoked at least once. |
Official documentation
- Strands Agents documentation
- Strands Agents observability and evaluation
- Multi-agent patterns
- Amazon Bedrock user guide
- Amazon Bedrock AgentCore developer guide
- AgentCore starter toolkit
- Model Context Protocol specification
- AWS MCP servers
Code and samples
See CONTRIBUTING for how to report a security issue.
This library is licensed under the MIT-0 License. See LICENSE.
