Componentes de la solución - Sala de espera virtual en AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Componentes de la solución

API públicas y privadas de la sala de espera

El objetivo principal de la AWS solución Virtual Waiting Room on es controlar la generación de tokens web JSON (JWT) para los clientes de forma controlada, a fin de evitar las oleadas de nuevos usuarios que puedan sobrecargar el sitio web de destino. Los JWT se pueden utilizar para proteger el sitio, impidiendo el acceso a las páginas web hasta que se obtenga el token de la sala de espera, y también para autorizar el acceso a la API.

La plantilla principal instala una API pública y una API privada (autorizada por la IAM) que se utilizan en la mayoría de las operaciones de la sala de espera virtual. AWS La API pública se configura con una CloudFront distribución con varias políticas de almacenamiento en caché según la ruta de la API. Se crean una tabla EventBridge y un bus de eventos de DynamoDB. La plantilla añade una nueva VPC con dos zonas de disponibilidad (AZ), un clúster ElastiCache de Redis en ambas AZ y varias funciones Lambda. Las funciones de Lambda con ElastiCache las que interactúa Redis tienen interfaces de red dentro de la VPC y todas las demás funciones de Lambda tienen conectividad de red predeterminada. Las API principales son el nivel más bajo de interacción con la solución. Otras funciones de Lambda, la instancia de Amazon Elastic Compute Cloud (Amazon EC2) y los contenedores pueden actuar como extensiones y llamar a las API principales para crear salas de espera, controlar el tráfico entrante y reaccionar ante los eventos generados por la solución.

Además, la pila principal crea una alarma para todos sus errores de función Lambda y condiciones de aceleración, así como alarmas para cada implementación de API Gateway para los códigos de estado 4XX y 5XX.

Diagrama de componentes de la sala de espera virtual en las AWS API públicas y privadas

