Seleccione sus preferencias de cookies

Usamos cookies esenciales y herramientas similares que son necesarias para proporcionar nuestro sitio y nuestros servicios. Usamos cookies de rendimiento para recopilar estadísticas anónimas para que podamos entender cómo los clientes usan nuestro sitio y hacer mejoras. Las cookies esenciales no se pueden desactivar, pero puede hacer clic en “Personalizar” o “Rechazar” para rechazar las cookies de rendimiento.

Si está de acuerdo, AWS y los terceros aprobados también utilizarán cookies para proporcionar características útiles del sitio, recordar sus preferencias y mostrar contenido relevante, incluida publicidad relevante. Para aceptar o rechazar todas las cookies no esenciales, haga clic en “Aceptar” o “Rechazar”. Para elegir opciones más detalladas, haga clic en “Personalizar”.

Tutorial: Creación de una API de WebSocket con una integración de AWS

Modo de enfoque
Tutorial: Creación de una API de WebSocket con una integración de AWS - Amazon API Gateway

En este tutorial, se crea una aplicación de transmisión sin servidor con una API de WebSocket. Los clientes pueden recibir mensajes sin tener que sondear para comprobar si hay actualizaciones.

Este tutorial muestra cómo transmitir mensajes a los clientes conectados e incluye un ejemplo de un autorizador de Lambda, una integración simulada y una integración que no sea de proxy en Step Functions.

Descripción general de la arquitectura de la API creada en este tutorial.

Una vez haya creado los recursos con una plantilla de AWS CloudFormation, utilizará la consola de API Gateway para crear una API de WebSocket que se integre con los recursos de AWS. Adjuntará un autorizador de Lambda a la API y creará una integración de servicios de AWS con Step Functions para iniciar la ejecución de una máquina de estado. La máquina de estado de Step Functions invocará una función de Lambda que envía un mensaje a todos los clientes conectados.

Después de crear la API, probará la conexión a la API y verificará que se envían y reciben mensajes. Para completar este tutorial se necesita aproximadamente 45 minutos.

Requisitos previos

Necesita los siguientes requisitos previos:

Le recomendamos que complete el tutorial de la aplicación de chat de WebSocket antes de iniciar este tutorial. Para completar el tutorial de la aplicación de chat de WebSocket, consulte Tutorial: Creación de una aplicación de chat de WebSocket con una API de WebSocket, Lambda y DynamoDB.

Paso 1: Crear recursos

Descargue y descomprima la plantilla de creación de aplicaciones para AWS CloudFormation. Usará esta plantilla para crear lo siguiente:

  • Funciones de Lambda que gestionan las solicitudes de la API y autorizan el acceso a la API.

  • Una tabla de DynamoDB para almacenar los ID de cliente y la identificación de usuario de entidad principal devuelta por el autorizador de Lambda.

  • Una máquina de estado de Step Functions para enviar mensajes a los clientes conectados.

Para crear una pila de AWS CloudFormation
  1. Abra la consola de AWS CloudFormation en https://console.aws.amazon.com/cloudformation.

  2. Seleccione Create stack (Crear pila) y, a continuación, seleccione With new resources (standard) (Con nuevos recursos [estándar]).

  3. En Specify template (Especificar plantilla), elija Upload a template file (Cargar un archivo de plantilla).

  4. Seleccione la plantilla que ha descargado.

  5. Elija Next (Siguiente).

  6. En Stack name (Nombre de pila), escriba websocket-step-functions-tutorial y, a continuación, elija Next (Siguiente).

  7. En Configure stack options (Configurar opciones de pila), elija Next (Siguiente).

  8. Para Capabilities (Capacidades), sepa que AWS CloudFormation puede crear recursos de IAM en su cuenta.

  9. Seleccione Enviar.

AWS CloudFormation aprovisiona los recursos especificados en la plantilla. Puede tardar varios minutos en finalizar el aprovisionamiento de los recursos. Elija la pestaña Salidas para ver los recursos creados y los ARN. Cuando el estado de la pila de AWS CloudFormation sea CREATE_COMPLETE, estará listo para continuar con el paso siguiente.

Paso 2: Crear una API de WebSocket

Creará una API de WebSocket para gestionar las conexiones de clientes y enrutar solicitudes a los recursos que creó en el paso 1.

