Ir al contenido

AgentCore Gateway a Agent

El generador connection puede registrar un agente (ya sea TypeScript o Python) como un destino de tiempo de ejecución de AgentCore de un AgentCore Gateway generado con protocol: http.

Una vez conectado, el Gateway redirige las solicitudes para el agente bajo <gatewayUrl>/<targetName>/invocations, firmando el tráfico saliente al tiempo de ejecución con IAM SigV4. Esto proporciona a tus agentes un único punto de entrada gobernado — y dado que los llamadores solo necesitan alcanzar el Gateway, los tiempos de ejecución de los agentes pueden ser desplegados dentro de una VPC detrás de él.

Antes de usar este generador, asegúrate de tener:

  1. Un proyecto agentcore-gateway generado con protocol: http
  2. Un componente de agente (ts#agent o py#agent) creado con infra: agentcore. Funciona tanto auth: iam (el Gateway lo invoca con su propio rol) como auth: cognito (el Gateway reenvía el JWT del llamador — ver Reenvío de identidad del llamador al tiempo de ejecución).
  1. Instale el Nx Console VSCode Plugin si aún no lo ha hecho
  2. Abra la consola Nx en VSCode
  3. Haga clic en Generate (UI) en la sección "Common Nx Commands"
  4. Busque @aws/nx-plugin - connection
  5. Complete los parámetros requeridos
    • Haga clic en Generate

    Selecciona el proyecto Gateway como origen y el proyecto del agente como destino. Si el proyecto del agente contiene múltiples componentes, especifica targetComponent para desambiguar.

    ParámetroTipoPredeterminadoDescripción
    sourceProject Requeridostring-El proyecto de origen
    targetProject Requeridostring-El proyecto de destino al que conectar
    sourceComponent string-El componente de origen desde el que conectar (nombre del componente, ruta relativa a la raíz del proyecto de origen, o id del generador). Use '.' para seleccionar explícitamente el proyecto como origen.
    targetComponent string-El componente de destino al que conectar (nombre del componente, ruta relativa a la raíz del proyecto de destino, o id del generador). Use '.' para seleccionar explícitamente el proyecto como destino.
    preferInstallDependencies booleantrueSi se prefiere instalar las dependencias después de que se ejecute el generador. Establecer en false para diferir la instalación al ejecutar múltiples generadores en lote (la instalación aún se ejecuta si es necesario para que los generadores subsiguientes puedan calcular el grafo de proyectos de Nx); instalar una vez al final.

    El generador conecta proyectos existentes en lugar de emitir nuevos archivos fuente. Los siguientes archivos son modificados:

    • Directoriopackages/<gateway>
      • project.json el destino dev del Gateway gana una dependencia en el <agent>-dev del agente
      • local-dev.ts ATTACHED_AGENTS actualizado para que el gateway local redirija al agente

    El generador no puede conectar automáticamente el destino del agente en tu infraestructura porque no sabe qué stack o módulo instancia el Gateway. Agrega una única llamada a gateway.addAgent(agent) tú mismo.

    En el stack donde instancias el Gateway, registra el agente como un 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 sobrescribir el nombre de destino predeterminado, pasa gatewayTargetName:

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

    El constructo otorga al rol de ejecución del Gateway acceso de invocación al tiempo de ejecución del agente y configura el destino con el proveedor de credenciales GATEWAY_IAM_ROLE, por lo que el Gateway firma las llamadas salientes con su propio rol.

    Las solicitudes a <gatewayUrl origin>/<targetName>/invocations se reenvían al tiempo de ejecución del agente sin traducción de protocolo, por lo que los llamadores usan la misma forma de solicitud que usarían contra el tiempo de ejecución directamente — streams SSE (AG-UI), streaming JSON (Python HTTP) y A2A JSON-RPC todos se redirigen a través. Los llamadores se autentican con el Gateway (IAM SigV4 o Cognito JWT dependiendo del auth del Gateway) en lugar de con el agente.

    Para conectar un sitio web a los agentes del Gateway, usa el generador de conexión de sitio web React a AgentCore Gateway.

    Reenvío de identidad del llamador al tiempo de ejecución

    Sección titulada «Reenvío de identidad del llamador al tiempo de ejecución»

    Por defecto, el Gateway firma las llamadas salientes con su propio rol de IAM (el proveedor de credenciales GATEWAY_IAM_ROLE), por lo que el tiempo de ejecución ve la identidad del Gateway, no la del llamador. Si en cambio deseas que el agente autorice en función del llamador — por ejemplo, para leer las reclamaciones sub o scope del usuario — antepón un Gateway Cognito a un agente Cognito. El Gateway entonces reenvía el JWT del llamador al tiempo de ejecución sin cambios (el proveedor de credenciales JWT_PASSTHROUGH), y el tiempo de ejecución lo revalida.

    Genera ambos extremos con auth: cognito y conéctalos como se indicó anteriormente:

    • un agente (ts#agent o py#agent) creado con auth: cognito, y
    • un Gateway creado con auth: cognito que frontaliza el mismo grupo de usuarios de Cognito.

    Todo lo demás es automático — gateway.addAgent(agent) (CDK) y el módulo de tiempo de ejecución de Terraform generado manejan el cableado por ti según el auth del agente:

    • el destino se crea con el proveedor de credenciales JWT_PASSTHROUGH (en lugar de GATEWAY_IAM_ROLE), y
    • el tiempo de ejecución incluye en la lista permitida el encabezado Authorization para que el token reenviado llegue a tu código de agente. Sin esta lista permitida, AgentCore valida el token pero elimina el encabezado antes de tu contenedor.

    Los llamadores invocan el Gateway con Authorization: Bearer <jwt> (sin SigV4), y el agente lee las reclamaciones del encabezado Authorization — omitiendo la validación de firma, ya que el autorizador de entrada del tiempo de ejecución ya ha verificado el 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'], ...

    Ejecutar el Gateway localmente con:

    Terminal window
    pnpm nx dev <gateway-name>

    inicia un gateway local más cada agente adjunto en su puerto local asignado. El gateway local redirige las rutas /<targetName>/... al servidor local de cada agente, coincidiendo con el enrutamiento basado en rutas del Gateway desplegado.