Sala de espera virtual en el componente de API públicas y privadas de AWS

  1. CloudFront la distribución ofrece llamadas a la API pública para el cliente y almacena en caché los resultados cuando corresponde.

  2. La API pública de Amazon API Gateway procesa las solicitudes de cola de la sala de espera virtual, rastrea la posición de la cola y admite la validación de los tokens que permiten el acceso al sitio web de destino.

  3. La cola SQS regula el tráfico a la AWS Lambda función que procesa los mensajes de la cola.

  4. La función AssignQueueNum Lambda valida cada mensaje del lote recibido, incrementa el contador de colas ElastiCache para Redis y almacena cada solicitud en Redis con su posición de cola ElastiCache asociada.

  5. La función GetPublicKey Lambda recupera el valor de la clave pública de Secrets Manager.

  6. La función GenerateToken Lambda genera un JWT para una solicitud válida a la que se le ha permitido completar su transacción en el sitio de destino. Escribe un evento en el bus de eventos personalizado de la sala de espera en el que se indica que se ha generado un token. Si anteriormente se generó un token para esta solicitud, no se generará ningún token nuevo.

  7. La función GetQueueNumber Lambda recupera y devuelve la posición numérica del cliente en la cola de Redis. ElastiCache

  8. La función GetServingNumber Lambda recupera y devuelve el número que atiende actualmente la sala de espera de ElastiCache Redis.

  9. La función GetWaitingNum Lambda devuelve el número actualmente en cola en la sala de espera y al que aún no se le ha emitido un token.

  10. Los puntos finales de la VPC permiten que las funciones de Lambda de la VPC se comuniquen con los servicios de la solución.

  11. ElastiCache en el caso de Redis, el clúster almacena todas las solicitudes de entrada a la sala de espera con un identificador de evento válido. También almacena varios contadores, como el número de solicitudes en cola, el número que se están atendiendo actualmente, el número de tokens generados, el número de sesiones completadas y el número de sesiones abandonadas.

  12. Recursos de API privados de API Gateway para respaldar las funciones administrativas. Las API privadas están autenticadas por AWS IAM.

  13. La función GetExpiredTokens Lambda devuelve una lista de identificadores de solicitud con tokens caducados.

  14. La función AuthGenerateToken Lambda genera un token para una solicitud válida a la que se le ha permitido completar su transacción en el sitio de destino. Se pueden anular el emisor y el período de validez de un token establecidos inicialmente durante la implementación del core stack. Escribe un evento en el bus de eventos personalizado de la sala de espera en el que se indica que se ha generado un token. Si se ha generado previamente un token para esta solicitud, no se generará ningún token nuevo.

  15. La función IncrementServingCounter Lambda incrementa el mostrador de servicio de la sala de espera almacenado en Redis dado un incremento ElastiCache por valor.

  16. La función GetNumActiveTokens Lambda consulta a DynamoDB el número de tokens que aún no han caducado, que no se han utilizado para completar la transacción y que no se han marcado como abandonados.

  17. La función ResetState Lambda restablece todos los contadores almacenados en ElastiCache Redis. También elimina y vuelve a crear las tablas TokenTableQueuePositionEntryTime, y DynamoDBServingCounterIssuedAt. Además, invalida la caché. CloudFront

  18. La función UpdateSession Lambda actualiza el estado de una sesión (token) almacenada en la tabla de DynamoDBTokenTable. El estado de la sesión se indica mediante un número entero. Las sesiones configuradas en un estado de 1 indican finalizadas e -1 indican abandonadas. Escribe un evento en el bus de eventos personalizado de la sala de espera en el que se indica que se ha actualizado una sesión.

  19. La tabla de TokenTable DynamoDB almacena datos de token.

  20. La tabla QueuePositionEntryTime DynamoDB almacena los datos de posición de cola y tiempo de entrada.

  21. La tabla de ServingCounterIssuedAt DynamoDB almacena las actualizaciones del contador de servicio.

  22. La función GetQueuePositionExpireTime Lambda se invoca cuando el cliente solicita el tiempo de caducidad de la posición de cola restante.

  23. La función SetMaxQueuePositionExpired Lambda establece la posición máxima de la cola que ha caducado correspondiente a los valores de la ServingCounterIssuedAt tabla. Se ejecuta cada minuto si el IncrSvcOnQueuePositionExpiry parámetro se establece true durante la implementación de la pila principal.

  24. La función GenerateEvents Lambda escribe varias métricas de la sala de espera en el bus de eventos personalizado de la sala de espera. Se ejecuta cada minuto si el parámetro Habilitar la generación de eventos está establecido true durante la implementación del core stack.

  25. AWS Secrets Manager almacena las claves para las operaciones de los tokens y otros datos confidenciales.

  26. El bus de eventos EventBridge personalizado de Amazon recibe un evento cada vez que se genera un token y se actualiza una sesión en la tabla de TokenTable DynamoDB. También recibe eventos cuando el contador de servicio se mueve en la SetMaxQueuePositionExpired Lambda. Se escribe con varias métricas de sala de espera, si se activa durante la implementación del core stack.

  27. La regla de CloudWatch eventos de Amazon se crea si el parámetro Enable Events Generation se establece en true durante la implementación del core stack. Esta regla de eventos inicia la función GenerateEvents Lambda cada minuto.

Autorizadores

La solución incluye una pila de autorizadores Lambda de API Gateway. La pila consta de una función de IAM y una función de Lambda. La función APIGatewayAuthorizer Lambda es un autorizador de API Gateway que puede validar la firma y las reclamaciones de un token emitido por la sala de espera virtual de la API. AWS La función Lambda que se suministra con la pila se puede utilizar para proteger las API de la nube hasta que el usuario haya pasado por la sala de espera y reciba un token de acceso. El autorizador recupera y almacena en caché automáticamente la clave pública y la configuración de la API principal para verificar el token. Se puede usar sin modificaciones y se puede instalar en cualquier AWS región compatible. AWS Lambda

Adaptador OpenID

La pila de adaptadores OpenID implementa una API Gateway y funciones Lambda que actúan como un proveedor de identidad de OpenID. El adaptador OpenID proporciona un conjunto de API compatibles con OIDC que se pueden usar con el software de alojamiento web existente que admite los proveedores de identidad de OIDC, como AWS Elastic Load Balancers WordPress, o como proveedor de identidad federado para Amazon Cognito o un servicio similar. El adaptador permite al cliente utilizar la sala de espera en el flujo de Authn/Authz cuando utiliza un software de alojamiento off-the-shelf web con opciones de integración limitadas. La pila también instala una CloudFront distribución con un bucket de Amazon S3 como origen y otro bucket de S3 para registrar las solicitudes. El adaptador OpenID muestra una página de sala de espera, similar a la que se proporciona en la pila de salas de espera de muestra, pero diseñada para un flujo de autenticación OpenID. El proceso de autenticación implica conseguir un puesto en la cola de la sala de espera y esperar hasta que el puesto de servicio sea igual o mayor que el puesto de la cola del cliente. La página de la sala de espera de OpenID redirige de nuevo al sitio de destino, que utiliza la API OpenID para completar la adquisición del token y la configuración de la sesión para el cliente. Los puntos finales de la API de esta solución se asignan directamente a la especificación de flujo name-for-name oficial de OpenID Connect 1.0,. Consulte Autenticación OpenID Connect Core 1.0 para obtener más información.