Para crear una API de WebSocket
  1. Inicie sesión en la consola de API Gateway en https://console.aws.amazon.com/apigateway.

  2. Seleccione Create API (Crear API). En WebSocket API (API de WebSocket), elija Build (Crear).

  3. En API name (Nombre de la API), escribawebsocket-step-functions-tutorial.

  4. Para Route selection expression (Expresión de selección de ruta), ingrese request.body.action.

    La expresión de selección de ruta determina la ruta que API Gateway invoca cuando un cliente envía un mensaje.

  5. Elija Siguiente.

  6. Para Rutas predefinidas, elija Agregar $connect, Agregar $disconnect y Agregar $default.

    Las rutas $connect y $disconnect son rutas especiales que API Gateway invoca automáticamente cuando un cliente se conecta o se desconecta de una API. API Gateway invoca la ruta $default cuando ninguna otra ruta coincide con una solicitud. Creará una ruta personalizada para conectarse a Step Functions después de crear la API.

  7. Elija Siguiente.

  8. Para Integración para $connect, haga lo siguiente:

    1. Para Tipo de integración, elija Lambda.

    2. Para Función de Lambda, elija la función de Lambda $connect correspondiente que creó con AWS CloudFormation en el paso 1. El nombre de la función de Lambda debe comenzar con websocket-step.

  9. Para Integración para $disconnect, haga lo siguiente:

    1. Para Tipo de integración, elija Lambda.

    2. Para Función de Lambda, elija la función de Lambda $disconnect correspondiente que creó con AWS CloudFormation en el paso 1. El nombre de la función de Lambda debe comenzar con websocket-step.

  10. Para Integración para $default, elija simulación.

    En una integración simulada, API Gateway administra la respuesta de la ruta sin un backend de integración.

  11. Elija Siguiente.

  12. Revise la etapa que API Gateway le crea. De forma predeterminada, API Gateway crea una etapa denominada producción e implementa automáticamente la API en esa etapa. Elija Next (Siguiente).

  13. Elija Create and deploy (Crear e implementar).

Paso 3: Creación de un autorizador de Lambda

Para controlar el acceso a la API de WebSocket, debe crear un autorizador de Lambda. La plantilla de AWS CloudFormation creó la función del autorizador de Lambda para usted. Puede ver la función de Lambda en la consola de Lambda. El nombre no debe comenzar por websocket-step-functions-tutorial-AuthorizerHandler. Esta función de Lambda deniega todas las llamadas a la API de WebSocket a menos que el encabezado de Authorization sea Allow. La función de Lambda también transfiere la variable $context.authorizer.principalId a la API, que luego se utiliza en la tabla de DynamoDB para identificar a los intermediarios de la API.

En este paso, debe configurar la ruta $connect para usar el autorizador de Lambda.

Creación de un autorizador de Lambda
  1. Inicie sesión en la consola de API Gateway en https://console.aws.amazon.com/apigateway.

  2. En el panel de navegación principal, elija Autorizadores.

  3. Elija Creación de un autorizador.

  4. Para Nombre del autorizador, ingrese LambdaAuthorizer.

  5. Para ARN de autorizador, ingrese el nombre del autorizador creado por la plantilla de AWS CloudFormation. El nombre no debe comenzar por websocket-step-functions-tutorial-AuthorizerHandler.

    nota

    Le recomendamos que no utilice este autorizador de ejemplo para las API de producción.

  6. Para Tipo de origen de identidad, elija Encabezado. En Clave, escriba Authorization.

  7. Elija Crear autorizador.

Después de crear el autorizador, debe adjuntarlo a la ruta $connect de la API.

Asociación de un autorizador a la ruta de $connect
  1. En el panel de navegación principal, elija Rutas.

  2. Elija la ruta $connect.

  3. En la sección Configuración de la solicitud de ruta, elija Editar.

  4. Para Autorización, elija el menú desplegable y, a continuación, seleccione el autorizador de solicitudes.

  5. Elija Guardar cambios.

Paso 4: Creación de una integración bidireccional simulada

A continuación, debe crear la integración simulada bidireccional para la ruta $default. Una integración simulada le permite enviar una respuesta al cliente sin usar un backend. Cuando crea una integración para la ruta $default, puede mostrar a los clientes cómo interactuar con la API.

Debe configurar la ruta $default para indicar a los clientes que usen la ruta sendmessage.

