Pular para o conteúdo

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 conecte ao gateway local iniciado pelo projeto Gateway quando executado localmente.

Antes de usar este gerador, certifique-se de ter:

  1. Um projeto Python com um componente Agent (infra: agentcore)
  2. Um projeto agentcore-gateway com auth: iam

O Gateway deve usar autenticação IAM — o agente assina suas requisições com SigV4 usando sua própria função de execução. O gerador rejeita gateways autenticados com Cognito.

Terminal window
pnpm nx g @aws/nx-plugin:connection
Você também pode realizar uma execução simulada para ver quais arquivos seriam alterados
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

Selecione o projeto do agente como origem e o projeto Gateway como destino.

ParâmetroTipoPadrãoDescrição
sourceProject Obrigatóriostring-O projeto de origem
targetProject Obrigatóriostring-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 booleantrueSe 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.

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 Framework-agnostic ARN/URL resolution
        • agentcore_gateway_mcp_transport.py Framework-agnostic Gateway MCP transport
        • agentcore_gateway_mcp_client_<framework>.py Gateway MCP client for your agent’s framework
        • Directoryauth/ Framework-agnostic SigV4 / session-forwarding httpx.Auth
      • Directoryapp/
        • <gateway_snake>_client_<framework>.py Per-Gateway client wrapper
      • __init__.py Re-exports the Gateway client

O sufixo do cliente corresponde ao framework do seu agente (_strands ou _langchain).

Além disso, o gerador:

  • Modifica o agent.py do seu agente para importar o cliente Gateway e registrar suas ferramentas em tools
  • Adiciona agent_connection como uma dependência de workspace do agente
  • Configura o target <agent>-dev do agente para depender do target dev do Gateway

O gerador transforma o agent.py do seu agente para usar o cliente Gateway:

packages/example/example/my_agent/agent.py
from contextlib import contextmanager
from strands import Agent
from my_scope_agent_connection import MyGatewayClientStrands
@contextmanager
def 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.

Em ambos os casos, o cliente se comporta da mesma forma por modo:

  • Modo implantado (LOCAL_DEV não definido): ferramentas apontadas para o endpoint MCP do Gateway, assinadas com SigV4.
  • Modo local (LOCAL_DEV=true): ferramentas HTTP simples apontadas para o gateway local iniciado pelo target dev do projeto Gateway.

O ID da sessão é propagado automaticamente para servidores MCP downstream via o cabeçalho X-Amzn-Bedrock-AgentCore-Runtime-Session-Id.

Após executar o gerador, você deve conceder ao agente permissão para invocar o Gateway.

packages/infra/src/stacks/application-stack.ts
const gateway = new MyGateway(this, 'MyGateway');
const myAgent = new MyAgent(this, 'MyAgent');
// Grant the agent permissions to invoke the Gateway
gateway.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.

O gerador configura o target dev do agente para:

  1. Iniciar o gateway local do Gateway conectado e todos os servidores MCP anexados
  2. Definir LOCAL_DEV=true para que o cliente gerado aponte para o gateway local em vez do Gateway implantado

Execute o agente localmente com:

Terminal window
pnpm 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 tempo de execução e assina requisições com SigV4 usando suas credenciais AWS locais:

Terminal window
pnpm nx <agent-name>-serve <project-name>

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 target serve para exercitar políticas contra o Gateway implantado.
  • A prefixação de nomes de ferramentas é 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.