

# 設計上の考慮事項
<a name="design-considerations"></a>

## デプロイオプション
<a name="deployment-options"></a>

 初めてインストールする場合や、何をインストールすればよいかわからない場合は、`virtual-waiting-room-on-aws-getting-started.template` でネストされた CloudFormation テンプレートをデプロイしてください。このテンプレートは、コア、オーソライザー、サンプル待合室のテンプレートをインストールします。これにより、単純なフローを持つ待合室を最小限の構成で構築できます。

## サポートされるプロトコル
<a name="supported-protocols"></a>

 Virtual Waiting Room on AWS ソリューションは、次のものと統合できます。
+  JSON Web Token の検証ライブラリとツール 
+  既存の API Gateway のデプロイ 
+  REST API のクライアント 
+  OpenID のクライアントとプロバイダー 

## 待合室のインレット (滞留) ストラテジー
<a name="waiting-room-inlet-strategies"></a>

 インレットストラテジーとは、待合室からウェブサイトにクライアントを移動させるために必要なロジックとデータをカプセル化したものです。インレットストラテジーは、Lambda 関数、コンテナ、Amazon EC2 インスタンス、またはその他のコンピューティングリソースとして実装できます。待合室のパブリック API とプライベート API を呼び出すことができれば、クラウドリソースである必要はありません。インレットストラテジーでは、待合室、ウェブサイト、またはその他の外部インジケータに関するイベントを受け取ります。これらは、より多くのクライアントがトークンを受け取り、サイトに入るタイミングを決定するために役立ちます。インレットストラテジーには、複数のアプローチがあります。どちらを採用するかは、利用可能なリソースと、保護されるウェブサイトの設計上の制約によって異なります。

 インレットストラテジーが使用する主なアクションは、さらにサイトに入ることができるクライアントの数を示す相対値を指定して、`increment_serving_num` Amazon API Gateway のプライベート API を呼び出すことです。このセクションでは、インレットストラテジーの 2 つのサンプルについて説明します。これらは、そのまま使用することも、カスタマイズすることもでき、まったく異なるアプローチを採用することもできます。

### MaxSize
<a name="maxsize"></a>

 MaxSize ストラテジーを使用する場合、Lambda の `MaxSizeInlet` 関数には、ウェブサイトを同時に使用できるクライアント数の最大値が設定されます。これは固定値です。クライアントは、`MaxSizeInlet` Lambda 関数を呼び出す Amazon SNS 通知を発行して、メッセージペイロードに基づいてサービングカウンターに増分を加算します。SNS メッセージのソースはさまざまな場所から取得できます。これには、ウェブサイトのコードや、サイトの使用レベルを監視するモニタリングツールなどが含まれます。

 `MaxSizeInlet` Lambda 関数では、次を含むメッセージの受信を想定しています。
+  `exited :` 完了したトランザクションの数 
+  完了とマークするリクエスト ID のリスト 
+  中止とマークされるリクエスト ID のリスト 

 このデータは、サービングカウンターに増分として加算する値を決定するために使用されます。現在の同時接続クライアント数によっては、カウンターに加算できる追加のキャパシティがない場合もあります。

### Periodic
<a name="periodic"></a>

 Periodic ストラテジーを使用する場合は、CloudWatch ルールにより、サービングカウンターに一定量の増分を加算するための `PeriodicInlet` Lambda 関数が 1 分ごとに呼び出されます。Periodic インレットは、イベントの開始時刻、終了時刻、増分量でパラメータ化されます。このストラテジーでは、オプションで CloudWatch アラームもチェックして、アラームが `OK` の状態であれば増分の加算を実行し、それ以外の場合はスキップします。サイトインテグレーターは、使用率メトリクスをアラームに接続し、そのアラームを使用して Periodic インレットを一時停止することもできます。このストラテジーでは、現在時刻が開始時刻から終了時刻までの範囲内にあり、オプションで指定されたアラームが `OK` の状態である間のみ、処理待ちの順序を変更します。

