

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Komponen solusi
<a name="solution-components"></a>

## Ruang tunggu publik dan pribadi APIs
<a name="waiting-room-public-and-private-apis"></a>

 Ruang Tunggu Virtual pada tujuan utama AWS solusi adalah untuk mengontrol pembuatan Token Web JSON (JWT) untuk klien dengan cara yang terkontrol untuk menghindari ledakan pengguna baru yang mungkin membanjiri situs web tujuan. JWTs Dapat digunakan untuk perlindungan situs, mencegah akses ke halaman web sampai token ruang tunggu diperoleh, dan juga untuk otorisasi akses API. 

 Template inti menginstal API publik dan API pribadi (IAM-authorized) yang digunakan untuk sebagian besar Ruang Tunggu Virtual pada operasi. AWS API publik dikonfigurasi dengan CloudFront distribusi dengan beberapa kebijakan caching berdasarkan jalur API. Tabel DynamoDB EventBridge dan bus acara dibuat. Template menambahkan VPC baru dengan dua Availability Zones (AZs), cluster Elasticache (Redis OSS) di keduanya, AZs dan beberapa fungsi Lambda. Fungsi Lambda yang berinteraksi dengan Elasticache (Redis OSS) memiliki antarmuka jaringan dalam VPC dan semua fungsi Lambda lainnya memiliki konektivitas jaringan default. Inti APIs adalah lapisan terendah interaksi dengan solusi. Fungsi Lambda lainnya, instans Amazon Elastic Compute Cloud (Amazon EC2), dan container dapat bertindak sebagai ekstensi dan memanggil inti APIs untuk membangun ruang tunggu, mengontrol lalu lintas masuk, dan bereaksi terhadap peristiwa yang dihasilkan dari solusi. 

 Selain itu, tumpukan inti membuat alarm untuk semua kesalahan fungsi Lambda dan kondisi throttle, serta alarm untuk setiap penerapan API Gateway untuk kode status 4XX dan 5XX. 

