Deux agents ADK qui coopèrent en A2A, privés sur Cloud Run
Faire coopérer un agent « commandes » et un agent « stock » avec le protocole A2A : test local sur deux ports, puis deux services Cloud Run privés où seul le compte de service de l'un peut appeler l'autre, avec des jetons d'identité ; enfin tout supprimer.
Deux agents ADK qui coopèrent en A2A, privés sur Cloud Run
Une équipe ventes a un agent qui prépare des devis. Une équipe logistique a un agent qui connaît le stock. Elles ne partagent ni leur code ni leurs bases : elles veulent que leurs agents se parlent par un protocole standard, chacun restant déployé, sécurisé et maintenu par son équipe. C'est exactement le rôle du protocole A2A (Agent2Agent).
Pour qui ?
Niveau expert : vous maîtrisez ADK (agents, outils, runner), Cloud Run et les bases d'IAM. Vous voulez une architecture multi-agents répartie, où l'appel entre agents est authentifié.
Ce que vous construisez
flowchart LR U["Client (vous, avec un jeton d'identité)"] -->|"A2A JSON-RPC SendMessage"| C["Cloud Run lab-a2a-commandes (privé) : agent_commandes"] C -->|"A2A + jeton du compte lab-a2a-commandes"| S["Cloud Run lab-a2a-stock (privé) : agent_stock"] X["Tout autre appelant"] -.->|"403"| S C --> V["Vertex AI Gemini"] S --> V
Prérequis
- Python 3.10+,
gcloudconnecté, un projet avec les APIrun,aiplatform,cloudbuild,artifactregistry. - ADK 2.10 avec l'extra A2A (
pip install "google-adk[a2a]==2.10.0"), qui installea2a-sdk(1.2.2 lors de nos tests). - Le code : files/ — deux agents, un client A2A, des tests, un
Dockerfile,deployer.sh,nettoyer.sh.
Programme
| Module | Leçon | Ce que vous faites |
|---|---|---|
| 1. Cas d'usage et architecture | Deux agents, un protocole | A2A, carte d'agent, tâches ; sous-agent local ou agent distant |
| 2. Construire pas à pas | L'agent stock exposé en A2A | to_a2a, carte d'agent, URL annoncée |
| L'agent commandes et le test sur 2 ports | RemoteA2aAgent, AgentTool, client JSON-RPC | |
| 3. Déployer et tester | Deux services privés et une seule autorisation | une image, deux comptes de service, run.invoker, jeton d'identité |
| Tester de bout en bout et nettoyer | appel réel, propagation IAM, journaux, suppression |
En local ou sur GCP ?
| En local (obligatoire d'abord) | Sur GCP | |
|---|---|---|
| Agents | 2 processus uvicorn, ports 8001 et 8002 | 2 services Cloud Run |
| Transport | http://localhost | HTTPS, URL *.run.app |
| Authentification | aucune | jeton d'identité Google, vérifié par Cloud Run |
| Coût | appels Gemini | + Cloud Build, Artifact Registry, Cloud Run à la requête (ordre de grandeur : quelques centimes) |
الموارد
- example.env.example1 KB
- pyclient_a2a.py2 KBعرض
- pycommandes_agent.py4 KBعرض
- shdeployer.sh3 KBعرض
- shnettoyer.sh1 KBعرض
- txtrequirements.txt1 KBعرض
- pystock_agent.py2 KBعرض
- pytest_a2a.py3 KBعرض
المراجع
- ADK : Agent2Agent (A2A)google.github.io
- ADK : exposer un agent en A2A (démarrage rapide)google.github.io
- Spécification du protocole A2Aa2a-protocol.org
- Cloud Run : authentification de service à servicecloud.google.com
- Cloud Run : URL des services (format déterministe)cloud.google.com
- IAM : délai de propagation des changements d'accèscloud.google.com
- google/adk-python (code source d'ADK)github.com