## ソリューションのカスタマイズと拡張
<a name="customizing-and-extending-the-solution"></a>

 組織のサイト管理者は、待合室で使用する統合方法を決定する必要があります。2 つのオプションがあります。

1.  API および API Gateway のオーソライザーを直接使用する基本的な統合。

1.  ID プロバイダーによる OpenID 統合。

 上記の統合に加えて、ドメイン名のリダイレクトの設定が必要になる場合があります。また、カスタマイズした待合室のサイトページもデプロイする必要があります。

 Virtual Waiting Room on AWS ソリューションは、EventBridge を利用したイベント通知 (単一方向) と、REST API を利用した通信 (双方向) という 2 つのメカニズムで拡張できるように設計されています。

## クォータ
<a name="quotas"></a>

 Virtual Waiting Room on AWS の主なスケール制限は、インストールされた AWS リージョンの Lambda のスロットル制限です。デフォルトの Lambda 同時実行クォータを使用して AWS アカウントにインストールした場合、Virtual Waiting Room on AWS ソリューションでは、キュー内の位置をリクエストするクライアントを 1 秒あたり最大 500 件まで処理できます。1 秒あたり 500 クライアントのレートは、すべての Lambda 関数の同時クォータ制限を独占的に利用できるソリューションに基づいています。アカウントのリージョンが、Lambda 関数を呼び出す他のソリューションと共有されている場合、Virtual Waiting Room on AWS ソリューションは、少なくとも 1,000 件以上の同時呼び出しができる必要があります。CloudWatch メトリクスを使用すると、アカウント内での Lambda の同時呼び出し数を時系列でグラフ化し、判断を下すことができます。[Service Quotas コンソール](https://console.aws.amazon.com/servicequotas/home)を使用すると、上限の引き上げをリクエストできます。Lambda のスロットル制限を引き上げると、追加の呼び出しが実際に発生した場合にのみ、毎月のアカウントの利用料金が変わります。

 1 秒あたり 500 クライアントを追加するごとに、スロットル制限を 1,000 ずつ引き上げます。


|  **1 秒あたりの受信ユーザー数 (予想)**  |  **推奨される同時実行数のクォータ**  | 
| --- | --- | 
|  0～500  |  1,000 (デフォルト)  | 
|  501～1,000  |  2,000  | 
|  1,001～1,500  |  3,000  | 

 Lambda には、3,000 件の同時呼び出しという固定されたバースト制限があります。詳細については、「[Lambda 関数のスケーリングについて](https://docs.aws.amazon.com/lambda/latest/dg/invocation-scaling.html)」を参照してください。クライアントコードは、一時的なスロットル状況を示すエラーコードが返される場合、いくつかの API コールを想定し、再試行する必要があります。サンプル待合室のクライアントには、大容量のイベント、および高いバーストが発生するイベントで使用されるクライアントの設計方法の例として利用できるコードが含まれています。

 このソリューションでは、カスタムの設定手順により、Lambda の予約済み同時実行数およびプロビジョニングされた同時実行数にも対応できます。****詳細については、「[Lambda の予約済み同時実行数の管理](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html)」を参照してください。

 待合室に入り、トークンを受け取り、トランザクションへと続行できるユーザーの上限数は、Elasticache (Redis OSS) カウンターの上限によって制限されます。これらのカウンターは、待合室の処理待ち順序とソリューションの状態サマリーの追跡に使用されます。Elasticache (Redis OSS) で使用するカウンターの上限は 9,223,372,036,854,775,807 です。待合室のユーザーに発行された各トークンのコピーを保存するためには、DynamoDB テーブルが使用されます。DynamoDB では、テーブルのサイズに実質的な制限はありません。

## リージョンデプロイ
<a name="regional-deployments"></a>

 このソリューションで使用されるサービスは、すべての AWS リージョンでサポートされています。AWS のサービスのリージョンごとの最新情報については、「[AWS リージョン別のサービスのリスト](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)」を参照してください。