Python Agent para Gateway
O gerador connection pode conectar seu Python Agent a um AgentCore Gateway.
O gerador configura o agente para que ele se autentique no Gateway com IAM SigV4 (via assinatura de requisição httpx) quando implantado, e se conecta ao gateway local iniciado pelo projeto Gateway quando executado localmente.
Pré-requisitos
Seção intitulada “Pré-requisitos”Antes de usar este gerador, certifique-se de ter:
- Um projeto Python com um componente Agent (
infra: agentcore) - Um projeto
agentcore-gateway
Executar o Gerador
Seção intitulada “Executar o Gerador”- Instale o Nx Console VSCode Plugin se ainda não o fez
- Abra o console Nx no VSCode
- Clique em
Generate (UI)na seção "Common Nx Commands" - Procure por
@aws/nx-plugin - connection - Preencha os parâmetros obrigatórios
- Clique em
Generate
pnpm nx g @aws/nx-plugin:connectionyarn nx g @aws/nx-plugin:connectionnpx nx g @aws/nx-plugin:connectionbunx nx g @aws/nx-plugin:connectionVocê também pode realizar uma execução simulada para ver quais arquivos seriam alterados
pnpm nx g @aws/nx-plugin:connection --dry-runyarn nx g @aws/nx-plugin:connection --dry-runnpx nx g @aws/nx-plugin:connection --dry-runbunx nx g @aws/nx-plugin:connection --dry-runSelecione o projeto do agente como origem e o projeto do Gateway como destino.
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
| sourceProject Obrigatório | string | - | O projeto de origem |
| targetProject Obrigatório | string | - | O projeto de destino para conectar |
| sourceComponent | string | - | O componente de origem para conectar (nome do componente, caminho relativo à raiz do projeto de origem, ou id do gerador). Use '.' para selecionar explicitamente o projeto como origem. |
| targetComponent | string | - | O componente de destino para conectar (nome do componente, caminho relativo à raiz do projeto de destino, ou id do gerador). Use '.' para selecionar explicitamente o projeto como destino. |
| preferInstallDependencies | boolean | true | Se deve preferir instalar dependências após a execução do gerador. Defina como false para adiar a instalação ao executar múltiplos geradores em lote (uma instalação ainda é executada se necessário para que os geradores subsequentes possam calcular o grafo de projetos Nx); instale uma vez no final. |
Saída do Gerador
Seção intitulada “Saída do Gerador”O gerador emite módulos compartilhados core-gateway em seu projeto Python agent_connection, além de um wrapper por Gateway, e modifica seu agente:
Directorypackages/common/agent_connection
Directory<scope>_agent_connection
Directorycore/
- agentcore_endpoints.py Resolução de ARN/URL independente de framework
- agentcore_gateway_mcp_transport.py Transporte MCP Gateway independente de framework
- agentcore_gateway_mcp_client_<framework>.py Cliente MCP Gateway para o framework do seu agente
Directoryauth/
httpx.AuthSigV4 / encaminhamento de sessão independente de framework- …
Directoryapp/
- <gateway_snake>_client_<framework>.py Wrapper de cliente por Gateway
- __init__.py Re-exporta o cliente do Gateway
O sufixo do cliente corresponde ao framework do seu agente (_strands ou _langchain).
Além disso, o gerador:
- Modifica o
agent.pydo seu agente para importar o cliente do Gateway e registrar suas ferramentas emtools - Adiciona
agent_connectioncomo uma dependência de workspace do agente - Conecta o alvo
<agent>-devdo agente para depender do alvodevdo Gateway
Usando o Gateway conectado
Seção intitulada “Usando o Gateway conectado”O gerador transforma o agent.py do seu agente para usar o cliente do Gateway:
from contextlib import contextmanagerfrom strands import Agent
from my_scope_agent_connection import MyGatewayClientStrands
@contextmanagerdef get_agent(): my_gateway = MyGatewayClientStrands.create() with ( my_gateway, ): yield Agent( system_prompt="...", tools=[*my_gateway.list_tools_sync()], )MyGatewayClientStrands.create() retorna um único MCPClient gerenciável por contexto cujo list_tools_sync() produz todas as ferramentas disponíveis através do Gateway.
from langchain.agents import create_agentfrom langchain_aws import ChatBedrockConverse
from my_scope_agent_connection import MyGatewayClientLangChain
def get_agent(): my_gateway = MyGatewayClientLangChain.create() return create_agent( model=ChatBedrockConverse(model=MODEL_ID, region_name=REGION), system_prompt="...", tools=[*my_gateway], )MyGatewayClientLangChain.create() retorna uma lista de ferramentas carregadas via langchain-mcp-adapters. Cada ferramenta abre uma nova sessão por chamada, então nenhum bloco with é necessário.
Em ambos os casos, o cliente se comporta da mesma forma por modo:
- Modo implantado (
LOCAL_DEVnão definido): ferramentas apontadas para o endpoint MCP do Gateway, assinado com SigV4. - Modo local (
LOCAL_DEV=true): ferramentas HTTP simples apontadas para o gateway local iniciado pelo alvodevdo projeto Gateway.
O ID da sessão é propagado para os servidores MCP downstream automaticamente via o cabeçalho X-Amzn-Bedrock-AgentCore-Runtime-Session-Id.
Infraestrutura
Seção intitulada “Infraestrutura”Após executar o gerador, você deve conceder ao agente permissão para invocar o Gateway.
const gateway = new MyGateway(this, 'MyGateway');const myAgent = new MyAgent(this, 'MyAgent');
// Grant the agent permissions to invoke the Gatewaygateway.grantInvokeAccess(myAgent);A URL do Gateway é automaticamente registrada no namespace agentcore.gateways.<ClassName> da Runtime Configuration pelo construto CDK gerado, para que o agente possa descobri-la em tempo de execução.
module "my_gateway" { source = "../../common/terraform/src/app/gateways/my-gateway"}
module "my_agent" { source = "../../common/terraform/src/app/agents/my-agent"}
# Grant the agent permission to invoke the Gatewayresource "aws_iam_policy" "agent_invoke_gateway" { name = "AgentInvokeGatewayPolicy" policy = jsonencode({ Version = "2012-10-17" Statement = [{ Effect = "Allow" Action = "bedrock-agentcore:InvokeGateway" Resource = module.my_gateway.gateway_arn }] })}
resource "aws_iam_role_policy_attachment" "agent_invoke_gateway" { role = module.my_agent.agent_core_runtime_role_arn policy_arn = aws_iam_policy.agent_invoke_gateway.arn}A URL do Gateway é automaticamente registrada no namespace agentcore.gateways.<ClassName> da Runtime Configuration pelo módulo Terraform gerado, para que o agente possa descobri-la em tempo de execução.
Desenvolvimento Local
Seção intitulada “Desenvolvimento Local”O gerador configura o alvo dev do agente para:
- Iniciar o gateway local do Gateway conectado e todos os servidores MCP anexados
- Definir
LOCAL_DEV=truepara que o cliente gerado aponte para o gateway local em vez do Gateway implantado
Execute o agente localmente com:
pnpm nx <agent-name>-dev <project-name>yarn nx <agent-name>-dev <project-name>npx nx <agent-name>-dev <project-name>bunx nx <agent-name>-dev <project-name>Para executar o agente localmente contra o Gateway implantado (por exemplo, para exercitar políticas Cedar), use o target serve do agente. Sem LOCAL_DEV definido, o cliente resolve a URL do Gateway implantado a partir da configuração de runtime e assina solicitações SigV4 com suas credenciais AWS locais:
pnpm nx <agent-name>-serve <project-name>yarn nx <agent-name>-serve <project-name>npx nx <agent-name>-serve <project-name>bunx nx <agent-name>-serve <project-name>Fidelidade local
Seção intitulada “Fidelidade local”O gateway local substitui o Gateway implantado, então:
- Sem avaliação de política Cedar. Todas as ferramentas são visíveis para o agente independentemente das políticas. Use o alvo
servepara exercitar políticas contra o Gateway implantado. - A prefixação de nome de ferramenta é preservada. As ferramentas de cada servidor MCP local são expostas como
<target-name>___<tool-name>, correspondendo ao que o Gateway implantado emite. Isso mantém o prompt do sistema do agente e os nomes de ação Cedar que você referencia consistentes entre execuções locais e implantadas. tadas.