Why this page exists
The three 8-hour engineering courses share ~85% of their curriculum - that shared core is pages 6.1-6.7. What remains is the platform-specific 15%: how to enable, authenticate and call Claude inside AWS and GCP. Thirty minutes here saves you the classic first-week losses: the wrong region, the missing IAM action, the model ID that isn't quite the one in the docs.
Why cloud-hosted Claude at all 5 min
If api.anthropic.com works fine on your laptop, why do enterprises route through Bedrock or Vertex? Not for the model - it's the same Claude. For everything around it.
CoreThe five reasons enterprises pick the cloud front door5 min▶
- Data residency: requests are processed inside a cloud region you choose. When legal says "this data does not leave our region/account boundary", the cloud-hosted route is how you comply without a debate per project.
- Private networking: with VPC endpoints (AWS PrivateLink / GCP Private Service Connect), traffic to the model never touches the public internet - it stays on the cloud backbone inside your network perimeter. Security teams stop asking about egress.
- IAM-native auth: no API keys to issue, rotate, leak or revoke. Access is an IAM role/service account like every other cloud resource - your existing least-privilege review process just works, and CloudTrail/Cloud Audit Logs record who called what.
- Unified billing and commitments: Claude usage lands on the cloud bill you already have, counts toward negotiated marketplace spend commitments, and needs no new vendor onboarding through procurement.
- Compliance inheritance: the model endpoint sits inside the cloud's existing certification scope (the SOC/ISO/HIPAA-eligible machinery your auditors already accepted), which shortens security review from months to a form.
A bank's data science team prototyped happily on the first-party API for six weeks - then the production review asked three questions: does data leave our AWS account boundary? who holds the credentials? which bill does it land on? The Bedrock answers (no - VPC endpoint; nobody - IAM role; ours - consolidated billing) closed the review in one meeting. Same prompts, same model, different front door.
Claude on Amazon Bedrock 15 min
Three things to get right: model access in the console, IAM permissions, and the model ID format. Then two ways to call it.
CoreBedrock setup: access, IAM, model IDs5 min▶
- Enable model access: in the AWS console, Bedrock → Model access → request the Anthropic models you need. This is per-region - a model enabled in us-east-1 is NOT enabled in eu-west-1. "AccessDeniedException" on your first call is almost always this or the next bullet.
- IAM permissions: the caller's role needs
bedrock:InvokeModel(andbedrock:InvokeModelWithResponseStreamfor streaming) on the model resources. Scope the Resource to specific models rather than*- it's an easy least-privilege win and exactly what a security review checks. - Model IDs: Bedrock model IDs are not the first-party names. Current convention is the cross-region inference-profile prefix format - a geography prefix plus the Anthropic ID, e.g. the
us.anthropic.claude-...naming pattern - which lets AWS route your request across regions in that geography for capacity. IDs evolve with model releases: check the Bedrock console for the current ID rather than copying one from a blog post (including this one).
CoreCalling Claude on Bedrock, way 1: the Anthropic SDK4 min▶
The anthropic python package ships an AnthropicBedrock client. Auth comes from the standard AWS credential chain (env vars, SSO profile, instance role) - no API key. Everything after the constructor is the same messages.create you know from 6.1.
CoreCalling Claude on Bedrock, way 2: boto3 converse4 min▶
The AWS-native route: boto3 with the bedrock-runtime service and the converse API - one uniform request shape across every Bedrock model, Claude included. Note the shape differences: content is a list of blocks with a text key, system is a list, and generation params live in inferenceConfig.
Which way? The Anthropic SDK if your team lives in Anthropic's docs and wants code that stays close to 6.1-6.7 (and ports to first-party or Vertex with one line changed). The converse API if you're an AWS-native shop that wants one client, one IAM story and one request shape across all Bedrock models. Both are production-grade; pick one per codebase and stop.
CoreWhat's identical vs different on Bedrock4 min▶
The point of this table is relief: your 6.1-6.7 knowledge transfers almost entirely. What changes is the plumbing around the call, not the call.
| Aspect | First-party API | Bedrock |
|---|---|---|
| Messages, system prompts, multi-turn | Yes | Identical |
| Tool use, streaming, vision | Yes | Identical shapes |
| Auth | x-api-key header | SigV4 via IAM roles - no API keys |
| Model IDs | claude-sonnet-... style names | Inference-profile IDs (us.anthropic.... style) |
| Availability | One global endpoint | Per-region: access, models and quotas all vary |
| Quotas & limits | Anthropic rate limits | AWS service quotas - raise via the console |
| Newest features | Land here first | Some features lag the first-party API |
| Logging & audit | Your own | CloudTrail, CloudWatch out of the box |
Vertex AI, lanes, and portability 10 min
Vertex is the same story with GCP nouns: Model Garden instead of Model access, service accounts instead of IAM roles, an @-versioned model name instead of an inference profile.
AdvancedVertex AI setup and the AnthropicVertex client4 min read▶
- Enable: in the GCP console, find Claude in the Vertex AI Model Garden and enable it for your project. As with Bedrock, availability is per-region - pick a region that hosts the model you want.
- Auth: Application Default Credentials - a service account with the Vertex AI user role, or your gcloud login locally. No API keys here either.
- Model names: Vertex uses an @-version convention - a name like
claude-sonnet-5@plus a version marker. Same caveat as Bedrock: names evolve, check the Model Garden page for the current one.
Notice what didn't change: messages.create, the message shapes, tool use, streaming. The Anthropic SDK makes the three front doors nearly interchangeable at the code level - which is exactly what the portability card below exploits.
CoreChoosing your lane3 min▶
- First-party API: fastest access to new models and features, simplest setup (one API key). The default for prototypes, evals and anything that hasn't met a security review yet.
- Bedrock: the choice when you're an AWS shop - IAM auth, VPC endpoints, CloudTrail, AWS billing. Production workloads that touch governed data belong here.
- Vertex: the same argument for GCP estates. If your data lives in BigQuery and your workloads run on GKE, Vertex keeps Claude inside that perimeter.
Our context makes this a short conversation: the estate is AWS, and the WorkSpaces reality from Session 5 means our production workloads already live inside AWS-managed boundaries with IAM everywhere. So Bedrock is our production lane - private networking, roles instead of keys, usage on the AWS bill. The first-party API stays in the toolkit for prototyping and for trying features before they reach Bedrock. Build on first-party, ship on Bedrock.
AdvancedMigration notes: keeping code portable3 min read▶
Since prototype and production live on different front doors, make switching a config change, not a refactor:
- Thin wrapper over the client: exactly one function in the codebase constructs a client. Business logic imports the wrapper, never a provider class.
- Model ID as config: IDs differ per provider (claude-sonnet-... vs us.anthropic.... vs ...@version), so they live in env vars or config files - never hardcoded in application code.
- No provider-specific params in business logic: stick to the shared surface (messages, system, max_tokens, tools, streaming). Anything provider-specific stays inside the wrapper, behind a comment explaining why.
Try it yourself ◐ 3 exercises
- 1 · Same prompt, two front doors. Run one identical prompt via the first-party client and via AnthropicBedrock. Diff the two scripts: the delta should be the constructor line and the model ID, nothing else. If more changed, your code has provider details where they don't belong.
- 2 · Least-privilege IAM. Create an IAM role whose policy allows
bedrock:InvokeModelon exactly ONE model resource. Verify the happy path works, then try a different model ID and confirm the AccessDenied - now you've seen the guardrail from both sides. - 3 · The PROVIDER switch. Wrap client creation behind the CLAUDE_PROVIDER env var (factory above), run the same script with anthropic and bedrock values, and confirm identical behavior. Commit the wrapper - it's the first file of your production lane.
Official courses covered
This page covers the platform-specific setup and access modules of the two cloud courses at claude.com/resources/courses; their shared-core modules are pages 6.1-6.7.