![\[Ruang Tunggu Virtual pada diagram APIs komponen AWS publik dan pribadi\]](http://docs.aws.amazon.com/id_id/solutions/latest/virtual-waiting-room-on-aws/images/virtual-waiting-room-public-private-api-component.png)




1.  CloudFront distribusi memberikan panggilan API publik untuk klien dan hasil cache jika sesuai. 

1.  Amazon API Gateway API publik memproses permintaan antrian dari ruang tunggu virtual, melacak posisi antrian, dan mendukung validasi token yang memungkinkan akses ke situs web target. 

1.  Antrian SQS mengatur lalu lintas ke AWS Lambda fungsi yang memproses pesan antrian. 

1.  Fungsi `AssignQueueNum` Lambda memvalidasi setiap pesan dalam batch yang diterima, menambah penghitung antrian di Elasticache (Redis OSS), dan menyimpan setiap permintaan di Elasticache (Redis OSS) dengan posisi antrian yang terkait. 

1.  Fungsi `GetPublicKey` Lambda mengambil nilai kunci publik dari Secrets Manager. 

1.  Fungsi `GenerateToken` Lambda menghasilkan JWT untuk permintaan valid yang telah diizinkan untuk menyelesaikan transaksinya di situs target. Ini menulis acara ke bus acara khusus ruang tunggu bahwa token telah dibuat. Jika token sebelumnya telah dibuat untuk permintaan ini, tidak ada token baru yang dihasilkan. 

1.  Fungsi `GetQueueNumber` Lambda mengambil dan mengembalikan posisi numerik klien dalam antrian dari Elasticache (Redis OSS). 

1.  Fungsi `GetServingNumber` Lambda mengambil dan mengembalikan nomor yang saat ini sedang dilayani oleh ruang tunggu dari Elasticache (Redis OSS). 

1.  Fungsi `GetWaitingNum` Lambda mengembalikan nomor yang saat ini mengantri di ruang tunggu dan belum dikeluarkan token. 

1.  Titik akhir VPC memungkinkan fungsi Lambda di VPC untuk berkomunikasi dengan layanan dalam solusi. 

1.  Cluster Elasticache (Redis OSS) menyimpan semua permintaan untuk memasuki ruang tunggu dengan ID Acara yang valid. Ini juga menyimpan beberapa penghitung seperti jumlah permintaan yang diantrekan, jumlah yang saat ini dilayani, jumlah token yang dihasilkan, jumlah sesi yang diselesaikan, dan jumlah sesi yang ditinggalkan. 

1.  Sumber daya API pribadi API Gateway API untuk mendukung fungsi administratif. Pribadi adalah AWS IAM APIs yang diautentikasi. 

1.  Fungsi `GetExpiredTokens` Lambda mengembalikan daftar permintaan dengan token IDs kedaluwarsa. 

1.  Fungsi `AuthGenerateToken` Lambda menghasilkan token untuk permintaan valid yang telah diizinkan untuk menyelesaikan transaksinya di situs target. Penerbit dan masa berlaku token yang awalnya ditetapkan selama penerapan tumpukan inti dapat diganti. Ini menulis acara ke bus acara khusus ruang tunggu bahwa token telah dibuat. Jika token sebelumnya telah dibuat untuk permintaan ini, tidak ada token baru yang dihasilkan. 

1.  Fungsi `IncrementServingCounter` Lambda meningkatkan penghitung penyajian ruang tunggu yang disimpan di Elasticache (Redis OSS) dengan kenaikan nilai. 

1.  Fungsi `GetNumActiveTokens` Lambda menanyakan DynamoDB untuk jumlah token yang belum kedaluwarsa, belum digunakan untuk menyelesaikan transaksinya, dan belum ditandai ditinggalkan. 

1.  Fungsi `ResetState` Lambda me-reset semua counter yang disimpan di Elasticache (Redis OSS). Ini juga menghapus dan membuat ulang tabel`TokenTable`,`QueuePositionEntryTime`, dan DynamoDB`ServingCounterIssuedAt`. Selain itu, ia melakukan pembatalan CloudFront cache. 

1.  Fungsi `UpdateSession` Lambda memperbarui status sesi (token) yang disimpan dalam tabel DynamoDB`TokenTable`. Status sesi dilambangkan dengan bilangan bulat. Sesi diatur ke status `1` menunjukkan selesai, dan `-1` menunjukkan ditinggalkan. Ini menulis acara ke bus acara khusus ruang tunggu bahwa sesi telah diperbarui. 

1.  Tabel `TokenTable` DynamoDB menyimpan data token. 

1.  Tabel `QueuePositionEntryTime` DynamoDB menyimpan data posisi antrian dan waktu masuk. 

1.  Tabel `ServingCounterIssuedAt` DynamoDB menyimpan pembaruan ke konter penyajian. 

1.  Fungsi `GetQueuePositionExpireTime` Lambda dipanggil ketika klien meminta waktu kedaluwarsa posisi antrian yang tersisa.

1.  Fungsi `SetMaxQueuePositionExpired` Lambda menetapkan posisi antrian maksimum yang telah kedaluwarsa sesuai dengan nilai tabel. `ServingCounterIssuedAt` Ini berjalan setiap menit jika `IncrSvcOnQueuePositionExpiry` parameter disetel ke `true` selama penyebaran tumpukan inti.

1.  Fungsi `GenerateEvents` Lambda menulis berbagai metrik ruang tunggu ke bus acara khusus ruang tunggu. Ini dijalankan setiap menit jika parameter Aktifkan Pembuatan Acara disetel ke `true` selama penerapan tumpukan inti.

1.  AWS Secrets Manager menyimpan kunci untuk operasi token dan data sensitif lainnya. 

1.  Bus acara EventBridge khusus Amazon menerima acara setiap kali token dibuat dan sesi diperbarui di tabel `TokenTable` DynamoDB. Itu juga menerima acara ketika konter penyajian dipindahkan di `SetMaxQueuePositionExpired` Lambda. Itu ditulis dengan berbagai metrik ruang tunggu, jika diaktifkan selama penerapan tumpukan inti. 

1.  Aturan CloudWatch peristiwa Amazon dibuat jika parameter Aktifkan Pembuatan Acara disetel ke true selama penerapan tumpukan inti. Aturan acara ini memulai fungsi `GenerateEvents` Lambda setiap menit. 

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

 Solusinya mencakup tumpukan otorisasi API Gateway Lambda. Tumpukan terdiri dari satu peran IAM dan fungsi Lambda. Fungsi `APIGatewayAuthorizer` Lambda adalah otorisasi untuk API Gateway yang dapat memvalidasi tanda tangan dan klaim token yang dikeluarkan oleh Ruang Tunggu Virtual di API. AWS Fungsi Lambda yang disertakan dengan tumpukan dapat digunakan untuk melindungi cloud APIs sampai pengguna telah maju melalui ruang tunggu dan menerima token akses. Authorizer secara otomatis mengambil dan menyimpan kunci publik dan konfigurasi dari API inti untuk verifikasi token. Ini dapat digunakan tanpa modifikasi dan dapat diinstal di AWS Wilayah mana pun yang mendukung AWS Lambda. 

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

 Tumpukan [adaptor OpenID](https://github.com/aws-solutions/aws-virtual-waiting-room/blob/main/docs/developer-guide.md#open-id-adapter) menyebarkan fungsi API Gateway dan Lambda yang bertindak sebagai penyedia identitas OpenID. Adaptor OpenID menyediakan satu set yang kompatibel dengan OIDC APIs yang dapat digunakan dengan perangkat lunak hosting web yang ada yang mendukung penyedia identitas OIDC, seperti AWS Elastic Load Balancers,, atau sebagai penyedia identitas federasi untuk Amazon WordPress Cognito atau layanan serupa. Adaptor memungkinkan pelanggan untuk menggunakan ruang tunggu dalam aliran AuthN/Authz saat menggunakan perangkat lunak hosting off-the-shelf web dengan opsi integrasi terbatas. Tumpukan juga menginstal CloudFront distribusi dengan satu bucket Amazon S3 sebagai asal dan bucket S3 lainnya untuk permintaan logging. Adaptor OpenID menyajikan contoh halaman ruang tunggu, mirip dengan yang disediakan di tumpukan ruang tunggu sampel, tetapi dirancang untuk aliran otentikasi OpenID. Proses menjadi otentikasi melibatkan mendapatkan posisi dalam antrian ruang tunggu dan menunggu sampai posisi servis sama atau lebih besar dari posisi antrian klien. Halaman ruang tunggu OpenID dialihkan kembali ke situs target, yang menggunakan OpenID API untuk menyelesaikan akuisisi token dan konfigurasi sesi untuk klien. Titik akhir API solusi ini memetakan langsung ke spesifikasi aliran name-for-name OpenID Connect 1.0 resmi,. Lihat [OpenID Connect Core 1.0 Otentikasi](https://openid.net/specs/openid-connect-core-1_0.html#Authentication) untuk detailnya. 

![\[AWS Diagram komponen adaptor OpenID Ruang Tunggu Virtual\]](http://docs.aws.amazon.com/id_id/solutions/latest/virtual-waiting-room-on-aws/images/virtual-waiting-room-openid-adaptor-component.png)


1.  CloudFront distribusi menyajikan konten bucket S3 kepada pengguna. 

1.  Bucket S3 menampung contoh halaman ruang tunggu. 

1.  Amazon API Gateway API menyediakan satu set OIDC yang kompatibel dengan OIDC APIs yang dapat digunakan dengan perangkat lunak hosting web yang ada yang mendukung fungsi otorisasi Lambda penyedia identitas OIDC. 

1.  Fungsi `APIHandler` Lambda menangani permintaan untuk semua jalur sumber daya API Gateway. Fungsi Python yang berbeda dalam modul yang sama dipetakan ke setiap jalur API. Misalnya, jalur `/authorize` sumber daya di API Gateway dipanggil `authorize()` dalam Fungsi Lambda. 

1.  Pengaturan OIDC disimpan di Secrets Manager. 

## Contoh strategi saluran masuk
<a name="sample-inlet-strategies"></a>

 Strategi inlet menentukan kapan counter penyajian solusi harus bergerak maju untuk mengakomodasi lebih banyak pengguna di situs target. Untuk informasi konseptual lebih lanjut tentang strategi saluran masuk ruang tunggu, lihat Pertimbangan [desain](design-considerations.md). 

 Ada dua strategi inlet sampel yang disediakan oleh solusi: *MaxSize*dan *Periodik*. 

![\[AWS Diagram komponen strategi Inlet Ruang Tunggu Virtual\]](http://docs.aws.amazon.com/id_id/solutions/latest/virtual-waiting-room-on-aws/images/virtual-waiting-room-inlet-strategies-component.png)


 Opsi strategi inlet Ukuran Maks: 

1.  Klien mengeluarkan notifikasi Amazon SNS yang memanggil fungsi `MaxSizeInlet` Lambda untuk meningkatkan penghitung penayangan berdasarkan muatan pesan. 

1.  Fungsi `MaxSizeInlet` Lambda mengharapkan untuk menerima pesan yang digunakannya menentukan berapa banyak untuk meningkatkan penghitung penyajian. 

 Opsi strategi saluran masuk berkala: 

1.  CloudWatch Aturan memanggil fungsi Lambda setiap menit untuk meningkatkan penghitung porsi dengan jumlah tetap. 

1.  Fungsi `PeriodicInlet` Lambda menambah penghitung penyajian dengan ukuran yang diberikan jika waktu antara waktu mulai dan akhir yang disediakan. Secara opsional, ia memeriksa CloudWatch alarm dan, jika alarm dalam `OK` keadaan, melakukan kenaikan, jika tidak, lewati saja. 

## Contoh ruang tunggu
<a name="sample-waiting-room"></a>

 Ruang tunggu sampel terintegrasi dengan publik dan swasta APIs selain otorisasi khusus untuk menunjukkan solusi ruang end-to-end tunggu minimal. Halaman web utama disimpan dalam ember S3 dan digunakan sebagai asal. CloudFront Dibutuhkan pengguna melalui langkah-langkah berikut: 



1.  Antrean di ruang tunggu untuk masuk ke situs. 

1.  Dapatkan posisi klien dalam antrean. 

1.  Dapatkan posisi melayani ruang tunggu. 

1.  Dapatkan set token setelah posisi servis sama atau lebih besar dengan posisi klien. 

1.  Gunakan token untuk memanggil API yang dilindungi oleh otorisasi Lambda. 

![\[Ruang Tunggu Virtual Contoh diagram komponen situs acara\]](http://docs.aws.amazon.com/id_id/solutions/latest/virtual-waiting-room-on-aws/images/virtual-waiting-room-sample-event-site-component.png)




1.  Bucket S3 menampung konten sampel untuk ruang tunggu dan panel kontrol. 

1.  CloudFront distribusi menyajikan konten bucket S3 kepada pengguna. 

1.  Contoh penerapan API Gateway dengan jalur sumber daya seperti belanja seperti dan. `/search` `/checkout` API ini diinstal oleh tumpukan dan dikonfigurasi dengan otorisasi token. Ini dimaksudkan sebagai contoh cara sederhana untuk melindungi API dengan ruang tunggu. Permintaan yang menyajikan token yang valid diteruskan ke Lambda, jika tidak, kesalahan akan dikembalikan. Tidak ada fungsionalitas ke API selain respons dari fungsi Lambda yang terpasang. 