Platform Deep Dives

Running Claude on Two Clouds: When Multi-Platform Makes Sense

The same Claude models run on AWS, Google Cloud, and Azure, which makes multi-platform sound almost free. The code really is nearly identical. Everything around the code is where the bill arrives.

Claude 3P 101 · Updated July 2026 · Unofficial guide

Because Claude is available through Amazon Bedrock, Google Vertex AI, Microsoft Foundry, and Claude Platform on AWS, a genuinely portable deployment is possible in a way it rarely is with cloud services. Some organizations should use that option. Most should not, or not yet. This article lays out what actually stays the same across platforms, what quietly doubles, and the small set of situations where running Claude on two clouds earns its keep.

What genuinely stays the same

The application layer ports well. The official anthropic Python SDK covers all four platforms with different client classes but the same Messages API shape, so your prompts, tool definitions, and response handling carry over. Model behavior carries over too — Claude Sonnet 5 is the same model wherever you call it — so your evaluation results and prompt engineering remain valid. The visible differences are small: the client class you construct, the authentication it uses, and model IDs, which carry an anthropic. prefix on Bedrock only.

from anthropic import AnthropicBedrockMantle, AnthropicVertex

primary = AnthropicBedrockMantle(aws_region="us-east-1")
secondary = AnthropicVertex(project_id="my-project", region="global")

# Same request shape; only the client and model ID differ.
kwargs = dict(max_tokens=512,
              messages=[{"role": "user", "content": "Classify this ticket."}])
r1 = primary.messages.create(model="anthropic.claude-sonnet-5", **kwargs)
r2 = secondary.messages.create(model="claude-sonnet-5", **kwargs)

What quietly doubles

Everything operational exists once per cloud. Two identity and access regimes, with least-privilege policies written in two idioms. Two quota processes, each needing its own traffic model and lead time. Two audit-logging pipelines feeding your security team. Two private-networking setups, two cost dashboards, two sets of marketplace terms for procurement, and two platforms your on-call engineers must be able to debug at 3 a.m. None of these is enormous alone; together they are roughly a second platform's worth of ongoing ownership, paid monthly in attention.

There is also a functional cost: the feature gap. Batch API, Files API, and the built-in code execution and web tools are not available on Bedrock or Vertex AI. A truly portable application must restrict itself to the feature set both platforms share — the lowest common denominator — or accept that "failover" really means "failover for the subset of workloads that fit on both."

The three real reasons to do it

Redundancy. If a Claude-powered flow is genuinely critical — revenue stops or safety is affected when it is down — a second platform is a legitimate hedge against a platform-level incident or a regional capacity crunch. Be honest about criticality: an internal drafting assistant does not qualify. Procurement leverage. Committed-use discounts are negotiated with the cloud provider, not Anthropic. A credible ability to shift workloads strengthens your position in those negotiations, and Claude's multi-cloud availability makes the threat unusually credible. You are already multi-cloud. If an acquisition or history left you with real estates on two clouds, running Claude where each workload already lives is simpler than forcing everything through one cloud's platform.

Reasons that do not hold up: vague "vendor lock-in" anxiety (the SDK already keeps switching costs low without running both), and marginal price differences (list prices match across marketplaces).

Rule of thumb: default to one platform. Add a second only when you can name the concrete driver — a criticality tier that demands redundancy, a negotiation it will pay for, or an estate you already operate — and budget real ongoing engineering time for it, not just the initial setup.

If you do it, keep the abstraction thin

The tempting mistake is building a heavy internal abstraction layer over both platforms. Keep it minimal: a small routing layer that selects the client and maps the model ID, plus health checks and a documented failover procedure that you actually rehearse. Run a trickle of real traffic through the secondary continuously — a cold standby that has never served production traffic will not work when you need it. And keep evaluation suites running against both, so you notice if configuration drift makes the two paths behave differently.

Where to go next

The mechanics of moving workloads are covered in Switching Clouds: Porting Claude Workloads Between Platforms. If you are still choosing your first platform, start with the decision framework or the platforms overview.