Creación de una integración simulada
  1. Inicie sesión en la consola de API Gateway en https://console.aws.amazon.com/apigateway.

  2. Elija la ruta $default y, a continuación, elija la pestaña Solicitud de integración.

  3. Para las Plantillas de solicitud, elija Editar.

  4. Para Expresión de selección de plantilla, ingrese 200 y, a continuación, elija Editar.

  5. En la pestaña Solicitud de integración, para Plantillas de solicitud, elija Crear plantilla.

  6. Para Clave de plantilla, ingrese 200.

  7. Para Generar plantilla, ingrese la siguiente plantilla de asignación:

    {"statusCode": 200}

    Seleccione Crear plantilla.

    El resultado debe ser similar a lo siguiente:

    Configuración de la solicitud de integración para una integración simulada para la ruta $default.
  8. Para el panel de la ruta $default, elija Habilitar la comunicación bidireccional.

  9. Elija la pestaña Respuesta de integración y, a continuación, elija Creación de respuesta de integración.

  10. Para Clave de respuesta, escriba $default.

  11. Para Expresión de selección de plantillas, ingrese 200.

  12. Elija Crear respuesta.

  13. En Plantillas de respuesta, elija Crear plantilla.

  14. Para Clave de plantilla, ingrese 200.

  15. Para Plantilla de respuesta, ingrese la siguiente plantilla de asignación:

    {"Use the sendmessage route to send a message. Connection ID: $context.connectionId"}
  16. Seleccione Crear plantilla.

    El resultado debe ser similar a lo siguiente:

    Configuración de respuesta de integración para una integración simulada para la ruta $default.

Paso 5: Creación de una integración que no sea de proxy con Step Functions

A continuación, debe crear una ruta sendmessage. Los clientes pueden invocar la ruta sendmessage para transmitir un mensaje a todos los clientes conectados. La ruta sendmessage tiene una integración de servicio de AWS que no es de proxy con AWS Step Functions. La integración invoca el comando StartExecution para la máquina de estado de Step Functions que la plantilla de AWS CloudFormation creó para usted.

Creación de una integración que no sea de proxy
  1. Inicie sesión en la consola de API Gateway en https://console.aws.amazon.com/apigateway.

  2. Elija Create route (Crear ruta).

  3. Para Route key (Clave de ruta), ingrese sendmessage.

  4. En Tipo de integración, seleccione Servicio de AWS.

  5. Para Región de AWS, ingrese la región en la que implementó la plantilla de AWS CloudFormation.

  6. Para Servicio de AWS, elija Step Functions.

  7. En HTTP method (Método HTTP), elija POST.

  8. En Nombre de la función, introduzca StartExecution.

  9. Para Rol de ejecución, ingrese el rol de ejecución creado por la plantilla de AWS CloudFormation. El nombre debe ser WebsocketTutorialApiRole.

  10. Elija Create route (Crear ruta).

A continuación, debe crear una plantilla de asignación para enviar los parámetros de la solicitud a la máquina de estado de Step Functions.

Para crear una plantilla de mapeo
  1. Elija la ruta sendmessage y, a continuación, elija la pestaña Solicitud de integración.

  2. En la sección Plantillas de solicitud, elija Editar.

  3. Para Expresión de selección de plantillas, ingrese \$default.

  4. Elija Editar.

  5. En la sección Plantillas de solicitud, elija Crear plantilla.

  6. Para Clave de plantilla, ingrese \$default.

  7. Para Generar plantilla, ingrese la siguiente plantilla de asignación:

    #set($domain = "$context.domainName") #set($stage = "$context.stage") #set($body = $input.json('$')) #set($getMessage = $util.parseJson($body)) #set($mymessage = $getMessage.message) { "input": "{\"domain\": \"$domain\", \"stage\": \"$stage\", \"message\": \"$mymessage\"}", "stateMachineArn": "arn:aws:states:us-east-2:123456789012:stateMachine:WebSocket-Tutorial-StateMachine" }

    Sustituya stateMachineArn por el ARN de la máquina de estado creada por AWS CloudFormation.

    La plantilla de asignación hace lo siguiente:

    • Crea la variable $domain mediante la variable de contexto domainName.

    • Crea la variable $stage mediante la variable de contexto stage.

      Las variables $domain y $stage son necesarias para crear una URL de devolución de llamada.

    • Toma el mensaje JSON sendmessage entrante y extrae la propiedad de message.

    • Crea la entrada de la máquina de estado. La entrada es el dominio y la etapa de la API de WebSocket y el mensaje de la ruta sendmessage.

  8. Seleccione Crear plantilla.

    configuración de ruta sendmessage.

Puede crear una integración que no sea de proxy en las rutas $connect o $disconnect, para agregar o eliminar directamente un ID de conexión de la tabla de DynamoDB, sin invocar una función de Lambda.