AWS Diagrama de componentes del adaptador OpenID de sala de espera virtual

Sala de espera virtual en el AWS componente adaptador OpenID

  1. CloudFront la distribución entrega el contenido del bucket S3 al usuario.

  2. El bucket S3 aloja ejemplos de páginas de sala de espera.

  3. La API Amazon API Gateway proporciona un conjunto de API compatibles con OIDC que se pueden utilizar con el software de alojamiento web existente que admite la función de autorización Lambda del proveedor de identidades OIDC.

  4. La función APIHandler Lambda gestiona las solicitudes de todas las rutas de recursos de API Gateway. Se asignan diferentes funciones de Python dentro del mismo módulo a cada ruta de API. Por ejemplo, la ruta de /authorize recursos de API Gateway se invoca authorize() dentro de la función Lambda.

  5. La configuración del OIDC se guarda en Secrets Manager.

Ejemplos de estrategias de entrada

Las estrategias de entrada determinan cuándo debe avanzar el mostrador de servicio de la solución para dar cabida a más usuarios en el sitio de destino. Para obtener más información conceptual sobre las estrategias de entrada a las salas de espera, consulte Consideraciones de diseño.

La solución ofrece dos ejemplos de estrategias de entrada: MaxSizey Periodic.

AWS Diagrama de componentes de las estrategias de entrada a la sala de espera virtual

Componente de estrategias de sala de espera virtual en AWS Inlet

Opción de estrategia de entrada de tamaño máximo:

  1. Un cliente emite una notificación de Amazon SNS que invoca la función MaxSizeInlet Lambda para aumentar el contador de servidores en función de la carga útil del mensaje.

  2. La función MaxSizeInlet Lambda espera recibir un mensaje para determinar cuánto incrementar el contador de servicio.

Opción de estrategia de entrada periódica:

  1. Una CloudWatch regla invoca una función Lambda cada minuto para aumentar el contador de porciones en una cantidad fija.

  2. La función PeriodicInlet Lambda incrementa el contador de servicio en el tamaño indicado si el tiempo está comprendido entre la hora de inicio y la hora de finalización indicada. Opcionalmente, comprueba una CloudWatch alarma y, si la alarma está activa, realiza el incremento; de lo contrario, lo omite. OK

Ejemplo de sala de espera

El ejemplo de sala de espera se integra con las API públicas y privadas, además del autorizador personalizado, para demostrar una solución de sala de end-to-end espera mínima. La página web principal se almacena en un depósito de S3 y se utiliza como origen para CloudFront ella. Guía al usuario a través de los siguientes pasos:

  1. Haga cola en la sala de espera para ingresar al sitio.

  2. Obtenga la posición del cliente en la fila.

  3. Obtenga la posición de servicio de la sala de espera.

  4. Obtenga un juego de fichas una vez que la posición de servicio sea igual o superior a la posición del cliente.

  5. Use el token para llamar a una API protegida por el autorizador Lambda.

Ejemplo de diagrama de componentes del sitio del evento: sala de espera virtual

AWS Ejemplo de componente de sala de espera virtual en el sitio del evento

  1. El depósito S3 aloja el contenido de muestra para la sala de espera y el panel de control.

  2. CloudFront la distribución entrega el contenido del bucket de S3 al usuario.

  3. Ejemplo de implementación de API Gateway con rutas de recursos similares a las de compras, como y. /search /checkout Esta API se instala por pila y se configura con el autorizador de tokens. Pretende ser un ejemplo de una forma sencilla de proteger una API en la sala de espera. Las solicitudes que presentan un token válido se reenvían a la Lambda; de lo contrario, se devuelve un error. La API no tiene ninguna funcionalidad aparte de la respuesta de la función Lambda adjunta.