Agentic AI AcademyAgentic AI Academy

What Is AgentCore?

The prototype-to-production gap, and the platform that closes it

Beginner 12 minBuilderDecision-maker
What you'll be able to do
  • Define Amazon Bedrock AgentCore as a managed, serverless platform of production primitives, and distinguish it from the older Amazon Bedrock Agents product
  • Explain the prototype-to-production gap and map each gap to the AgentCore service that closes it
  • Describe why AgentCore is framework-agnostic (Runtime hosts a container that speaks a protocol) and model-agnostic (the model is a config value in your code)
  • Reason about modularity: adopt the whole platform or wire in a single service, each with its own API surface and independently billable
  • Identify the three headline use cases — Agents, Tools/MCP servers, and Agent platforms — and which one a given project maps to
  • Verify volatile facts (service status, GA dates, pricing, regions) against the live AWS pages rather than treating them as fixed
At a glance

Amazon Bedrock AgentCore is an agentic platform for building, deploying, and operating effective agents securely at scale using any framework and any foundation model, with no infrastructure to manage. This opener defines the platform, names the prototype-to-production gap it closes (session isolation, secure deploy, memory, identity, governed tools, sandboxes, observability), and establishes the two backbone properties — framework-agnostic and model-agnostic — plus its modularity and three headline use cases.

  1. 1What AgentCore is (and what the name does NOT mean)
  2. 2The prototype-to-production gap
  3. 3Backbone property #1: framework-agnostic
  4. 4Backbone property #2: model-agnostic
  5. 5Modularity: all-in, or à la carte
  6. 6Three headline use cases

What AgentCore is (and what the name does NOT mean)

Amazon Bedrock AgentCore is, in AWS's own words, "an agentic platform for building, deploying, and operating highly effective agents securely at scale using any framework and foundation model." It lets you enable agents to take actions across tools and data with the right permissions and governance, run agents securely at scale, and monitor agent performance and quality in production — all without any infrastructure management.

The critical mental shift: AgentCore is not a framework and not an agent. It is a set of managed, serverless production primitives — the operational plumbing that sits underneath whatever agent you already wrote. You keep your agent logic and your framework; AgentCore offloads the heavy operational lifting.

The naming trap. Two AWS products have confusingly similar names:

ProductWhat it is
Amazon Bedrock Agents (classic)A fully managed, configuration-first agent service — you define the agent in the console/API, attach a Knowledge Base and action groups, and AWS runs the orchestration loop on Bedrock-hosted models.
Amazon Bedrock AgentCore (this course)The modular, code-first, framework-agnostic platform — bring your own framework, model, and orchestration; AgentCore supplies the production infrastructure.

The brand is "Amazon Bedrock AgentCore"; the individual services are written "AgentCore Runtime," "AgentCore Memory," "AgentCore Gateway," and so on. Despite the "Bedrock" in the name, AgentCore is explicitly NOT limited to Bedrock models or to one framework. Treat it as a sibling platform under the Bedrock umbrella, distinct from classic Bedrock Agents — and note these two coexist; classic Bedrock Agents is not deprecated.

Watch out

AgentCore is not Bedrock Agents

If you read older AWS docs or Stack Overflow answers about "Bedrock Agents," double-check which product they mean. Classic Bedrock Agents ties you to AWS's managed ReAct loop and Bedrock-hosted models. Bedrock AgentCore is the opposite design point: you own the orchestration and the model choice; AWS owns the infrastructure. Per the AWS FAQ, if you use Bedrock Agents today you can keep doing so — AgentCore adds enhanced capabilities including support for any open-source framework, plus MCP, VPC connectivity, and A2A.

The prototype-to-production gap

Here is the problem AgentCore exists to solve, stated plainly: building an agent demo on your laptop is easy; operating that agent in production is hard.

