

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Componenti della soluzione
<a name="solution-components"></a>

## Sala d'attesa pubblica e privata APIs
<a name="waiting-room-public-and-private-apis"></a>

 Lo scopo principale della AWS soluzione Virtual Waiting Room on è controllare la generazione di JSON Web Tokens (JWT) per i client in modo controllato per evitare esplosioni di nuovi utenti che potrebbero sovraccaricare il sito Web di destinazione. JWTs Può essere utilizzato per la protezione del sito, impedendo l'accesso alle pagine Web fino all'ottenimento del token della sala d'attesa e anche per l'autorizzazione all'accesso all'API. 

 Il modello principale installa un'API pubblica e un'API privata (autorizzata da IAM) utilizzata per la maggior parte delle operazioni di Virtual Waiting Room. AWS L'API pubblica è configurata con una CloudFront distribuzione con più politiche di memorizzazione nella cache basate sul percorso dell'API. Vengono creati una tabella DynamoDB EventBridge e un bus eventi. Il modello aggiunge un nuovo VPC con due zone di disponibilità (AZs), un cluster Elasticache (Redis OSS) in entrambe AZs e diverse funzioni Lambda. Le funzioni Lambda che interagiscono con Elasticache (Redis OSS) dispongono di interfacce di rete all'interno del VPC e tutte le altre funzioni Lambda hanno una connettività di rete predefinita. Il nucleo è il livello più basso APIs di interazione con la soluzione. Altre funzioni Lambda, l'istanza Amazon Elastic Compute Cloud (Amazon EC2) e i contenitori possono fungere da estensioni e richiamare il core APIs per creare sale d'attesa, controllare il traffico in ingresso e reagire agli eventi generati dalla soluzione. 

 Inoltre, lo stack principale genera un allarme per tutti gli errori della funzione Lambda e le condizioni di accelerazione, nonché allarmi per ogni implementazione di API Gateway per i codici di stato 4XX e 5XX. 