Paso 6: probar la API

A continuación, implementará y probará la API para asegurarse de que funciona correctamente. Utilizará el comando wscat para conectarse a la API y, a continuación, utilizará un comando de barra inclinada para enviar un marco de ping para comprobar la conexión a la API de WebSocket.

Para implementar su API
  1. Inicie sesión en la consola de API Gateway en https://console.aws.amazon.com/apigateway.

  2. En el panel de navegación principal, elija Rutas.

  3. Elija Deploy API (Implementar API).

  4. Para Etapa, elija producción.

  5. (Opcional) Para Descripción de implementación, ingrese una descripción.

  6. Elija Implementar.

Después de implementar la API, puede invocarla. Use la URL de invocación para llamar a la API.

Obtención de la URL de invocación para la API
  1. Elija la API.

  2. Elija Stages (Etapas) y, a continuación, elija production (producción).

  3. Tenga en cuenta la WebSocket URL (URL de WebSocket) de la API. La dirección URL debe tener un aspecto similar al siguiente: wss://abcdef123.execute-api.us-east-2.amazonaws.com/production.

Ahora que tiene la URL de invocación, puede probar la conexión a la API de WebSocket.

Prueba de la conexión a la API
  1. Para conectarse a la API, utilice el siguiente comando. En primer lugar, se prueba la conexión invocando la ruta de /ping.

    wscat -c wss://abcdef123.execute-api.us-east-2.amazonaws.com/production -H "Authorization: Allow" --slash -P
    Connected (press CTRL+C to quit)
  2. Ingrese el siguiente comando para hacer ping al marco de control. Puede utilizar un marco de control para keepalive los fines del cliente.

    /ping

    El resultado debe ser similar a lo siguiente:

    < Received pong (data: "")

Ahora que ha probado la conexión, se puede probar que la API funciona correctamente. En este paso, se abre una nueva ventana de terminal para que la API de WebSocket pueda enviar un mensaje a todos los clientes conectados.

Para probar la API
  1. Abra un nuevo terminal y ejecute el comando wscat de nuevo con los siguientes parámetros.

    wscat -c wss://abcdef123.execute-api.us-east-2.amazonaws.com/production -H "Authorization: Allow"
    Connected (press CTRL+C to quit)
  2. API Gateway determina qué ruta invocar en función de la expresión de selección de solicitud de rutas de la API. La expresión de selección de rutas de la API es $request.body.action. Como resultado, API Gateway invoca la ruta sendmessage cuando envía el siguiente mensaje:

    {"action": "sendmessage", "message": "hello, from Step Functions!"}

    La máquina de estados de Step Functions asociada a la ruta invoca una función de Lambda con el mensaje y la URL de devolución de llamada. La función de Lambda llama a la API de administración de API Gateway y envía el mensaje a todos los clientes conectados. Todos los clientes reciben el siguiente mensaje:

    < hello, from Step Functions!

Ahora que ha probado la API de WebSocket, puede desconectarse de la API.

Para desconectarse de la API
  • Pulse CTRL+C para desconectarse de la API.

    Cuando un cliente se desconecta de la API, API Gateway invoca la ruta $disconnect de la API. La integración de Lambda para la ruta $disconnect de la API elimina el ID de conexión de DynamoDB.

Paso 7: limpiar

Para evitar costos innecesarios, elimine los recursos creados como parte de este tutorial Los siguientes pasos eliminan la pila y API de WebSocket de AWS CloudFormation.

Para eliminar una API de WebSocket
  1. Inicie sesión en la consola de API Gateway en https://console.aws.amazon.com/apigateway.

  2. En la página de las API, seleccione la websocket-api.

  3. Elija Action (Acciones), elija Delete (Eliminar)y, a continuación, confirme su elección.

Para eliminar una pila de AWS CloudFormation
  1. Abra la consola de AWS CloudFormation en https://console.aws.amazon.com/cloudformation.

  2. Seleccione su pila de AWS CloudFormation.

  3. Elija Delete (Eliminar) y, a continuación, confirme su elección.

Siguientes pasos

Puede automatizar la creación y la limpieza de todos los recursos de AWS involucrados en este tutorial. Para ver un ejemplo de una plantilla de AWS CloudFormation que automatiza estas acciones para este tutorial, consulte ws-sfn.zip.

PrivacidadTérminos del sitioPreferencias de cookies
© 2025, Amazon Web Services, Inc o sus afiliados. Todos los derechos reservados.