A LangGraph or Strands agent that answers questions on your machine looks finished. It is not. The moment real users hit it, you discover everything the demo glossed over:

  • Session isolation — user A's reasoning context, files, and in-memory state must never leak into user B's session.
  • Secure deployment — package, ship, version, and roll back the agent without standing up servers.
  • Persistent memory — remember facts within a conversation and across sessions, not just inside one process.
  • Identity / authorization — when the agent acts on a user's behalf (calling an API, hitting a database), it needs the right credentials with the right scopes, not a hard-coded key.
  • Governed tools — a controlled, auditable way to connect tools and back-end APIs.
  • Sandboxes — isolated environments to run model-generated code and drive a browser safely.
  • Observability — end-to-end traces, metrics, and logs so you can debug a non-deterministic system in production.

Historically, teams hand-built all of this on EC2/EKS/Lambda: a per-user isolation scheme, a deploy pipeline, a memory store, a secrets/OAuth layer, an API gateway for tools, a code sandbox, and an OpenTelemetry stack. That is months of undifferentiated plumbing before your agent does anything novel.

AgentCore provides each of those as a managed, serverless service. The mapping is one-to-one:

The gapThe AgentCore service
Secure, serverless hosting + session isolationAgentCore Runtime
Persistent memory (short- and long-term)AgentCore Memory
Governed tool connectivity (APIs/Lambda → MCP)AgentCore Gateway
Identity, access & authorizationAgentCore Identity
Safe browser automationAgentCore Browser
Sandboxed code executionAgentCore Code Interpreter
Tracing, metrics, logsAgentCore Observability

These are the original 7 services — announced together at preview and, as of writing, all reached general availability (the preview was announced mid-2025 and GA followed later that year; treat any specific date as volatile and confirm it on the live AWS pages). The "Core services" table keeps growing — newer modules such as Harness, Policy, Evaluations, Registry, Payments, and Optimization have since appeared, several still in preview. The next lesson catalogs the full set; for now, anchor on these seven.

Key insight

The demo lies about the hard 90%

The agent loop you wrote is maybe 10% of a production system. The other 90% — isolation, deploy, memory, auth, tool governance, sandboxes, observability — is identical across almost every agent anyone builds. AgentCore's bet is that this 90% should be a managed platform, not something each team re-implements badly on raw compute.

Watch out

The 7-service list is a moving target [VOLATILE]

The canonical "7 services" you'll see in July–October 2025 blog posts is no longer the complete list. Harness, Registry, Payments, and Optimization remain preview as of writing and must not be taught as production-ready without a live status check. Always reconcile against the live overview page: https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/what-is-bedrock-agentcore.html

Backbone property #1: framework-agnostic

The first foundational property — and the conceptual backbone of the whole course — is that AgentCore is framework-agnostic.

The key idea: Runtime hosts a container that speaks a known protocol, not a framework. AWS never imports your framework or inspects your agent object. It runs a container, and that container exposes a small standardized HTTP contract (/invocations for work, /ping for health). Your framework lives inside the container, behind that contract.

The seam between AWS's managed HTTP server and your framework is a single decorator: @app.entrypoint. The Python SDK package bedrock-agentcore ships a thin ASGI wrapper, BedrockAgentCoreApp, that turns a plain function into the HTTP service contract — wiring /invocations, /ping, session headers, and streaming for you.

The "four lines to deploy" framing: (1) import, (2) app = BedrockAgentCoreApp(), (3) @app.entrypoint, (4) app.run():

python
from bedrock_agentcore.runtime import BedrockAgentCoreApp
from strands import Agent

app = BedrockAgentCoreApp()
agent = Agent()

@app.entrypoint
def invoke(payload):
    result = agent(payload.get("prompt", "Hello"))
    return {"result": result.message}

if __name__ == "__main__":
    app.run()   # local http://localhost:8080; in container binds 0.0.0.0:8080

The body inside @app.entrypoint is the only part that changes between frameworks. Everything around it — the decorator, payload.get("prompt"), the {"result": ...} shape, app.run(), the deploy flow — is invariant. Swap Strands for LangGraph, CrewAI, LlamaIndex, Google ADK, or the OpenAI Agents SDK and only the three lines that build and call the agent move:

FrameworkBuild objectCall inside entrypointPull result
Strandsagent = Agent(tools=[...])agent(prompt)result.message
LangGraphgraph = builder.compile()graph.invoke({"messages":[...]})out["messages"][-1].content
CrewAIcrew = AgentcoreCrewAi().crew()crew.kickoff(inputs=...)result.raw
OpenAI Agents SDKagent = Agent(...)await Runner.run(agent, query)result.final_output
Google ADKroot_agent = Agent(model=...)runner.run_async(...)event.content.parts[0].text

AWS names Strands Agents (its open-source, Apache-2.0 SDK) as first-class/recommended, but the official samples repo carries folders for langchain, langgraph, crewai, llamaindex, adk, openai-agents, pydanticai-agents, and more — plus plain custom code. The framework is your choice; the protocol is the contract.

Tip

Test the exact cloud contract locally

Because Runtime is "just" a container speaking HTTP, you can hit the identical contract on your laptop before deploying anything:

bash
curl -X POST http://localhost:8080/invocations \
  -H 'Content-Type: application/json' \
  -d '{"prompt":"What is the weather?"}'

If this works locally, the deployed runtime behaves the same way — the wire contract does not change between your machine and AWS.

Backbone property #2: model-agnostic

The second backbone property: AgentCore is model-agnostic. The model is just a config value inside your agent code — Bedrock, OpenAI, Gemini, Anthropic's direct API, a local Ollama model — and AgentCore never inspects it. This is the direct consequence of property #1: AWS runs a container over HTTP, so it has no opinion about which model the code inside calls.

With Strands, you select a Bedrock model by configuring a BedrockModel:

python
from strands import Agent
from strands.models.bedrock import BedrockModel

model = BedrockModel(
    model_id="amazon.nova-pro-v1:0",   # or a Claude model, or a us./global. cross-region inference profile
    region_name="us-west-2",
    temperature=0.3,
)
agent = Agent(model=model)

Switching to a non-Bedrock provider is purely a code change — a different provider class, same agent:

ProviderClassImport
Amazon BedrockBedrockModelstrands.models.bedrock
OpenAIOpenAIModelstrands.models.openai
Anthropic API (direct)AnthropicModelstrands.models.anthropic
Ollama (local)OllamaModelstrands.models.ollama
LiteLLM (100+ incl. Gemini)LiteLLMModelstrands.models.litellm

This is exactly why the "Bedrock" in the product name is misleading: you can deploy an OpenAI- or Gemini-backed agent onto AgentCore Runtime and AWS is none the wiser.

A note on model IDs (VOLATILE). Exact model IDs change between releases. As of writing, the default Strands model is reported as global.anthropic.claude-sonnet-4-5-20250929-v1:0, and claude-sonnet-4-20250514 is now legacy — but treat any specific ID as something to verify against the live catalog, not a timeless fact. Pin a current ID and confirm it on https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html

Example

First-run gotcha: AccessDeniedException

If your first Bedrock-backed run throws AccessDeniedException, the cause is almost always that Bedrock model access is not enabled for that specific model in that specific region — a per-model, per-region toggle in the Bedrock console, separate from AgentCore. Enable model access, or pin a model you already have access to.

Note

Keep API keys out of the image

Model-agnostic does not mean baking an OpenAI key into your container. Outbound credentials (API keys, OAuth tokens) are injected at call time by AgentCore Identity via decorators like @requires_api_key and @requires_access_token, backed by AWS Secrets Manager and the token vault. We cover this in the Identity module — for now, just know the key does not belong in your code or image.

Modularity: all-in, or à la carte

AgentCore's services are modular — they "work together or independently." You do not have to adopt the whole platform.

Concretely, you can:

  • Use only AgentCore Gateway to expose your existing APIs and Lambda functions as MCP tools, while your agent runs on EKS, ECS, or Lambda.
  • Use only AgentCore Code Interpreter as a managed sandbox for model-generated code, calling it from an agent hosted anywhere.
  • Use only AgentCore Memory as a managed store, bolted onto a framework agent you run yourself.

