Configuración de una solicitud de integración de API de WebSocket en API Gateway - Amazon API Gateway

Configuración de una solicitud de integración de API de WebSocket en API Gateway

La configuración de una solicitud de integración implica lo siguiente:

  • Elegir una clave de ruta para integrarla en el backend.

  • Especificación del punto de conexión de backend que se va a invocar. Las API de WebSocket admiten los siguientes tipos de integración:

    • AWS_PROXY

    • AWS

    • HTTP_PROXY

    • HTTP

    • MOCK

    Para obtener más información sobre los tipos de integración, consulte IntegrationType en la API de REST de API Gateway V2.

  • Configurar cómo transformar los datos de la solicitud de ruta, si fuera necesario, en datos de solicitud de integración mediante la especificación de una o varias plantillas de solicitud.

Configuración de una solicitud de integración de la API de WebSocket mediante la consola de API Gateway

Para agregar una solicitud de integración a una ruta en una API de WebSocket mediante la consola de API Gateway
  1. Inicie sesión en la consola de API Gateway, elija la API y, a continuación, elija Routes (Rutas).

  2. En Routes (Rutas), elija la ruta.

  3. Elija la pestaña Solicitud de integración y, a continuación, en la sección Configuración de solicitud de integración, elija Editar.

  4. En Tipo de integración, seleccione una de las siguientes opciones:

    • Elija Función de Lambda solo si la API se va a integrar con una función de AWS Lambda que ya ha creado en esta cuenta o en otra.

      Para crear una nueva función de Lambda en AWS Lambda, establecer un permiso a nivel de recursos en la función de Lambda o realizar cualquier otra acción de servicio Lambda, elija Servicio de AWS en su lugar.

    • Elija HTTP si la API se va a integrar con un punto de enlace HTTP existente. Para obtener más información, consulte Configurar integraciones HTTP en API Gateway.

    • Elija Mock (Simulación) si desea generar respuestas de la API directamente a partir de API Gateway, sin necesidad de un backend de integración. Para obtener más información, consulte Configurar integraciones simuladas en API Gateway.

    • Elija Servicio de AWS si la API se va a integrar directamente con un servicio de AWS.

    • Elija Enlace de VPC si la API va a utilizar un VpcLink como un punto de conexión de integración privada. Para obtener más información, consulte Configurar integraciones privadas de API Gateway.

  5. Si elige Función de Lambda, proceda de la forma siguiente:

    1. En Usar la integración de proxy Lambda, elija la casilla si piensa usar la Integración de proxy Lambda o la Integración de proxy Lambda entre cuentas.

    2. En Función de Lambda, especifique la función de una de las siguientes formas:

      • Si la función de Lambda está en la misma cuenta, ingrese el nombre de la función y, a continuación, seleccione la función de la lista desplegable.

        nota

        Si lo desea, el nombre de la función puede incluir su alias o especificación de versión, como en HelloWorld, HelloWorld:1 o HelloWorld:alpha.

      • Si la función se encuentra en una cuenta diferente, escriba el ARN de la función.

    3. Si desea utilizar el valor predeterminado del tiempo de espera, que es de 29 segundos, mantenga activado el Tiempo de espera predeterminado. Para establecer un tiempo de espera personalizado, elija Tiempo de espera predeterminado e ingrese un valor de tiempo de espera comprendido entre 50 y 29000 milisegundos.

  6. Si ha elegido HTTP, siga las instrucciones del paso 4 que figuran en Configuración de una solicitud de integración de la API mediante la consola de API Gateway.

  7. Si ha elegido Mock (Simulación), continúe con el paso Request Templates (Plantillas de solicitud).

  8. Si elige Servicio de AWS, siga las instrucciones del paso 6 que figuran en Configuración de una solicitud de integración de la API mediante la consola de API Gateway.

  9. Si elige Enlace de VPC, haga lo siguiente:

    1. En Integración de proxy VPC, elija la casilla si desea que sus solicitudes se transfieran por proxy al punto de conexión del VPCLink.

    2. En HTTP method (Método HTTP), elija el tipo de método HTTP que más se parezca al método del backend HTTP.

    3. En la lista desplegable Enlace de VPC, seleccione un enlace de VPC. Puede seleccionar [Use Stage Variables] e ingresar ${stageVariables.vpcLinkId} en el cuadro de texto situado debajo de la lista.

      Puede definir la variable de etapa vpcLinkId después de implementar la API en una etapa y establecer su valor en el ID del VpcLink.

    4. En Endpoint URL (URL del punto de enlace), escriba la dirección URL del backend HTTP que desea que utilice esta integración.

    5. Si desea utilizar el valor predeterminado del tiempo de espera, que es de 29 segundos, mantenga activado el Tiempo de espera predeterminado. Para establecer un tiempo de espera personalizado, elija Tiempo de espera predeterminado e ingrese un valor de tiempo de espera comprendido entre 50 y 29000 milisegundos.

  10. Elija Guardar cambios.

  11. En Plantillas de solicitud, haga lo siguiente:

    1. Para ingresar una Expresión de selección de plantillas, en Plantillas de solicitud, elija Editar.

    2. Ingrese una Expresión de selección de plantillas. Use una expresión que API Gateway busque en la carga del mensaje. Si la encuentra, se evalúa y el resultado es un valor de clave de plantilla que se utiliza para seleccionar la plantilla de asignación de datos que debe aplicarse a los datos de la carga del mensaje. En el siguiente paso se crea la plantilla de mapeo de datos. Elija Editar para guardar los cambios.

    3. Elija Crear plantilla para crear la plantilla de mapeo de datos. En Clave de plantilla, ingrese el valor de clave de plantilla que se utiliza para seleccionar la plantilla de mapeo de datos que debe aplicarse a los datos de la carga del mensaje. A continuación, ingrese una plantilla de mapeo. Seleccione Crear plantilla.

      Para obtener información sobre las expresiones de selección de plantillas, consulte Expresiones de selección de plantilla.

