

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Componentes da solução
<a name="solution-components"></a>

## Sala de espera pública e privada APIs
<a name="waiting-room-public-and-private-apis"></a>

 O objetivo principal da AWS solução Virtual Waiting Room on é controlar a geração de JSON Web Tokens (JWT) para clientes de forma controlada, a fim de evitar surtos de novos usuários que possam sobrecarregar o site de destino. Eles JWTs podem ser usados para proteção do site, impedindo o acesso a páginas da web até que o token da sala de espera seja obtido e também para autorização de acesso à API. 

 O modelo principal instala uma API pública e uma API privada (autorizada pelo IAM) usadas na maioria das operações da Sala de Espera Virtual. AWS A API pública é configurada com uma CloudFront distribuição com várias políticas de armazenamento em cache com base no caminho da API. Uma tabela do DynamoDB EventBridge e um barramento de eventos são criados. O modelo adiciona uma nova VPC com duas zonas de disponibilidade (AZs), um cluster Elasticache (Redis OSS) em ambas e várias funções Lambda. AZs As funções Lambda que interagem com o Elasticache (Redis OSS) têm interfaces de rede na VPC e todas as outras funções do Lambda têm conectividade de rede padrão. O núcleo APIs é a camada mais baixa de interação com a solução. Outras funções do Lambda, a instância do Amazon Elastic Compute Cloud (Amazon EC2) e os contêineres podem atuar como extensões e chamar o núcleo APIs para criar salas de espera, controlar o tráfego de entrada e reagir aos eventos gerados pela solução. 

 Além disso, a pilha principal cria um alarme para todos os erros e condições de aceleração da função Lambda, bem como alarmes para cada implantação do API Gateway para códigos de status 4XX e 5XX. 

