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](images/virtual-waiting-room-public-private-api-component.png)
Sala de espera virtual en el componente de API públicas y privadas de AWS
-
CloudFront la distribución ofrece llamadas a la API pública para el cliente y almacena en caché los resultados cuando corresponde.
-
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.
-
La cola SQS regula el tráfico a la AWS Lambda función que procesa los mensajes de la cola.
-
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. -
La función
GetPublicKey
Lambda recupera el valor de la clave pública de Secrets Manager. -
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. -
La función
GetQueueNumber
Lambda recupera y devuelve la posición numérica del cliente en la cola de Redis. ElastiCache -
La función
GetServingNumber
Lambda recupera y devuelve el número que atiende actualmente la sala de espera de ElastiCache Redis. -
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. -
Los puntos finales de la VPC permiten que las funciones de Lambda de la VPC se comuniquen con los servicios de la solución.
-
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.
-
Recursos de API privados de API Gateway para respaldar las funciones administrativas. Las API privadas están autenticadas por AWS IAM.
-
La función
GetExpiredTokens
Lambda devuelve una lista de identificadores de solicitud con tokens caducados. -
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. -
La función
IncrementServingCounter
Lambda incrementa el mostrador de servicio de la sala de espera almacenado en Redis dado un incremento ElastiCache por valor. -
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. -
La función
ResetState
Lambda restablece todos los contadores almacenados en ElastiCache Redis. También elimina y vuelve a crear las tablasTokenTable
QueuePositionEntryTime
, y DynamoDBServingCounterIssuedAt
. Además, invalida la caché. CloudFront -
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 de1
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. -
La tabla de
TokenTable
DynamoDB almacena datos de token. -
La tabla
QueuePositionEntryTime
DynamoDB almacena los datos de posición de cola y tiempo de entrada. -
La tabla de
ServingCounterIssuedAt
DynamoDB almacena las actualizaciones del contador de servicio. -
La función
GetQueuePositionExpireTime
Lambda se invoca cuando el cliente solicita el tiempo de caducidad de la posición de cola restante. -
La función
SetMaxQueuePositionExpired
Lambda establece la posición máxima de la cola que ha caducado correspondiente a los valores de laServingCounterIssuedAt
tabla. Se ejecuta cada minuto si elIncrSvcOnQueuePositionExpiry
parámetro se establecetrue
durante la implementación de la pila principal. -
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á establecidotrue
durante la implementación del core stack. -
AWS Secrets Manager almacena las claves para las operaciones de los tokens y otros datos confidenciales.
-
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 laSetMaxQueuePositionExpired
Lambda. Se escribe con varias métricas de sala de espera, si se activa durante la implementación del core stack. -
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
![AWS Diagrama de componentes del adaptador OpenID de sala de espera virtual](images/virtual-waiting-room-openid-adaptor-component.png)
Sala de espera virtual en el AWS componente adaptador OpenID
-
CloudFront la distribución entrega el contenido del bucket S3 al usuario.
-
El bucket S3 aloja ejemplos de páginas de sala de espera.
-
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.
-
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 invocaauthorize()
dentro de la función Lambda. -
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](images/virtual-waiting-room-inlet-strategies-component.png)
Componente de estrategias de sala de espera virtual en AWS Inlet
Opción de estrategia de entrada de tamaño máximo:
-
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. -
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:
-
Una CloudWatch regla invoca una función Lambda cada minuto para aumentar el contador de porciones en una cantidad fija.
-
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:
-
Haga cola en la sala de espera para ingresar al sitio.
-
Obtenga la posición del cliente en la fila.
-
Obtenga la posición de servicio de la sala de espera.
-
Obtenga un juego de fichas una vez que la posición de servicio sea igual o superior a la posición del cliente.
-
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](images/virtual-waiting-room-sample-event-site-component.png)
AWS Ejemplo de componente de sala de espera virtual en el sitio del evento
-
El depósito S3 aloja el contenido de muestra para la sala de espera y el panel de control.
-
CloudFront la distribución entrega el contenido del bucket de S3 al usuario.
-
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.