Pular para o conteúdo

AgentCore Gateway para Agent

O gerador connection pode registrar um agente (seja TypeScript ou Python) como um destino de Runtime do AgentCore de um AgentCore Gateway gerado com protocol: http.

Uma vez conectado, o Gateway faz proxy de requisições para o agente em <gatewayUrl>/<targetName>/invocations, assinando o tráfego de saída para o runtime com IAM SigV4. Isso dá aos seus agentes um único ponto de entrada governado — e como os chamadores só precisam alcançar o Gateway, os runtimes dos agentes podem ser implantados dentro de uma VPC atrás dele.

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

  1. Um projeto agentcore-gateway gerado com protocol: http
  2. Um componente de agente (ts#agent ou py#agent) criado com infra: agentcore. Tanto auth: iam (o Gateway o invoca com seu próprio papel) quanto auth: cognito (o Gateway encaminha o JWT do chamador — veja Encaminhando identidade do chamador) funcionam.
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 Gateway como origem e o projeto do agente como destino. Se o projeto do agente contém múltiplos componentes, especifique targetComponent para desambiguar.

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 conecta projetos existentes em vez de emitir novos arquivos de origem. Os seguintes arquivos são modificados:

  • Directorypackages/<gateway>
    • project.json o destino dev do Gateway ganha uma dependência no <agent>-dev do agente
    • local-dev.ts ATTACHED_AGENTS atualizado para que o gateway local faça proxy para o agente

O gerador não pode conectar automaticamente o destino do agente à sua infraestrutura porque ele não sabe qual stack ou módulo instancia o Gateway. Adicione uma única chamada a gateway.addAgent(agent) você mesmo.

Na stack onde você instancia o Gateway, registre o agente como um destino:

packages/infra/src/stacks/application-stack.ts
const myAgent = new MyAgent(this, 'MyAgent');
const myGateway = new MyGateway(this, 'MyGateway');
// Register the agent as a runtime target of the Gateway. The target name
// defaults to the agent's `agentName` (its class name in kebab-case,
// e.g. `MyAgent` -> `my-agent`), and forms the target's invocation path:
// <gatewayUrl>/my-agent/invocations
myGateway.addAgent(myAgent);

Para substituir o nome de destino padrão, passe gatewayTargetName:

myGateway.addAgent(myAgent, { gatewayTargetName: 'my-target' });

O construct concede ao papel de execução do Gateway acesso de invocação ao runtime do agente e configura o destino com o provedor de credenciais GATEWAY_IAM_ROLE, para que o Gateway assine chamadas de saída com seu próprio papel.

Requisições para <gatewayUrl origin>/<targetName>/invocations são encaminhadas para o runtime do agente sem tradução de protocolo, então os chamadores usam a mesma forma de requisição que usariam diretamente contra o runtime — streams SSE (AG-UI), streaming JSON (Python HTTP) e JSON-RPC A2A todos fazem proxy através. Os chamadores se autenticam com o Gateway (IAM SigV4 ou Cognito JWT dependendo do auth do Gateway) em vez de com o agente.

Para conectar um site aos agentes do Gateway, use o gerador connection.

Encaminhando identidade do chamador para o runtime

Seção intitulada “Encaminhando identidade do chamador para o runtime”

Por padrão, o Gateway assina chamadas de saída com seu próprio papel IAM (o provedor de credenciais GATEWAY_IAM_ROLE), então o runtime vê a identidade do Gateway, não do chamador. Se em vez disso você quiser que o agente autorize no chamador — por exemplo, para ler as claims sub ou scope do usuário — coloque um agente Cognito atrás de um Gateway Cognito. O Gateway então encaminha o JWT do chamador para o runtime inalterado (o provedor de credenciais JWT_PASSTHROUGH), e o runtime o revalida.

Gere ambas as extremidades com auth: cognito e conecte-as como acima:

  • um agente (ts#agent ou py#agent) criado com auth: cognito, e
  • um Gateway criado com auth: cognito na frente do mesmo user pool do Cognito.

Todo o resto é automático — gateway.addAgent(agent) (CDK) e o módulo de runtime Terraform gerado lidam com a conexão para você com base no auth do agente:

  • o destino é criado com o provedor de credenciais JWT_PASSTHROUGH (em vez de GATEWAY_IAM_ROLE), e
  • o runtime adiciona o cabeçalho Authorization à lista de permissões para que o token encaminhado alcance seu código de agente. Sem esta lista de permissões, o AgentCore valida o token mas remove o cabeçalho antes do seu container.

Os chamadores invocam o Gateway com Authorization: Bearer <jwt> (sem SigV4), e o agente lê as claims do cabeçalho Authorization — pulando a validação de assinatura, já que o autorizador de entrada do runtime já verificou o token:

packages/py_project/.../my_agent/main.py
import jwt # PyJWT
@app.post('/invocations')
async def invoke(input: InvokeInput, request: Request):
token = request.headers['authorization'].removeprefix('Bearer ')
claims = jwt.decode(token, options={'verify_signature': False})
# authorize on claims['sub'], claims['scope'], ...

Executar o Gateway localmente com:

Terminal window
pnpm nx dev <gateway-name>

inicia um gateway local mais cada agente anexado em sua porta local atribuída. O gateway local faz proxy de caminhos /<targetName>/... para o servidor local de cada agente, correspondendo ao roteamento baseado em caminho do Gateway implantado.