Each service has its own SDK / API surface (its own boto3 client, its own control and data planes) and is independently billable — pricing is consumption-based, per service, with no upfront commitment. There is no monolithic "turn on AgentCore" switch; you compose the pieces you need.

This is what makes the platform incrementally adoptable. A team with an existing agent on Lambda can start by routing its tool calls through Gateway for governance, add Memory later for persistence, and only move hosting onto Runtime when session isolation becomes a requirement — each step a separate, independently-paid decision.

text
        ┌────────────────────────────────────────────┐
        │   Your agent (any framework, any model)      │
        └────────────────────────────────────────────┘
             │            │            │           │
        ┌────▼───┐   ┌────▼────┐  ┌────▼────┐  ┌────▼─────────┐
        │Runtime │   │ Memory  │  │ Gateway │  │ Code Interp. │  ...pick any subset
        └────────┘   └─────────┘  └─────────┘  └──────────────┘
          each: own SDK/API surface · independently billable

Pricing is consumption-based — "flexible, consumption-based pricing with no upfront commitments or minimum fees," spread across roughly a dozen independently billable components. Because every concrete rate is volatile, the rule for this course is: learn the billing dimension (per active vCPU-hour, per request, per record, etc.) and verify the number on the live page.

Tip

Pricing dimensions — learn the shape, link the number [VOLATILE]

Each service bills on its own dimension: Runtime/Browser/Code Interpreter on active vCPU-hours + GB-hours; Gateway per invocation; Memory per event / per record-month / per retrieval; Identity per token request to non-AWS providers (and free behind Runtime/Gateway); Observability passes through to CloudWatch. All rates are [VOLATILE] — verify the live page before quoting any number to a stakeholder: https://aws.amazon.com/bedrock/agentcore/pricing/

Three headline use cases

AWS frames AgentCore around three use cases. Knowing which one your project maps to tells you which services you'll lean on first.

1. Agents — autonomous applications. Apps that reason, use tools, and keep context. They run serverless with isolated sessions, persistent memory, and built-in observability. This is the default mental model: you wrote an agent, you want it operated in production. Primary services: Runtime + Memory + Observability (+ Identity for actions).

2. Tools / MCP servers — turn what you already have into agent-callable tools. Convert existing APIs, databases, Lambda functions, or services into Model Context Protocol (MCP) tools that any agent can call — without rewriting your backends. Primary service: Gateway. This is how an organization makes its existing systems consumable by agents en masse.

3. Agent platforms — the paved path. Give internal teams a governed environment: approved tools, shared memory, governed access, and centralized observability, auth, and compliance. Instead of every team standing up its own plumbing, the platform team operates one and hands out a paved path. Primary services: essentially the whole platform working together — Gateway (approved tools) + Identity (governed access) + Memory (shared) + Observability (centralized) + Runtime.

text
  Agents            →  build & operate ONE autonomous app   (Runtime, Memory, Observability)
  Tools / MCP       →  expose existing systems to agents     (Gateway)
  Agent platforms   →  a governed paved path for many teams  (everything, together)

Notice the progression: the first use case is one team operating one agent; the third is one platform team operating capabilities for the whole org. The modularity from the previous section is what makes that span possible with the same building blocks.

Key insight

"Paved path" is the enterprise endgame

The third use case is where AgentCore's design pays off at scale. A platform team curates approved tools (via Gateway), enforces who-can-do-what (via Identity), and centralizes traces and audit (via Observability) — so application teams ship agents fast and the organization keeps governance, compliance, and a single pane of glass. That separation of concerns is hard to retrofit if every team hand-rolled its own stack.

Try it: Map the gap, then place your own agent on the platform