![\[Sala de espera virtual no diagrama de APIs componentes AWS públicos e privados\]](http://docs.aws.amazon.com/pt_br/solutions/latest/virtual-waiting-room-on-aws/images/virtual-waiting-room-public-private-api-component.png)




1.  CloudFront A distribuição fornece chamadas públicas de API para o cliente e armazena em cache o resultado quando apropriado. 

1.  A API pública do Amazon API Gateway processa solicitações de fila da sala de espera virtual, rastreia a posição da fila e oferece suporte à validação de tokens que permitem acesso ao site de destino. 

1.  A fila SQS regula o tráfego para a AWS Lambda função que processa as mensagens da fila. 

1.  A função `AssignQueueNum` Lambda valida cada mensagem em seu lote recebido, incrementa o contador de filas no Elasticache (Redis OSS) e armazena cada solicitação no Elasticache (Redis OSS) com sua posição de fila associada. 

1.  A função `GetPublicKey` Lambda recupera o valor da chave pública do Secrets Manager. 

1.  A função `GenerateToken` Lambda gera um JWT para uma solicitação válida que foi autorizada a concluir sua transação no site de destino. Ele grava um evento no barramento de eventos personalizado da sala de espera informando que um token foi gerado. Se um token tiver sido gerado anteriormente para essa solicitação, nenhum novo token será gerado. 

1.  A função `GetQueueNumber` Lambda recupera e retorna a posição numérica do cliente na fila do Elasticache (Redis OSS). 

1.  A função `GetServingNumber` Lambda recupera e retorna o número atualmente servido pela sala de espera do Elasticache (Redis OSS). 

1.  A função `GetWaitingNum` Lambda retorna o número atualmente na fila na sala de espera e ainda não recebeu um token. 

1.  Os VPC endpoints permitem que as funções Lambda na VPC se comuniquem com os serviços dentro da solução. 

1.  O cluster Elasticache (Redis OSS) armazena todas as solicitações para entrar na sala de espera com uma ID de evento válida. Ele também armazena vários contadores, como número de solicitações enfileiradas, número atualmente atendido, número de tokens gerados, número de sessões concluídas e número de sessões abandonadas. 

1.  Recursos de API privados do API Gateway para dar suporte às funções administrativas. Os privados APIs são autenticados pelo AWS IAM. 

1.  A função `GetExpiredTokens` Lambda retorna uma lista de solicitações IDs com tokens expirados. 

1.  A função `AuthGenerateToken` Lambda gera um token para uma solicitação válida que foi autorizada a concluir sua transação no site de destino. O emissor e o período de validade de um token inicialmente definido durante a implantação da pilha principal podem ser substituídos. Ele grava um evento no barramento de eventos personalizado da sala de espera informando que um token foi gerado. Se o token tiver sido gerado anteriormente para essa solicitação, nenhum novo token será gerado. 

1.  A função `IncrementServingCounter` Lambda incrementa o contador de atendimento da sala de espera armazenado no Elasticache (Redis OSS), dado um incremento por valor. 

1.  A função `GetNumActiveTokens` Lambda consulta o DynamoDB para saber o número de tokens que ainda não expiraram, não foram usados para concluir sua transação e não foram marcados como abandonados. 

1.  A função `ResetState` Lambda redefine todos os contadores armazenados no Elasticache (Redis OSS). Ele também exclui e recria as tabelas `TokenTable``QueuePositionEntryTime`, e do DynamoDB`ServingCounterIssuedAt`. Além disso, ele executa a invalidação CloudFront do cache. 

1.  A função `UpdateSession` Lambda atualiza o status de uma sessão (token) armazenada na tabela do DynamoDB`TokenTable`. O status da sessão é indicado por um número inteiro. Sessões definidas com um status de `1` indicam concluídas e `-1` indicam abandonadas. Ele grava um evento no barramento de eventos personalizado da sala de espera informando que uma sessão foi atualizada. 

1.  A tabela do `TokenTable` DynamoDB armazena dados de token. 

1.  A tabela do `QueuePositionEntryTime` DynamoDB armazena a posição da fila e os dados do horário de entrada. 

1.  A tabela do `ServingCounterIssuedAt` DynamoDB armazena atualizações no contador de atendimento. 

1.  A função `GetQueuePositionExpireTime` Lambda é invocada quando o cliente solicita o tempo restante de expiração da posição na fila.

1.  A função `SetMaxQueuePositionExpired` Lambda define a posição máxima da fila que expirou correspondente aos valores da tabela. `ServingCounterIssuedAt` Ele é executado a cada minuto se o `IncrSvcOnQueuePositionExpiry` parâmetro for definido como `true` durante a implantação da pilha principal.

1.  A função `GenerateEvents` Lambda grava várias métricas da sala de espera no barramento de eventos personalizado da sala de espera. Ele é executado a cada minuto se o parâmetro Enable Events Generation estiver definido como `true` durante a implantação da pilha principal.

1.  AWS O Secrets Manager armazena chaves para operações de token e outros dados confidenciais. 

1.  O Amazon EventBridge Custom Event Bus recebe um evento toda vez que um token é gerado e uma sessão é atualizada na tabela do `TokenTable` DynamoDB. Ele também recebe eventos quando o contador de serviço é movido no `SetMaxQueuePositionExpired` Lambda. Ele é gravado com várias métricas de sala de espera, se ativado durante a implantação da pilha principal. 

1.  A regra de CloudWatch eventos da Amazon é criada se o parâmetro Enable Events Generation for definido como verdadeiro durante a implantação da pilha principal. Essa regra de evento inicia a função `GenerateEvents` Lambda a cada minuto. 

## Authorizers
<a name="authorizers"></a>

 A solução inclui uma pilha de autorizadores Lambda do API Gateway. A pilha consiste em uma função do IAM e uma função do Lambda. A função `APIGatewayAuthorizer` Lambda é uma autorizadora do API Gateway que pode validar a assinatura e as declarações de um token emitido pela Sala de Espera Virtual na API. AWS A função Lambda fornecida com a pilha pode ser usada para proteger a nuvem APIs até que o usuário passe pela sala de espera e receba um token de acesso. O autorizador recupera e armazena automaticamente em cache a chave pública e a configuração da API principal para verificação do token. Ele pode ser usado sem modificação e pode ser instalado em qualquer AWS região que suporte AWS Lambda. 

## adaptador OpenID
<a name="openid-adapter"></a>

 A pilha de [adaptadores OpenID](https://github.com/aws-solutions/aws-virtual-waiting-room/blob/main/docs/developer-guide.md#open-id-adapter) implanta um API Gateway e funções Lambda que atuam como um provedor de identidade OpenID. O adaptador OpenID fornece um conjunto compatível com OIDC APIs que pode ser usado com o software de hospedagem na web existente que oferece suporte a provedores de identidade OIDC, como AWS Elastic Load Balancers WordPress, ou como um provedor de identidade federado para o Amazon Cognito ou serviço similar. O adaptador permite que o cliente use a sala de espera no fluxo Authn/Authz ao usar software de hospedagem off-the-shelf na web com opções de integração limitadas. A pilha também instala uma CloudFront distribuição com um bucket Amazon S3 como origem e outro bucket S3 para registrar solicitações. O adaptador OpenID exibe uma página de amostra da sala de espera, semelhante à fornecida na pilha de amostra da sala de espera, mas projetada para um fluxo de autenticação OpenID. O processo de autenticação envolve obter uma posição na fila da sala de espera e esperar até que a posição de serviço seja igual ou maior que a posição na fila do cliente. A página da sala de espera do OpenID redireciona de volta para o site de destino, que usa a API OpenID para concluir a aquisição do token e a configuração da sessão para o cliente. Os endpoints da API dessa solução são mapeados diretamente para a especificação de fluxo name-for-name oficial do OpenID Connect 1.0,. Consulte [Autenticação do OpenID Connect Core 1.0 para obter detalhes](https://openid.net/specs/openid-connect-core-1_0.html#Authentication). 

![\[AWS Diagrama de componentes do adaptador OpenID da sala de espera virtual\]](http://docs.aws.amazon.com/pt_br/solutions/latest/virtual-waiting-room-on-aws/images/virtual-waiting-room-openid-adaptor-component.png)


1.  CloudFront a distribuição serve o conteúdo do bucket do S3 para o usuário. 

1.  O bucket do S3 hospeda exemplos de páginas da sala de espera. 

1.  A API do Amazon API Gateway fornece um conjunto compatível com OIDC APIs que pode ser usado com o software de hospedagem na web existente que suporta a função de autorização Lambda do provedor de identidade OIDC. 

1.  A função `APIHandler` Lambda processa solicitações para todos os caminhos de recursos do API Gateway. Diferentes funções do Python no mesmo módulo são mapeadas para cada caminho da API. Por exemplo, o caminho do `/authorize` recurso no API Gateway é invocado `authorize()` dentro da função Lambda. 

1.  As configurações do OIDC são armazenadas no Secrets Manager. 

## Estratégias de entrada de amostras
<a name="sample-inlet-strategies"></a>

 As estratégias de entrada determinam quando o balcão de atendimento da solução deve avançar para acomodar mais usuários no site de destino. Para obter mais informações conceituais sobre estratégias de entrada na sala de espera, consulte Considerações de [design](design-considerations.md). 

 Existem dois exemplos de estratégias de entrada fornecidos pela solução: *MaxSize*e *periódica*. 

![\[AWS Diagrama de componentes das estratégias de entrada da sala de espera virtual\]](http://docs.aws.amazon.com/pt_br/solutions/latest/virtual-waiting-room-on-aws/images/virtual-waiting-room-inlet-strategies-component.png)


 Opção de estratégia de entrada de tamanho máximo: 

1.  Um cliente emite uma notificação do Amazon SNS que invoca a função `MaxSizeInlet` Lambda para aumentar o contador de atendimento com base na carga útil da mensagem. 

1.  A função `MaxSizeInlet` Lambda espera receber uma mensagem que ela usa para determinar quanto incrementar o contador de atendimento. 

 Opção de estratégia de entrada periódica: 

1.  Uma CloudWatch regra invoca uma função Lambda a cada minuto para aumentar o contador de porções em uma quantidade fixa. 

1.  A função `PeriodicInlet` Lambda incrementa o contador de serviço pelo tamanho determinado se o tempo estiver entre o horário de início e término fornecido. Opcionalmente, ele verifica um CloudWatch alarme e, se o alarme estiver em `OK` estado, executa o incremento, caso contrário, o ignora. 

## Exemplo de sala de espera
<a name="sample-waiting-room"></a>

 A amostra de sala de espera se integra ao público e ao privado, APIs além do autorizador personalizado, para demonstrar uma solução mínima de sala de end-to-end espera. A página principal da web é armazenada em um bucket do S3 e usada como origem para CloudFront. Ele conduz o usuário pelas seguintes etapas: 



1.  Entre na fila da sala de espera para entrar no local. 

1.  Obtenha a posição do cliente na fila. 

1.  Obtenha a posição de serviço da sala de espera. 

1.  Obtenha um conjunto de tokens quando a posição de serviço for igual ou maior à posição do cliente. 

1.  Use o token para chamar uma API protegida pelo autorizador Lambda. 

![\[Exemplo de diagrama de componentes do site de eventos da sala de espera virtual\]](http://docs.aws.amazon.com/pt_br/solutions/latest/virtual-waiting-room-on-aws/images/virtual-waiting-room-sample-event-site-component.png)




1.  O bucket do S3 hospeda o conteúdo de amostra para a sala de espera e o painel de controle. 

1.  CloudFront a distribuição serve o conteúdo do bucket do S3 para o usuário. 

1.  Exemplo de implantação do API Gateway com caminhos de recursos semelhantes a compras, como e. `/search` `/checkout` Essa API é instalada pela pilha e configurada com o autorizador de token. O objetivo é ser um exemplo de uma maneira simples de proteger uma API com a sala de espera. Solicitações que apresentam um token válido são encaminhadas para o Lambda, caso contrário, um erro será retornado. Não há nenhuma funcionalidade na API além da resposta da função Lambda anexada. 