![\[Sala d'attesa virtuale sullo schema dei componenti pubblici e privati AWS APIs\]](http://docs.aws.amazon.com/it_it/solutions/latest/virtual-waiting-room-on-aws/images/virtual-waiting-room-public-private-api-component.png)




1.  CloudFront la distribuzione fornisce chiamate API pubbliche per il client e memorizza nella cache i risultati laddove appropriato. 

1.  L'API pubblica di Amazon API Gateway elabora le richieste di coda dalla sala d'attesa virtuale, monitora la posizione della coda e supporta la convalida dei token che consentono l'accesso al sito Web di destinazione. 

1.  La coda SQS regola il traffico verso la funzione che elabora i AWS Lambda messaggi in coda. 

1.  La funzione `AssignQueueNum` Lambda convalida ogni messaggio ricevuto nel batch, incrementa il contatore di coda in Elasticache (Redis OSS) e archivia ogni richiesta in Elasticache (Redis OSS) con la posizione di coda associata. 

1.  La funzione `GetPublicKey` Lambda recupera il valore della chiave pubblica da Secrets Manager. 

1.  La funzione `GenerateToken` Lambda genera un JWT per una richiesta valida a cui è stato consentito di completare la transazione nel sito di destinazione. Scrive un evento nel bus degli eventi personalizzato della sala d'attesa che indica che è stato generato un token. Se in precedenza è stato generato un token per questa richiesta, non viene generato alcun nuovo token. 

1.  La funzione `GetQueueNumber` Lambda recupera e restituisce la posizione numerica del client nella coda da Elasticache (Redis OSS). 

1.  La funzione `GetServingNumber` Lambda recupera e restituisce il numero attualmente servito dalla sala d'attesa da Elasticache (Redis OSS). 

1.  La funzione `GetWaitingNum` Lambda restituisce il numero attualmente in coda nella sala d'attesa e non ha ancora ricevuto un token. 

1.  Gli endpoint VPC consentono alle funzioni Lambda nel VPC di comunicare con i servizi all'interno della soluzione. 

1.  Il cluster Elasticache (Redis OSS) archivia tutte le richieste di accesso alla sala d'attesa con un ID evento valido. Memorizza inoltre diversi contatori come il numero di richieste in coda, il numero attualmente servito, il numero di token generati, il numero di sessioni completate e il numero di sessioni abbandonate. 

1.  Risorse API private API Gateway per supportare le funzioni amministrative. Le private APIs sono autenticate da AWS IAM. 

1.  La funzione `GetExpiredTokens` Lambda restituisce un elenco di richieste IDs con token scaduti. 

1.  La funzione `AuthGenerateToken` Lambda genera un token per una richiesta valida a cui è stato consentito di completare la transazione nel sito di destinazione. L'emittente e il periodo di validità di un token inizialmente impostati durante l'implementazione dello stack principale possono essere ignorati. Scrive un evento nel bus degli eventi personalizzato della sala d'attesa che indica che è stato generato un token. Se il token è stato precedentemente generato per questa richiesta, non viene generato alcun nuovo token. 

1.  La funzione `IncrementServingCounter` Lambda incrementa il bancone di servizio della sala d'attesa memorizzato in Elasticache (Redis OSS) con un incremento in base al valore. 

1.  La funzione `GetNumActiveTokens` Lambda interroga DynamoDB per il numero di token che devono ancora scadere, non sono stati utilizzati per completare la transazione e non sono stati contrassegnati come abbandonati. 

1.  La funzione `ResetState` Lambda reimposta tutti i contatori memorizzati in Elasticache (Redis OSS). Inoltre, elimina e ricrea le tabelle `TokenTable``QueuePositionEntryTime`, e DynamoDB`ServingCounterIssuedAt`. Inoltre, esegue l'invalidazione della cache. CloudFront 

1.  La funzione `UpdateSession` Lambda aggiorna lo stato di una sessione (token) memorizzata nella tabella DynamoDB`TokenTable`. Lo stato della sessione è indicato da un numero intero. Le sessioni impostate su uno stato di `1` indicano completate e `-1` indicano abbandonate. Scrive un evento nel bus degli eventi personalizzato della sala d'attesa indicante che una sessione è stata aggiornata. 

1.  La tabella `TokenTable` DynamoDB memorizza i dati dei token. 

1.  La tabella `QueuePositionEntryTime` DynamoDB memorizza i dati sulla posizione della coda e sull'ora di immissione. 

1.  La tabella `ServingCounterIssuedAt` DynamoDB memorizza gli aggiornamenti del contatore di servizio. 

1.  La funzione `GetQueuePositionExpireTime` Lambda viene richiamata quando il client richiede il tempo di scadenza della posizione di coda rimanente.

1.  La funzione `SetMaxQueuePositionExpired` Lambda imposta la posizione massima della coda scaduta corrispondente ai valori della tabella. `ServingCounterIssuedAt` Viene eseguita ogni minuto se il `IncrSvcOnQueuePositionExpiry` parametro è impostato su `true` durante la distribuzione dello stack principale.

1.  La funzione `GenerateEvents` Lambda scrive diverse metriche della sala d'attesa nel bus eventi personalizzato della sala d'attesa. Viene eseguita ogni minuto se il parametro Enable Events Generation è impostato su `true` durante l'implementazione dello stack principale.

1.  AWS Secrets Manager archivia le chiavi per le operazioni con i token e altri dati sensibili. 

1.  Amazon EventBridge Custom Event Bus riceve un evento ogni volta che viene generato un token e una sessione viene aggiornata nella tabella `TokenTable` DynamoDB. Riceve anche eventi quando il bancone di servizio viene spostato nella `SetMaxQueuePositionExpired` Lambda. Viene scritto con varie metriche relative alla sala d'attesa, se attivato durante l'implementazione del core stack. 

1.  La regola CloudWatch degli eventi Amazon viene creata se il parametro Enable Events Generation è impostato su true durante la distribuzione dello stack principale. Questa regola di evento avvia la funzione `GenerateEvents` Lambda ogni minuto. 

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

 La soluzione include uno stack di autorizzazioni API Gateway Lambda. Lo stack è composto da un ruolo IAM e una funzione Lambda. La funzione `APIGatewayAuthorizer` Lambda è un autorizzatore per API Gateway in grado di convalidare la firma e le attestazioni di un token emesso dalla Virtual Waiting Room on API. AWS La funzione Lambda fornita con lo stack può essere utilizzata per proteggere il cloud APIs fino a quando un utente non ha attraversato la sala d'attesa e non riceve un token di accesso. L'autorizzatore recupera e memorizza automaticamente nella cache la chiave pubblica e la configurazione dall'API principale per la verifica dei token. Può essere utilizzato senza modifiche e può essere installato in qualsiasi AWS regione che supporti. AWS Lambda

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

 Lo stack di [adattatori OpenID](https://github.com/aws-solutions/aws-virtual-waiting-room/blob/main/docs/developer-guide.md#open-id-adapter) implementa un API Gateway e funzioni Lambda che fungono da provider di identità OpenID. L'adattatore OpenID fornisce un set di funzionalità compatibili con OIDC APIs che possono essere utilizzate con i software di hosting web esistenti che supportano i provider di identità OIDC, come AWS Elastic Load Balancers WordPress, o come provider di identità federato per Amazon Cognito o un servizio simile. L'adattatore consente a un cliente di utilizzare la sala d'attesa nel flusso Authn/Authz quando utilizza un software di off-the-shelf web hosting con opzioni di integrazione limitate. Lo stack installa anche una CloudFront distribuzione con un bucket Amazon S3 come origine e un altro bucket S3 per la registrazione delle richieste. L'adattatore OpenID fornisce una pagina di sala d'attesa di esempio, simile a quella fornita nello stack di sala d'attesa di esempio, ma progettata per un flusso di autenticazione OpenID. Il processo di autenticazione prevede l'individuazione di una posizione nella coda della sala d'attesa e l'attesa che la posizione di servizio sia uguale o superiore a quella del cliente. La pagina della sala d'attesa OpenID reindirizza al sito di destinazione, che utilizza l'API OpenID per completare l'acquisizione del token e la configurazione della sessione per il client. Gli endpoint dell'API di questa soluzione vengono mappati direttamente alle specifiche di flusso name-for-name ufficiali di OpenID Connect 1.0,. Per i dettagli, fare riferimento a [OpenID Connect Core 1.0 Authentication](https://openid.net/specs/openid-connect-core-1_0.html#Authentication). 

![\[AWS Diagramma dei componenti dell'adattatore OpenID Virtual Waiting Room\]](http://docs.aws.amazon.com/it_it/solutions/latest/virtual-waiting-room-on-aws/images/virtual-waiting-room-openid-adaptor-component.png)


1.  CloudFront la distribuzione fornisce il contenuto del bucket S3 all'utente. 

1.  Il bucket S3 ospita pagine di esempio per le sale d'attesa. 

1.  L'API Amazon API Gateway fornisce un set di funzionalità compatibili con OIDC APIs che possono essere utilizzate con i software di hosting Web esistenti che supportano la funzione di autorizzazione Lambda del provider di identità OIDC. 

1.  La funzione `APIHandler` Lambda gestisce le richieste per tutti i percorsi di risorse API Gateway. Diverse funzioni Python all'interno dello stesso modulo sono mappate su ciascun percorso API. Ad esempio, il percorso della `/authorize` risorsa in API Gateway richiama la funzione `authorize()` Lambda. 

1.  Le impostazioni OIDC sono memorizzate in Secrets Manager. 

## Esempi di strategie di ingresso
<a name="sample-inlet-strategies"></a>

 Le strategie di ingresso determinano quando il banco di servizio della soluzione deve passare ad accogliere più utenti nel sito di destinazione. [Per ulteriori informazioni concettuali sulle strategie di ingresso nelle sale d'attesa, consulta Considerazioni di progettazione.](design-considerations.md) 

 *La soluzione fornisce due esempi di strategie di ingresso: e periodica. *MaxSize** 

![\[AWS Diagramma dei componenti delle strategie di ingresso della sala d'attesa virtuale\]](http://docs.aws.amazon.com/it_it/solutions/latest/virtual-waiting-room-on-aws/images/virtual-waiting-room-inlet-strategies-component.png)


 Opzione strategica di ingresso Max Size: 

1.  Un client emette una notifica Amazon SNS che richiama la funzione `MaxSizeInlet` Lambda per aumentare il contatore di server in base al payload del messaggio. 

1.  La funzione `MaxSizeInlet` Lambda prevede di ricevere un messaggio indicante che utilizza per determinare di quanto incrementare il contatore di servizio. 

 Opzione di strategia di ingresso periodica: 

1.  Una CloudWatch regola richiama una funzione Lambda ogni minuto per aumentare il contatore di servizio di una quantità fissa. 

1.  La funzione `PeriodicInlet` Lambda incrementa il contatore di servizio in base alla dimensione specificata se il tempo è compreso tra l'ora di inizio e quella di fine fornita. Facoltativamente, controlla un CloudWatch allarme e, se l'allarme è attivo, esegue l'incremento, altrimenti `OK` lo salta. 

## Esempio di sala d'attesa
<a name="sample-waiting-room"></a>

 La sala d'attesa campione si integra con quella pubblica e privata oltre APIs all'autorizzazione personalizzata per dimostrare una soluzione minimale per le sale end-to-end d'attesa. La pagina Web principale viene archiviata in un bucket S3 e utilizzata come origine per. CloudFront Guida l'utente attraverso i seguenti passaggi: 



1.  Mettiti in fila nella sala d'attesa per entrare nel sito. 

1.  Ottieni la posizione del cliente in fila. 

1.  Ottieni la posizione di servizio della sala d'attesa. 

1.  Ottieni un set di token quando la posizione di servizio è uguale o superiore a quella del cliente. 

1.  Usa il token per chiamare un'API protetta dall'autorizzatore Lambda. 

![\[Sala d'attesa virtuale (Esempio di diagramma dei componenti del sito dell'evento)\]](http://docs.aws.amazon.com/it_it/solutions/latest/virtual-waiting-room-on-aws/images/virtual-waiting-room-sample-event-site-component.png)




1.  Il bucket S3 ospita il contenuto di esempio per la sala d'attesa e il pannello di controllo. 

1.  CloudFront la distribuzione fornisce il contenuto del bucket S3 all'utente. 

1.  Esempio di implementazione di API Gateway con percorsi di risorse simili allo shopping come e. `/search` `/checkout` Questa API viene installata dallo stack e configurata con il token authorizer. È inteso come esempio di un modo semplice per proteggere un'API con la sala d'attesa. Le richieste che presentano un token valido vengono inoltrate a Lambda, altrimenti viene restituito un errore. L'API non presenta funzionalità diverse dalla risposta della funzione Lambda allegata. 