Build1 publisherNot yet confirmed elsewhere3 min readPublished
Three clouds, one protocol, no stored credentials: the runtime becomes a swappable part
A Bedrock AgentCore agent serving Google and Azure callers over A2A pushes the vendor-specific work into the container contract rather than the agent. The credential claim is the part not yet shown.
The Engineer · Build desk
What happened
- One research brief is answered by three agents on three clouds: Google ADK on Cloud Run, Azure Agent Framework on Container Apps, Strands on Bedrock AgentCore Runtime.
- A coordinator puts the identical question to all three and takes the median of the replies.
- Strands has no A2A server of its own, so the agent's respond function sits behind the a2a-sdk reference routes with no adapter and no event-stream translation.
- Four AgentCore container requirements depart from normal container practice: port 9000, exposed path /, a separate /ping, and ARM64 images only.
- A single deploy command builds the image, pushes to ECR, and creates the runtime plus both IAM roles.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- capability An agent written once can be re-hosted by rebuilding a container, because the calling side never held a vendor SDK to rewrite.
- cost Teams on x86 build pipelines pay a cross-compilation step before they can even attempt the swap, and that cost lands on whoever owns CI, not on the agent author.
- exposure The health probe payload silently governs session lifecycle: a helpful-looking timestamp field keeps microVMs alive to MaxLifetime, so an operator can leak capacity while every dashboard reads...
- constraint Nobody can lean on the credential-free property yet, because the negative controls that would prove the authenticated legs stop short in the published material.
The portable part of this build is one coroutine and a JSON document. A caller on Cloud Run or Container Apps imports no AWS SDK; it fetches `/.well-known/agent-card.json` and sends JSON-RPC over HTTP, and every leg of the mesh runs A2A v1.0 [9]. That is what turns the host into a component. The peer contract is the card, and the card can be served by anything.
Which is why the only genuine cross-cloud failure in the walkthrough is an address rather than a protocol. `PUBLIC_URL` cannot be baked into the image, because the card has to advertise the AgentCore invocations URL and that URL does not exist until the runtime ARN does. Omit it and the card offers `0.0.0.0:9000`, which the author reports as the defect that breaks Google ADK's own A2A client against a hosted server [12]. Interop broke in the metadata, one layer above everything the frameworks argue about.
The experimental design is worth reading closely. A predecessor project stood up six directed A2A edges between Bedrock AgentCore, Microsoft Foundry and Google ADK [14]. Six is the complete directed mesh for three participants, since each of the three calls the other two [17], so pairwise reachability was already settled; this run holds the work still and lets the cloud be the only thing that changes [14]. That is the difference between a demo and a control.
The coordinator's median is an admission about trust rather than a scoring convenience. With three answers, the middle one wins and a single outlier cannot set the result [18], so no vendor's runtime is authoritative inside the mesh. Design for that and a bad leg degrades the answer instead of deciding it.
The choice of AgentCore Runtime over Lambda is argued on shape: generic compute would have made the mesh two agent runtimes and a function [15]. What Runtime buys in exchange is per-session microVM isolation, identity and scaling, without caring whether the container holds Strands, LangGraph or CrewAI [4]. The framework indifference on the inside is what makes the container contract on the outside the only thing you have to learn.
The claim carrying the most weight is the one the published excerpt does not finish. The stated aim is three agents over one protocol with no stored credentials between them [1]. The article then turns to negative controls, on the argument that an authenticated leg is unproven without them, and the supplied text stops mid-command [8]. Until those runs are visible, the honest reading is buildable, not verified.
Cheap to check, at least. The agent is a Bedrock `nova-micro` model with a system prompt and one `web_search` tool [16], and the deploy path is a single command [13]. Nobody needs a large budget to find out whether the credential-free legs hold, which is the most useful property this project has.
What to watch
- Publication of the negative-control runs: whether the AWS leg actually refuses unsigned or wrong-audience calls, not just accepts signed ones.
- Whether a fourth host can be added to the mesh with no change to the coordinator, which is the real test of runtime swappability.
- Whether the three vendors' A2A clients stay compatible as the card schema moves past v1.0.
Clarity's read
What the record supports and how the coverage leans. The claims behind it follow.
Reality
- Evidence58
- Adoption20
- Hype gap+12
- Incentives48
- Confidence44
Claim ledger
Ranked by verification strength, evidence, and original report placement.
- [1]
The project's stated aim is to answer one research brief with three agents on three clouds, over one protocol, with no stored credentials between them.
ReportedSupportedSource: dev.to walkthrough, AWS Builders community2 sources— create a free account to open themView cited source - [2]
Google runs an ADK agent on Cloud Run, Azure runs an Agent Framework agent on Container Apps, and AWS runs a Strands agent on Bedrock AgentCore Runtime.
- [3]
A coordinator asks all three agents the same question and takes the median of what comes back.
- [4]
AgentCore Runtime is a serverless runtime that runs an agent container, isolates each session in its own microVM, and handles identity and scaling; it is framework agnostic, supporting Strands, LangGraph, CrewAI or custom code.
- [5]
AgentCore Runtime's container contract requires port 9000 rather than 8080, and the platform exposes path / to callers rather than the /invocations path the container serves.
- [6]
A /ping endpoint must be added and is not the same as an existing /health endpoint; a container that fails the ping never reaches the point of being invoked.
- [7]
ARM64 is required rather than preferred, so on an x86 host the image must be produced with docker buildx --platform linux/arm64.
- [8]
The write-up states that an authenticated leg is unproven without negative controls and that the deploy script carries them as a verb, and the supplied text breaks off mid-command before those controls or their results are shown.
- [9]
A2A is an open protocol in which an agent publishes a card at /.well-known/agent-card.json describing what it does and how to reach it, and speaks JSON-RPC over HTTP; this project runs A2A v1.0.
- [10]
Strands ships no A2A server integration, which the author calls the easiest starting position of the three frameworks: the respond function is dropped behind the a2a-sdk reference routes, serving the protocol's own implementation with no adapter and no event-stream translation.
- [11]
The ping response deliberately omits time_of_last_update, because a timestamp that advances on every poll reads as a continuous status change, which stops the idle session timeout from ever firing and leaks sessions until MaxLifetime.
- [12]
PUBLIC_URL has to be set after the runtime ARN exists so the agent card advertises the AgentCore invocations URL; leaving it out makes the card advertise 0.0.0.0:9000, which the author identifies as the defect that breaks Google ADK's own A2A client against a hosted server.
- [13]
One command builds the ARM64 image, pushes it to ECR, and creates the runtime and both IAM roles.
- [14]
The predecessor project put six directed A2A edges between Bedrock AgentCore, Microsoft Foundry and Google ADK; this project keeps the same brief, tool and rubric and lets the cloud be the only thing that moves.
- [15]
AgentCore Runtime was chosen over Lambda because hosting the agent on generic compute would have made the mesh two agent runtimes and a function.
- [16]
The AWS agent is a Strands Agent configured with BedrockModel us.amazon.nova-micro-v1:0, a system prompt, and a web_search tool.
- [17]
Six directed edges is the complete directed mesh for three participants, so the predecessor had already covered every ordered pair.
- [18]
Because the coordinator takes the median of three answers, a single outlier response cannot determine the output.
- [19]
Four of AgentCore Runtime's container requirements diverge from ordinary HTTP container defaults: port 9000 instead of 8080, exposed path / instead of /invocations, a mandatory /ping distinct from /health, and ARM64-only images.
Sources
1 independent publisher whose own reporting we read for this story.
- dev.toMix and Match: Serving a Bedrock Agent to Google and Azure
1 article · August 23, 2026
Topics and entities
Follow any of these and your For You feed starts watching them — no settings page required.