Pricing, Regions & the Two CLIs
Reading the consumption model and the fast-moving facts
- Explain consumption-based pricing by its five dimensions (per-session active compute, per-request, per-record, pass-through, free/preview) instead of memorizing rates
- Describe active-compute billing as vCPU-hours + GB-hours that excludes I/O wait, and identify where Identity is free behind Runtime/Gateway
- Reason about region availability and the GA timeline as volatile facts, defaulting examples to us-east-1 / us-west-2
- Disambiguate the legacy Python `bedrock-agentcore-starter-toolkit` from the new npm `@aws/agentcore` CLI, and map each one's verbs
- Explain that both CLIs wrap the agent with the same `bedrock-agentcore` Python SDK and deploy to the same serverless Runtime
- Read any `[VOLATILE]` fact correctly: learn the concept, cite the official live page, and re-verify the number before relying on it
AgentCore bills on a consumption model with no upfront commitment, and almost every concrete number — rates, regions, GA dates, package versions — is volatile. This lesson teaches the durable parts: the five pricing patterns and the active-compute dimension behind Runtime/Browser/Code Interpreter, how to reason about region availability, and the single most common setup trip-up — two different CLIs that both ship an `agentcore` binary with different verbs but deploy to the same Runtime.
- 1Consumption pricing: learn the five patterns, not the numbers
- 2Active-compute billing: vCPU-hours + GB-hours, I/O wait excluded
- 3Regions and the GA timeline are volatile — default to us-east-1 / us-west-2
- 4The two CLIs: same binary name, different verbs, one Runtime
- 5Both CLIs wrap the same SDK and deploy to the same Runtime
- 6How to read a [VOLATILE] fact without getting burned
Consumption pricing: learn the five patterns, not the numbers
AWS describes AgentCore as "flexible, consumption-based pricing with no upfront commitments or minimum fees." There is no per-seat license and no reserved capacity — you pay for what your agents actually consume. Across roughly twelve independently billable components (one or more per service), every line item falls into one of five patterns:
| # | Pattern | What it meters | Where you see it |
|---|---|---|---|
| 1 | Per-session active compute | vCPU-hours + GB-hours while code is actively running | Runtime, Browser, Code Interpreter |
| 2 | Per-request | each API/tool/token call | Gateway (per invocation, separate search rate), Identity (per token/API-key request), Policy (per authorization) |
| 3 | Per-record | each stored/retrieved unit | Memory (short-term events, long-term records/month, retrievals), Registry (per record) |
| 4 | Pass-through | you pay the downstream service, not AgentCore | Observability (→ CloudWatch rates), Payments (→ wallet provider) |
| 5 | Free / preview | no charge in current status | Identity behind Runtime/Gateway; Optimization recommendations (preview) |
If you internalize these five patterns, you can estimate the shape of a bill for any architecture — a chatty Gateway-fronted tool layer is request-dominated; a long-conversation memory app is record-dominated; a code-heavy data agent is compute-dominated — without ever memorizing a rate.
Every rate in the dossier and on the pricing page is tagged [VOLATILE]. As of writing, the illustrative figures look like this — treat them as ballpark only and confirm on the live page:
# Illustrative only — VOLATILE, verify https://aws.amazon.com/bedrock/agentcore/pricing/
Runtime / Browser / Code Interpreter ~$0.0895 / vCPU-hr + ~$0.00945 / GB-hr
Gateway ~$0.005 / 1k invocations; ~$0.025 / 1k search
Identity ~$0.010 / 1k token requests to non-AWS (free via Runtime/Gateway)
Memory ~$0.25 / 1k short-term events; ~$0.50 / 1k retrievals
Policy ~$0.000025 / authorization requestThere are also incidental storage costs that are easy to forget: container images land in ECR storage, direct-code (CodeZip) packages land in S3 Standard, and Browser profiles land in S3 Standard.
Watch out
Never quote a rate as a timeless fact
Pricing changed once already: preview was free through Sept 16 2025, and standard pricing began Sept 17 2025. The numbers above are research-time ballparks tagged [VOLATILE]. In any estimate you give a stakeholder, link https://aws.amazon.com/bedrock/agentcore/pricing/ and label your figures "as of <date>, verify the live page."
Tip
Free Tier exists, but verify the amount
As of writing, new customers get up to ~$200 in Free Tier credits plus per-module preview allotments (e.g. Registry's first 5k records free). That figure is [VOLATILE] — confirm the current credit and allotments on the pricing page before you bank on them for a proof-of-concept budget.
Active-compute billing: vCPU-hours + GB-hours, I/O wait excluded
The pattern worth understanding in detail is per-session active compute, because it governs the three services where your code (or a managed runtime) executes: Runtime, Browser, and Code Interpreter. These bill on two metered dimensions:
- vCPU-hours — CPU consumed while your session is actively running.
- GB-hours — memory consumed while your session is actively running.
The metering is fine-grained: per-second, with a 1-second minimum and a 128 MB memory minimum. The crucial nuance — and the one that makes AgentCore cheaper than a naively-sized container for agent workloads — is that I/O wait is excluded. When your agent is blocked waiting on a model response, a slow tool, or a downstream HTTP call, you are not billed for active compute during that wait. Agents spend a large fraction of wall-clock time waiting on LLMs and tools, so excluding I/O wait can make the effective cost dramatically lower than the session's elapsed duration would suggest.
A mental sketch of the meter (conceptual, not an SDK call):
session elapsed: |--run--|----wait on model----|--run--|--wait on tool--|--run--|
billed compute: |XXXXXXX| |XXXXXXX| |XXXXXXX|
^ vCPU-hrs + GB-hrs accrue ONLY during the run segments (I/O wait excluded)Two more cost facts that catch people:
- Identity is free when used behind Runtime or Gateway. You only pay Identity's per-request rate (~$0.010/1k as of writing,
[VOLATILE]) for token/API-key requests made to non-AWS providers outside that path. Inbound auth and the workload-token flow that Runtime/Gateway drive for you are not a separate Identity charge. - Pass-through services hide cost elsewhere. Observability is a cheap AgentCore line item because the real spend is in CloudWatch (logs, metrics, traces). Payments adds no AWS charge — you pay the wallet provider. Don't read a tiny AgentCore line and conclude the feature is nearly free.
Key insight
Why "excludes I/O wait" is the headline number
An agent turn might take 8 seconds of wall time but only 0.4s of actual CPU — the rest is the model thinking and tools responding. Because active-compute billing excludes I/O wait, you pay roughly for that 0.4s of vCPU-hours, not the 8s. This is the structural reason serverless agent hosting can undercut an always-on container you'd otherwise keep warm.
Note
Memory has several sub-dimensions
Memory is per-record, but it splits into short-term events, long-term records per month, and retrievals — each metered separately. A memory-heavy app can accumulate cost across all three at once, so model them independently when estimating.
Regions and the GA timeline are volatile — default to us-east-1 / us-west-2
Region availability and GA dates change as AWS expands the service, so treat both as [VOLATILE] and never hard-code a region list from memory. The durable skill is knowing where to look and which regions are the safe default for examples.
The GA timeline (as of writing — confirm on AWS What's New):
- July 16 2025 — Preview announced at AWS Summit NY (the original 7 services).
- Sept 16 2025 — end of the preview free window.
- Sept 17 2025 — standard pricing begins.
- October 13 2025 — GA: Runtime, Memory, Gateway, Identity, and Observability reached general availability (Browser and Code Interpreter are part of the platform too). Newer modules followed: Evaluations went GA in early 2026; Registry, Payments, and Optimization remained in preview. (A reported Policy GA around March 2026 is unverified in first-party sources — don't state it as fact.)
Regions (as of writing — verify the live regions page): at GA, AgentCore was available in 9 regions:
# VOLATILE — verify https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/agentcore-regions.html
us-east-1 us-east-2 us-west-2
ap-south-1 ap-southeast-1 ap-southeast-2 ap-northeast-1
eu-central-1 eu-west-1Throughout this course, examples default to us-east-1 or us-west-2 — they were available at GA, host the broadest Bedrock model selection, and keep snippets copy-pasteable. When you deploy for real, pick the region closest to your users and confirm it is on the live regions list and that the Bedrock models you need are enabled there.
In the CLIs, region is explicit. With the starter toolkit you pass -r/--region; with either CLI your ambient AWS config (AWS_REGION / ~/.aws/config) and credentials apply:
# Starter toolkit: pin the region explicitly
agentcore configure -e my_agent.py -r us-west-2
# Or rely on ambient AWS config (applies to both CLIs)
export AWS_REGION=us-east-1Watch out
"Available in a region" is not "your model is enabled there"
AgentCore being in a region tells you nothing about whether a specific Bedrock model is enabled in your account there. Model access is granted per-region in the Bedrock console. A deploy that fails to invoke a model is often a region/model-access mismatch, not an AgentCore problem.
The two CLIs: same binary name, different verbs, one Runtime
This is the single most common setup trip-up in AgentCore. There are two different command-line tools, both of which install a binary called agentcore, and they expose different verbs. Copy-pasting commands across tutorials that assume different CLIs is the number-one reason a "get started" walkthrough fails.
| Starter Toolkit (legacy) | AgentCore CLI (current / recommended) | |
|---|---|---|
| Package | bedrock-agentcore-starter-toolkit (PyPI) | @aws/agentcore (npm) |
| Install | pip install bedrock-agentcore-starter-toolkit | npm install -g @aws/agentcore |
| Runtime needed | Python ≥3.10 | Node.js 20+ (plus Python 3.10+) |
| GitHub | aws/bedrock-agentcore-starter-toolkit | aws/agentcore-cli |
| Core verbs | configure, launch/deploy, invoke, status, destroy | create, dev, deploy, invoke, status, add, remove, logs, traces |
| Build infra | AWS CodeBuild (default) / local Docker | AWS CDK + CloudFormation |
| Config files | .bedrock_agentcore.yaml + generated Dockerfile | agentcore/agentcore.json, aws-targets.json, .env.local |
The toolkit's README now marks itself (legacy) and points users to the new AgentCore CLI.
Legacy starter toolkit — the configure → launch → invoke flow:
pip install bedrock-agentcore-starter-toolkit
agentcore configure -e my_agent.py # writes .bedrock_agentcore.yaml + Dockerfile
agentcore launch # default: AWS CodeBuild, no local Docker
agentcore invoke '{"prompt":"Hello"}'
agentcore status # agent ARN, endpoint, log group
agentcore destroy --force # teardownNew AgentCore CLI — the create → dev → deploy → invoke flow:
npm install -g @aws/agentcore
agentcore create --name MyAgent --framework Strands --protocol HTTP --model-provider Bedrock --memory none
cd MyAgent
agentcore dev # hot-reload server + inspector on :8080
agentcore deploy # package + CDK synth + CloudFormation deploy
agentcore invoke "Tell me a joke" # --stream, --session-id, --runtime
agentcore status; agentcore logs; agentcore traces list
agentcore remove all && agentcore deploy # teardownNote the launch vs deploy wrinkle even within the legacy tool: the devguide and the Python Runtime API use launch / .launch(), while the current starter-toolkit CLI (v0.3.x) renamed the verb to deploy (with destroy for teardown) — same operation, different word. The Python method always stays .launch().
Watch out
Pin which CLI a tutorial assumes
If a guide says agentcore configure it is the legacy Python toolkit; if it says agentcore create it is the new npm CLI. Mixing them — agentcore configure then agentcore deploy, or agentcore create then agentcore launch — fails because the verbs belong to different tools. Decide which CLI you're following and stick to it for the whole walkthrough.
Tip
Prereqs differ, and that bites first
The legacy toolkit needs only Python ≥3.10. The new CLI needs Node.js 20+ AND Python 3.10+, plus AWS CDK with cdk bootstrap already run in the target account/region — a fresh account that skips cdk bootstrap will fail the first agentcore deploy.
Both CLIs wrap the same SDK and deploy to the same Runtime
Despite the different verbs, both CLIs are thin orchestration over the same two things: the bedrock-agentcore Python SDK that wraps your agent, and the same serverless AgentCore Runtime they deploy it to. The CLI you pick changes the developer experience and the build/deploy plumbing (CodeBuild vs CDK/CloudFormation), not the artifact or where it runs.
The invariant in every case is the SDK wrapper. You turn a plain function into the Runtime's HTTP service contract with BedrockAgentCoreApp, @app.entrypoint, and app.run():
from bedrock_agentcore import BedrockAgentCoreApp
app = BedrockAgentCoreApp()
@app.entrypoint
def invoke(payload):
user_message = payload.get("prompt", "")
# ... call your framework / model here ...
return {"result": f"You said: {user_message}"}
if __name__ == "__main__":
app.run() # binds 0.0.0.0:8080; serves /invocations + /pingThis exact my_agent.py is what the legacy toolkit points agentcore configure -e my_agent.py at, and it is the same SDK the new CLI scaffolds for you with agentcore create. Both then deploy to the identical serverless Runtime, which gives you per-session isolation, autoscaling, and CloudWatch logging regardless of which CLI pushed the build.
The build paths differ but converge:
┌─ legacy toolkit ─ configure/launch ─→ CodeBuild → ARM64 image / CodeZip ─┐
your agent ──▶│ (bedrock-agentcore SDK wrapper) ├─▶ same AgentCore Runtime
└─ new CLI ──────── create/dev/deploy ─→ CDK → CloudFormation ─────────────┘Practical consequence: your agent code is portable across the two CLIs. If you start on the legacy toolkit and later move to the new CLI (or vice-versa), the BedrockAgentCoreApp entrypoint doesn't change — only the surrounding config files and the deploy command do. That portability is exactly why understanding the SDK matters more than memorizing either CLI's flags.
Key insight
One artifact, two front doors
Think of the bedrock-agentcore SDK as the contract and the Runtime as the destination. The two CLIs are just different front doors to the same building: the legacy toolkit drives CodeBuild, the new CLI drives CDK/CloudFormation, but both deliver the same SDK-wrapped agent to the same serverless Runtime endpoint.
How to read a [VOLATILE] fact without getting burned
Half of "setup" knowledge in a fast-moving service is facts that expire: pricing, region lists, GA dates, preview-vs-GA status, SDK/CLI versions, and model IDs. The dossier tags every one of these [VOLATILE]. The professional discipline is a three-step rule:
-
Learn the concept, not the number. Know that Runtime bills on active vCPU-hours + GB-hours excluding I/O wait — not the exact dollar figure. Know that there's a regions page — not the exact count today.
-
Cite the official live source. Every volatile claim should travel with the canonical AWS URL so anyone (including future-you) can re-check it. Bookmark the four that matter most:
textPricing https://aws.amazon.com/bedrock/agentcore/pricing/ Regions https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/agentcore-regions.html Quotas https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/bedrock-agentcore-limits.html GA / What's New https://aws.amazon.com/about-aws/whats-new/2025/10/amazon-bedrock-agentcore-available/ -
Re-verify before you rely on it. Before a cost estimate, a region decision, a customer commitment, or pinning a package version, open the live page and confirm. Package versions are a classic example — as of writing the SDK reported
bedrock-agentcore1.13.0 and the starter toolkit 0.3.9, but those move; check PyPI before pinning.
There's also a stricter tier: facts marked UNVERIFIED in the dossier (e.g. the exact Policy GA date, which exists only in third-party reporting). For those, either omit them or hedge explicitly ("reportedly… — not confirmed in first-party docs"). Never launder an unverified rumor into an asserted fact.
A quick way to caption a volatile figure in your own notes or docs:
Runtime active compute ≈ $0.0895/vCPU-hr [as of <today's date>; VOLATILE — verify pricing page]That one-line habit — value, date, source, VOLATILE tag — is what separates an estimate a stakeholder can trust from a number that quietly goes stale.
Example
Spot the volatile claim
"AgentCore is in 9 regions and Runtime costs $0.0895 per vCPU-hour" packs two volatile facts (region count, rate) and zero sources — a reviewer should reject it. Rewrite: "AgentCore is available in several regions (verify the regions page) and Runtime bills per vCPU-hour and GB-hour of active compute; for the current rate see the pricing page."
Try it: Estimate a bill by pattern, then prove the two CLIs out
Goal: reason about cost without memorizing rates, confirm the volatile facts against live AWS pages, and see firsthand that both CLIs target the same SDK and Runtime.
-
Classify by pattern. For a hypothetical agent that (a) runs a code-analysis tool, (b) is fronted by a Gateway exposing 30 tools, and (c) remembers user preferences across sessions, list which of the five pricing patterns each part falls under (active compute / per-request / per-record / pass-through / free-preview). Don't look up any rate yet — just classify.
-
Verify the volatile numbers. Open https://aws.amazon.com/bedrock/agentcore/pricing/ and fill in the current vCPU-hour, GB-hour, Gateway-per-1k-invocations, and Memory-per-1k-events rates. Write each as
value [as of <today>, source: pricing page]. Note anything that differs from the research-time ballparks in this lesson. -
Confirm regions and GA. Open the regions page and the What's New GA post. Record how many regions are listed today, whether us-east-1 and us-west-2 are present, and the GA date. Flag any region that has appeared since the 9 listed in this lesson.
-
Install and identify both CLIs. In a scratch environment,
pip install bedrock-agentcore-starter-toolkitandnpm install -g @aws/agentcore. Runagentcore --helpfor each and capture the verb list. Confirm that the legacy tool showsconfigure/launch(ordeploy)/invokeand the new one showscreate/dev/deploy/invoke. -
Wrap one agent, two ways (no deploy needed). Write a minimal
my_agent.pyusingBedrockAgentCoreApp,@app.entrypoint, andapp.run(). Point the legacy toolkit at it withagentcore configure -e my_agent.py -r us-west-2and inspect the generated.bedrock_agentcore.yaml. Separately runagentcore create --name MyAgent --framework Strands --defaultswith the new CLI and inspect itsagentcore/agentcore.json. Confirm both reference the same SDK wrapper concept even though the config files differ. -
Reflect (3-4 sentences). Which pricing pattern would dominate the bill for your hypothetical agent, and why? Which two numbers in this lesson were most out of date when you checked the live pages? And if a colleague pasted
agentcore configurefollowed byagentcore deploy, what would you tell them?
Key takeaways
- 1AgentCore is consumption-based with no upfront commitment; ~12 billable components reduce to 5 patterns: per-session active compute, per-request, per-record, pass-through, and free/preview. Learn the pattern, link the live pricing page — never memorize a rate.
- 2Active compute (Runtime, Browser, Code Interpreter) bills on vCPU-hours + GB-hours, per-second with a 1s and 128 MB minimum, and crucially EXCLUDES I/O wait — so time spent waiting on models/tools isn't billed. Identity is free behind Runtime/Gateway; Observability and Payments are pass-through.
- 3Regions and GA dates are volatile: GA was Oct 13 2025 across the original modules, with ~9 regions at GA. Verify the live regions page; course examples default to us-east-1 / us-west-2.
- 4Two CLIs both ship an `agentcore` binary with DIFFERENT verbs: legacy Python `bedrock-agentcore-starter-toolkit` (`configure`/`launch`/`invoke`/`status`/`destroy`) vs new npm `@aws/agentcore` (`create`/`dev`/`deploy`/`invoke`/`status`). Pin which CLI a tutorial assumes; mixing verbs fails.
- 5Both CLIs wrap the agent with the same `bedrock-agentcore` Python SDK (`BedrockAgentCoreApp`, `@app.entrypoint`, `app.run()`) and deploy to the same serverless Runtime. Only the build/deploy plumbing differs (CodeBuild vs CDK/CloudFormation), so your agent code is portable across them.
- 6Read every [VOLATILE] fact with discipline: learn the concept, cite the official source URL, and re-verify before relying on a number. Omit or explicitly hedge anything marked UNVERIFIED (e.g. the Policy GA date).
Quiz
Lock in what you learned
Check your understanding
0 / 4 answered
1.A teammate sizes an AgentCore Runtime bill by multiplying the session's total wall-clock duration by the vCPU-hour and GB-hour rates. Why is this estimate too high?
2.You're following a tutorial that says to run `agentcore configure -e my_agent.py`, then a second tutorial whose next step is `agentcore deploy`. The deploy command errors. What's the most likely cause?
3.Which statement about the relationship between the two CLIs and the Runtime is correct?
4.A draft doc states: "AgentCore runs in 9 regions and Runtime costs $0.0895 per vCPU-hour." According to the volatile-fact discipline, what's the best fix?
Go deeper
Hand-picked sources to keep learning
THE source of truth for every rate and the Free Tier. All pricing numbers are volatile — verify here before any estimate.
The live region list. Confirm availability here rather than trusting a memorized list; examples default to us-east-1 / us-west-2.
GA announcement (Oct 13 2025) and the modules that reached GA; the canonical place to confirm the GA timeline.
Official walkthrough for the new @aws/agentcore CLI: create / dev / deploy / invoke, CDK prerequisites.
The legacy Python toolkit (configure/launch/invoke). Check the current version here — package versions are volatile.
The shared agent-wrapper SDK both CLIs use (BedrockAgentCoreApp, @app.entrypoint). Verify the current version before pinning.