Goal: cement the platform thesis by mapping the prototype-to-production gap to AgentCore services and classifying a real agent against the three use cases. No AWS account required — this is a reasoning lab using the official docs.

  1. Read the source of truth. Open the official overview (https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/what-is-bedrock-agentcore.html). In the 'Core services' table, list every service shown and mark each as GA or preview as of today. Note where this differs from the 'original 7' (Runtime, Memory, Gateway, Identity, Browser, Code Interpreter, Observability) — the list is volatile and keeps growing.

  2. Build the gap → service map. Take a small agent you have written or could imagine (e.g. a support assistant that looks up orders and drafts replies). For each production concern below, write which AgentCore service closes it and one sentence on why: session isolation, secure deploy, persistent memory, identity/authorization for actions, governed tools, sandboxes, observability.

  3. Prove framework-agnostic to yourself. Write the four-line skeleton from the lesson — from bedrock_agentcore.runtime import BedrockAgentCoreApp, app = BedrockAgentCoreApp(), an @app.entrypoint function, and app.run(). Then write a second version that swaps the framework inside the entrypoint (e.g. Strands → LangGraph using the wrapper table). Highlight exactly which lines changed; everything else should be identical.

  4. Prove model-agnostic. In your Strands skeleton, replace a BedrockModel(...) with a non-Bedrock provider class from the lesson's table (e.g. OpenAIModel from strands.models.openai). Note that nothing in the @app.entrypoint contract changes — the model is purely a config value.

  5. Classify against the three use cases. Decide whether your agent is primarily an 'Agent', a 'Tools / MCP server', or an 'Agent platform' play — and justify it in two sentences. Then describe an incremental adoption path that uses AgentCore modularity: which single service would you adopt first, and why, given each is independently billable?

  6. Reflect on volatility. List three facts from this lesson you should re-verify before putting them in a design doc (hint: service GA/preview status, pricing numbers, region availability, model IDs). For each, name the live AWS page you'd check.

Key takeaways

  1. 1Amazon Bedrock AgentCore is an agentic platform to build, deploy, and operate effective agents securely at scale using any framework and any foundation model, with no infrastructure to manage. It is a set of managed serverless production primitives, not a framework or an agent.
  2. 2It is distinct from the older, managed, configuration-first Amazon Bedrock Agents. Despite the name, AgentCore is NOT limited to Bedrock models or to one framework, and the two products coexist.
  3. 3It closes the prototype-to-production gap: session isolation, secure deploy, memory, identity/authorization, governed tools, sandboxes, and observability — historically hand-built on EC2/EKS/Lambda, now mapped to Runtime, Memory, Gateway, Identity, Browser, Code Interpreter, and Observability.
  4. 4Backbone #1 — framework-agnostic: Runtime hosts a container that speaks a known protocol (HTTP `/invocations` + `/ping`), not a framework. The `@app.entrypoint` body is the only thing that changes between Strands, LangGraph, CrewAI, OpenAI Agents SDK, etc.
  5. 5Backbone #2 — model-agnostic: the model is a config value inside your code (e.g. a Strands `BedrockModel` or `OpenAIModel`), and AgentCore never inspects it — so an OpenAI- or Gemini-backed agent runs just fine.
  6. 6Services are modular: use the whole platform or a single service (e.g. only Gateway, only Memory), each with its own SDK/API surface and independently billable on consumption-based pricing.
  7. 7Three use cases: Agents (operate one autonomous app), Tools/MCP servers (expose existing systems via Gateway), and Agent platforms (a governed paved path for many teams). Treat all service-status, GA-date, pricing, region, and model-ID facts as volatile — verify the live AWS pages.

Quiz

Lock in what you learned

Check your understanding

0 / 4 answered

1.A teammate says "AgentCore only works with Bedrock models, right? It's got Bedrock in the name." What's the accurate correction?

2.Which statement best captures why AgentCore is described as 'framework-agnostic'?

3.Your agent already runs on Lambda, but you want a governed, auditable way to expose your existing internal APIs as tools any agent can call — without rehosting the agent. What does AgentCore's modularity let you do?

4.AgentCore's documentation frames the platform around three headline use cases. Which set is correct?

Go deeper

Hand-picked sources to keep learning