Configurar una solicitud de integración mediante la AWS CLI

Puede utilizar la AWS CLI para configurar una solicitud de integración para una ruta en una API de WebSocket tal y como se muestra en el siguiente ejemplo, que crea una integración simulada:

  1. Cree un archivo denominado integration-params.json con el siguiente contenido:

    {"PassthroughBehavior": "WHEN_NO_MATCH", "TimeoutInMillis": 29000, "ConnectionType": "INTERNET", "RequestTemplates": {"application/json": "{\"statusCode\":200}"}, "IntegrationType": "MOCK"}
  2. Ejecute el comando create-integration como se muestra en el siguiente ejemplo:

    aws apigatewayv2 --region us-east-1 create-integration --api-id aabbccddee --cli-input-json file://integration-params.json

A continuación, se muestra la salida de muestra de este ejemplo:

{ "PassthroughBehavior": "WHEN_NO_MATCH", "TimeoutInMillis": 29000, "ConnectionType": "INTERNET", "IntegrationResponseSelectionExpression": "${response.statuscode}", "RequestTemplates": { "application/json": "{\"statusCode\":200}" }, "IntegrationId": "0abcdef", "IntegrationType": "MOCK" }

También puede configurar una solicitud de integración para una integración de proxy mediante la AWS CLI como se muestra en el siguiente ejemplo:

  1. Cree una función de Lambda en la consola de Lambda y asígnela un rol de ejecución de funciones Lambda básico.

  2. Ejecute el comando create-integration como en el siguiente ejemplo:

    aws apigatewayv2 create-integration --api-id aabbccddee --integration-type AWS_PROXY --integration-method POST --integration-uri arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123412341234:function:simpleproxy-echo-e2e/invocations

A continuación, se muestra la salida de muestra de este ejemplo:

{ "PassthroughBehavior": "WHEN_NO_MATCH", "IntegrationMethod": "POST", "TimeoutInMillis": 29000, "ConnectionType": "INTERNET", "IntegrationUri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123412341234:function:simpleproxy-echo-e2e/invocations", "IntegrationId": "abcdefg", "IntegrationType": "AWS_PROXY" }

Formato de entrada de una función de Lambda para la integración de proxy para API de WebSocket

Con la integración de proxy de Lambda, API Gateway asigna toda la solicitud de cliente al parámetro de entrada event de la función de Lambda del backend. En el siguiente ejemplo se muestra la estructura del evento de entrada de la ruta $connect y el evento de entrada de la ruta $disconnect que API Gateway envía a una integración de proxy de Lambda.

Input from the $connect route
{ headers: { Host: 'abcd123.execute-api.us-east-1.amazonaws.com', 'Sec-WebSocket-Extensions': 'permessage-deflate; client_max_window_bits', 'Sec-WebSocket-Key': '...', 'Sec-WebSocket-Version': '13', 'X-Amzn-Trace-Id': '...', 'X-Forwarded-For': '192.0.2.1', 'X-Forwarded-Port': '443', 'X-Forwarded-Proto': 'https' }, multiValueHeaders: { Host: [ 'abcd123.execute-api.us-east-1.amazonaws.com' ], 'Sec-WebSocket-Extensions': [ 'permessage-deflate; client_max_window_bits' ], 'Sec-WebSocket-Key': [ '...' ], 'Sec-WebSocket-Version': [ '13' ], 'X-Amzn-Trace-Id': [ '...' ], 'X-Forwarded-For': [ '192.0.2.1' ], 'X-Forwarded-Port': [ '443' ], 'X-Forwarded-Proto': [ 'https' ] }, requestContext: { routeKey: '$connect', eventType: 'CONNECT', extendedRequestId: 'ABCD1234=', requestTime: '09/Feb/2024:18:11:43 +0000', messageDirection: 'IN', stage: 'prod', connectedAt: 1707502303419, requestTimeEpoch: 1707502303420, identity: { sourceIp: '192.0.2.1' }, requestId: 'ABCD1234=', domainName: 'abcd1234.execute-api.us-east-1.amazonaws.com', connectionId: 'AAAA1234=', apiId: 'abcd1234' }, isBase64Encoded: false }
Input from the $disconnect route
{ headers: { Host: 'abcd1234.execute-api.us-east-1.amazonaws.com', 'x-api-key': '', 'X-Forwarded-For': '', 'x-restapi': '' }, multiValueHeaders: { Host: [ 'abcd1234.execute-api.us-east-1.amazonaws.com' ], 'x-api-key': [ '' ], 'X-Forwarded-For': [ '' ], 'x-restapi': [ '' ] }, requestContext: { routeKey: '$disconnect', disconnectStatusCode: 1005, eventType: 'DISCONNECT', extendedRequestId: 'ABCD1234=', requestTime: '09/Feb/2024:18:23:28 +0000', messageDirection: 'IN', disconnectReason: 'Client-side close frame status not set', stage: 'prod', connectedAt: 1707503007396, requestTimeEpoch: 1707503008941, identity: { sourceIp: '192.0.2.1' }, requestId: 'ABCD1234=', domainName: 'abcd1234.execute-api.us-east-1.amazonaws.com', connectionId: 'AAAA1234=', apiId: 'abcd1234' }, isBase64Encoded: false }