

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon GameLift Serversのバックエンドサービスを構築する
<a name="gamelift_quickstart_customservers_designbackend"></a>

プレイヤーを認証し、Amazon GameLift Servers API と通信するゲームクライアントサービスを実装することをお勧めします。カスタムゲームクライアントサービスを実装することで、次のことが可能になります。
+ プレイヤーの認証をカスタマイズします。
+ Amazon GameLift Servers が新しいゲームセッションのプレイヤーをグループ化する方法、または既存のゲームセッションに追加する方法を制御します。
+ クライアントをそのまま信頼するのではなく、自前のリソースから情報を収集して、マッチメーキング用のスキルレーティングなどのゲームセッションプレイヤー属性を提供します。

ゲームクライアントサービスを使用すると、ゲームクライアントが Amazon GameLift Servers API と直接やり取りすることによって発生するセキュリティリスクも軽減されます。

## プレーヤーの認証
<a name="gamelift_quickstart_customservers_designbackend_auth"></a>

Amazon Cognito およびプレーヤーセッション ID を使用してゲームクライアントを認証できます。プレイヤー ID のライフサイクルとプロパティを管理するには、Amazon Cognito ユーザープールを使用します。

必要に応じて、カスタム ID ソリューションを構築してそれを AWSにホストできます。API Gateway で、カスタム認可ロジックに Lambda オーソライザーも使用できます。

**その他のリソース:**
+ [アイデンティティプール (フェデレーティッド ID) を使用する](https://docs.aws.amazon.com/cognito/latest/developerguide/identity-pools.html) (Amazon Cognito デベロッパーガイド)
+ [ユーザープールの開始方法](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-user-pools.html) (Amazon Cognito デベロッパーガイド)
+ [Amazon Cognito でプレイヤー認証を設定する方法](https://aws.amazon.com/blogs/gametech/how-to-set-up-player-authentication-with-amazon-cognito/) (ゲームブログAWS 用)

# Amazon GameLift Servers ゲームクライアント機能の統合する
<a name="gamelift-sdk-client-api"></a>

ゲームセッション情報の取得や新しいゲームセッションの作成など、Amazon GameLift Servers サービスと通信する必要があるソリューションコンポーネントに Amazon GameLift Servers ゲームホスティング機能を統合します。ほとんどの場合、この機能はバックエンドサービスコンポーネントに組み込まれています。次のようなコアタスクの機能を追加します。
+ アクティブなゲームセッションの情報とステータスをリクエストします。
+ 既存のゲームセッションで新しいプレイヤーのスロットを予約します。
+ プレイヤーグループの新しいゲームセッションを作成します。
+ 1 人以上のプレイヤーのマッチメーキングをリクエストします。
+ 既存のゲームセッションの更新データを提供します。

Amazon GameLift Servers SDK を通じてゲームホスティングコンポーネントがどのようにやり取りするかの詳細については、「[Amazon GameLift Servers とゲームクライアント／サーバーのやり取り](gamelift-sdk-interactions.md)」を参照してください。

## Amazon GameLift Servers APIをセットアップします。
<a name="gamelift-sdk-client-api-initialize"></a>

 AWS SDK for C\$1\$1 と をプロジェクトに追加Amazon GameLift Serversします。

Amazon GameLift Servers クライアントを初期化するコードを追加し、キー設定を保存します。このコードは、Amazon GameLift Servers に依存するコードの前に実行する必要があります。

1. クライアントをセットアップします。既定のクライアント設定を使用するか、カスタムクライアント設定オブジェクトを作成します。詳細については、[https://sdk.amazonaws.com/cpp/api/LATEST/aws-cpp-sdk-core/html/struct_aws_1_1_client_1_1_client_configuration.html](https://sdk.amazonaws.com/cpp/api/LATEST/aws-cpp-sdk-core/html/struct_aws_1_1_client_1_1_client_configuration.html) (C\$1\$1) または [AmazonGameLiftConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/GameLift/TGameLiftConfig.html) (C\$1) を参照してください。

   クライアント設定は、Amazon GameLift Servers に連絡するときに使用するターゲットリージョンとエンドポイントを指定します。リージョンは、使用するデプロイ済みのリソース (フリート、キュー、マッチメーカー) のセットを識別します。デフォルトのクライアント設定では、米国東部 (バージニア北部) リージョンが指定されます。その他のリージョンを使用するには、カスタム設定を作成します。

1. Amazon GameLift Servers クライアントを初期化します。[Aws::GameLift::GameLiftClient()](https://sdk.amazonaws.com/cpp/api/LATEST/aws-cpp-sdk-gamelift/html/class_aws_1_1_game_lift_1_1_game_lift_client.html) (C\$1\$1) または [AmazonGameLiftClient()](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/GameLift/TGameLiftClient.html) (C\$1) をデフォルトのクライアント設定またはカスタム設定のいずれかで使用します。

1. プレイヤーセッションを使用している場合は、各プレイヤーに一意の識別子を生成する仕組みを追加します。詳細については、「[プレイヤー ID を生成する](player-sessions-player-identifiers.md)」を参照してください。

1. 以下の情報を収集して保存します。
   + **ターゲットフリート** – 特定のフリートでゲームセッションを手動で作成する場合は、ターゲットフリートを指すフリート ID またはエイリアス ID を指定します。フリートがマルチロケーションの場合は、フリートロケーションを指定します。ベストプラクティスとして、バックエンドサービスを更新しなくてもプレイヤーをあるフリートから別のフリートに切り替えられるようにフリートエイリアスを使用してください。
   + **ターゲットキュー** – フリートキューを使用して新しいゲームセッションを配置する場合は、配置リクエストを送信するキュー名を指定します。
   + **AWS 認証情報** – へのすべての呼び出しは、ゲームをホスト AWS アカウント する の認証情報を提供するAmazon GameLift Servers必要があります。これらの認証情報は、「[ゲームへのプログラムによるアクセスをセットアップする](setting-up-aws-login.md#getting-started-iam-player-user)」で説明されているようにプレイヤーユーザーを作成して取得します。プレイヤーユーザーのアクセスを管理する方法に応じて、次の操作を行います。
     + ロールを使用してプレイヤーのユーザーアクセス許可を管理する場合は、Amazon GameLift Servers API を呼び出す前にロールを引き受けるコードを追加します。ロールを引き受けるリクエストは、一時的なセキュリティ認証情報のセットが返します。詳細については、IAM [ユーザーガイドの「IAM ロール (AWS API) への切り替え](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-api.html)」を参照してください。 **
     + 長期的なセキュリティ認証情報がある場合は、保存されている認証情報を検索して使用するようにコードを設定します。「 SDK [ およびツールリファレンスガイド」の「長期認証情報を使用した認証](https://docs.aws.amazon.com/sdkref/latest/guide/access-iam-users.html)」を参照してください。 *AWS SDKs * 認証情報の保存については、 [(C\$1\$1)](https://sdk.amazonaws.com/cpp/api/LATEST/aws-cpp-sdk-core/html/class_aws_1_1_auth_1_1_a_w_s_credentials.html) および [(.NET)](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/net-dg-config-creds.html) のAWS API リファレンスを参照してください。
     + 一時的なセキュリティ認証情報がある場合は、「*IAM ユーザーガイド*」の「[AWS SDK での一時的なセキュリティ認証情報の使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html#using-temp-creds-sdk)」で説明されているように、 AWS Security Token Service (AWS STS) を使用して認証情報を定期的に更新するコードを追加します。古い認証情報の有効期限が切れる前に、コードから新しい認証情報をリクエストする必要があります。

## アクティブなゲームセッションの取得
<a name="gamelift-sdk-client-api-find"></a>

使用可能なゲームセッションを検出し、ゲームセッション設定とメタデータを管理するコードを追加します。

**アクティブなゲームセッションを検索する**

[SearchGameSessions](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_SearchGameSessions.html) を使用して、特定のゲームセッション、すべてのアクティブなセッション、または検索条件セットを満たすセッションに関する情報を取得します。この呼び出しは、検索リクエストに一致するアクティブなゲームセッションごとに [GameSession](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_GameSession.html) オブジェクトを返します。このオブジェクトには、ゲームクライアントがゲームセッションに接続するために必要な DNS 名、IP アドレス、ポート番号が含まれます。

プレイヤーが参加できるアクティブなゲームセッションのフィルタリングされたリストを取得するには、検索条件を使用します。例えば、次のようにセッションをフィルタリングできます。
+ 空きがないゲームセッションを除外する: `CurrentPlayerSessionCount = MaximumPlayerSessionCount`。
+ セッションが実行されている時間の長さに基づいてゲームセッションを選択する: `CreationTime` を評価する。
+ カスタムゲームプロパティに基づいてゲームセッションを検索する: `gameSessionProperties.gameMode = "brawl"`。

**ゲームセッションデータの管理**

ゲームのセッション情報を取得または更新するには、次のいずれかのオペレーションを使用します。
+ [DescribeGameSessionDetails()](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_DescribeGameSessionDetails.html) – ゲームセッション情報に加えて、ゲームセッションの保護ステータスを取得します。
+ [UpdateGameSession](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_UpdateGameSession.html) – ゲームセッションのメタデータと設定を必要に応じて変更します。
+ [GetGameSessionLogUrl](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_GetGameSessionLogUrl.html) – 保存済みゲームセッションログにアクセスします。

## ゲームセッションを作成する
<a name="gamelift-sdk-client-api-create"></a>

デプロイ済みフリートで新しいゲームセッションを起動し、それらのセッションをプレイヤーが使用できるようにするコードを追加します。ゲームセッションを作成するには、ゲームホスティングソリューションがゲームセッションの配置を管理する方法に応じて、2 つのオプションがあります。

**マルチフリートキューでゲームセッションを作成する**

[StartGameSessionPlacement](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_StartGameSessionPlacement.html) を使用して、新しいゲームセッションのリクエストをキューに配置します。この操作を使用するには、キューを作成します。これにより、Amazon GameLift Servers が新しいゲームセッションを配置する場所が決まります。キューの詳細とそれらの使用方法については、「[ゲームセッションの配置を設定する](queues-intro.md)」を参照してください。

ゲームセッションプレイスメントを作成するときは、使用するキューの名前、ゲームセッション名、同時実行プレイヤーの最大数、オプションのゲームプロパティのセットを指定します。また、オプションで、ゲームセッションに自動的に参加するプレイヤーのリストを指定することもできます。関連するリージョンのプレイヤーレイテンシーデータを含めた場合、Amazon GameLift Servers はこの情報を使用して、できる限り最適なゲームプレイエクスペリエンスをプレイヤーに提供するフリートに、新しいゲームセッションを配置します。

正確なレイテンシー測定値を取得するには、Amazon GameLift Servers の UDP ping ビーコンを使用します。これらのエンドポイントを使用すると、プレイヤーデバイスと潜在的なホスティングロケーション間の実際の UDP ネットワークレイテンシーを測定できるため、ICMP ping を使用するよりも正確な配置決定を行うことができます。UDP ping ビーコンを使用してレイテンシーを測定する方法の詳細については、「[UDP ping ビーコン](reference-udp-ping-beacons.md)」を参照してください。

ゲームセッション配置は非同期プロセスです。リクエスト送信後は、それが成功するかタイムアウトするかです。また、[StopGameSessionPlacement](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_StopGameSessionPlacement.html) を使用してリクエストをいつでもキャンセルすることができます。プレイスメントリクエストのステータスを確認するには、[DescribeGameSessionPlacement](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_DescribeGameSessionPlacement.html) を呼び出します。

**特定のフリートにゲームセッションを作成する**

[CreateGameSession](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_CreateGameSession.html) を使用して、指定したフリートに新しいセッションを作成します。この同期オペレーションは、フリートに新しいゲームセッションをホストするための使用可能なリソースがあるかどうかによって、成功か失敗かが決まります。Amazon GameLift Servers が新しいゲームセッションを作成して [GameSession ](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_GameSession.html)オブジェクトを返したら、そのゲームセッションへプレイヤーの参加させることができます。

このオペレーションを使用するときは、フリート ID またはエイリアス ID、セッション名、そのゲームの同時実行プレイヤーの最大数を指定します。オプションで、一連のゲームプロパティを含めることができます。ゲームプロパティは、キーと値のペアの配列で定義されます。

Amazon GameLift Servers リソース保護機能を使って、1 人のプレイヤーが作成できるゲームセッションの数を制限する場合は、ゲームセッション作成者のプレイヤー ID を指定ます。

## ゲームセッションにプレイヤーを参加させる
<a name="gamelift-sdk-client-api-join"></a>

アクティブなゲームセッションにプレイヤースロットを予約し、ゲームクライアントをゲームセッションに接続するコードを追加します。このアクションは、ゲームが一意のプレイヤー IDs を持つプレイヤーセッションを使用している場合に使用できます。プレイヤーセッションの詳細については、「[Amazon GameLift Servers とプレイヤーエクスペリエンス](game-sessions-intro.md)」を参照してください。

1. 

**ゲームセッションにプレイヤースロットを予約する**

   プレイヤースロットを予約するには、ゲームセッションにプレイヤーセッションを作成します。これには、以下の 2 つの方法があります。
   + [StartGameSessionPlacement](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_StartGameSessionPlacement.html) または [ StartMatchmaking](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_StartMatchmaking.html) を使用してゲームセッションを作成する場合、リクエストに 1 人以上のプレイヤーを含めて、新しいゲームセッションでプレイヤーセッションを作成できます。
   + 既存のゲームセッションにプレイヤーを追加するには、[CreatePlayerSession](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_CreatePlayerSession.html) または [CreatePlayerSessions](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_CreatePlayerSessions.html) をゲームセッション ID で呼び出します。

   プレイヤーセッションリクエストには、一意のプレイヤー ID を含める必要があります。詳細については、「[プレイヤー ID を生成する](player-sessions-player-identifiers.md)」を参照してください。リクエストを受信すると、Amazon GameLift Servers はゲームセッションが新規プレイヤーを受け入れており、利用可能なプレイヤースロットがあることを確認します。成功すると、Amazon GameLift Servers はそのプレイヤー用のスロットを確保し、新しいプレイヤーセッションを作成し、[PlayerSession](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_PlayerSession.html) オブジェクトを返します。

   プレイヤーセッションには、一連のカスタムプレイヤーデータを含めることができます。このデータは、新しく作成されたプレイヤーセッションオブジェクトに保存されます。Amazon GameLift Servers は、プレイヤーがゲームセッションに直接接続するときに、このオブジェクトをゲームサーバーに渡します。複数のプレイヤーセッションをリクエストする場合は、各プレイヤーデータ文字列をプレイヤー ID に対応付けます。

1. 

**ゲームセッションに接続する**

   バックエンドサービスにコードを追加して `PlayerSession` オブジェクトを取得し ([DescribePlayerSessions() ](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_DescribePlayerSessions.html)を呼び出すなど)、ゲームクライアントに渡します。このオブジェクトには、DNS 名、IP アドレス、ポートが含まれます。ゲームクライアントは、この情報を使用してサーバーへの直接接続を確立できます。
   + 指定したポートと、サーバープロセスに割り当てられた DNS 名または IP アドレスを使用して接続できます。
   + フリートに対して TLS 証明書の生成が有効になっている場合、DNS 名とポートを使用して接続します。
   + ゲームサーバーが新規プレイヤーの接続を検証する場合は、プレイヤーセッション ID を参照します。

   接続すると、ゲームクライアントとサーバープロセスは Amazon GameLift Servers を関与させずに直接相互に通信します。サーバーは、Amazon GameLift Servers との通信を維持して、プレイヤーの接続ステータス、ヘルスステータスなどを報告します。

   ゲームサーバーが新規プレイヤーの接続を検証する場合、プレイヤーセッション ID がゲームセッション内の予約済みスロットと一致するかを確認し、接続を許可または拒否します。プレイヤーが切断されると、サーバープロセスが接続中断を報告します。

## カスタムゲームデータをゲームセッションに渡す
<a name="game-properties"></a>

ゲームクライアントは、ゲームセッションにデータを渡すことができます。ゲームセッションを作成するときは、一連のゲームプロパティ (キーと値のペア) またはゲームセッションデータ (文字列値) をリクエストに含めることができます。新規または更新されたゲームデータを使用して、既存のゲームセッションを更新することもできます。このデータは、ゲームサーバーコードで使用するために、ゲームセッションをホストしているゲームサーバープロセスに渡されます。ゲームプロパティは削除できません。

例として、ゲームで難易度レベルを `Novice`、`Easy`、`Intermediate`、`Expert` と定義しているとします。プレイヤーは `Easy` のゲームへの参加を選択します。ゲームクライアントは、バックエンドサービスを通じて、ゲームプロパティ `{"Key": "Difficulty", "Value":"Easy"}` を使用して新しいゲームセッションをリクエストします。レスポンスとして、Amazon GameLift Servers は利用可能なゲームサーバーに新しいゲームセッションを開始するように促し、`GameSession` オブジェクトを渡します。ゲームサーバープロセスは、提供されたゲームプロパティを使用してゲームセッションの難易度レベルを設定します。

### 詳細情報
<a name="w2aab9c13c11c17b7"></a>
+ [GameProperty データ型](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_GameProperty.html) 
+ [SearchGameSessions () の例](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_SearchGameSessions.html#API_SearchGameSessions_Examples) 
+ [UpdateGameSession () GameProperties パラメータ](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_UpdateGameSession.html#gamelift-UpdateGameSession-request-GameProperties) 

# サーバーレスバックエンドを備えたスタンドアロンのゲームセッションサーバー
<a name="gamelift_quickstart_customservers_designbackend_arch_serverless"></a>

サーバーレスクライアントサービスアーキテクチャを使用すると、バックエンドは Amazon GameLift Servers API に直接アクセスするのではなく、高度にスケーラブルなデータベースからマッチメーキングチケットのステータスを表示することができます。

次の図は、プレイヤーをAmazon GameLift Serversフリートで実行されているゲームにマッチング AWS のサービス する、 で構築されたサーバーレスバックエンドを示しています。次のリストには、図内の各番号付きの吹き出しについての説明が含まれます。この例を試すには、GitHub の「[AWSのマルチプレイヤーセッションベースのゲームホスティング](https://github.com/aws-samples/aws-gamelift-and-serverless-backend-sample)」を参照してください。

![\[Amazon GameLift Servers フリートで実行されているゲームにプレイヤーをマッチングさせるサーバーレスアーキテクチャの例。\]](http://docs.aws.amazon.com/ja_jp/gameliftservers/latest/developerguide/images/qs_arch_serverless.png)


1. ゲームクライアントは Amazon Cognito アイデンティティプールから Amazon Cognito ユーザー ID をリクエストします。

1. ゲームクライアントは一時的なアクセス認証情報を受け取り、Amazon API Gateway API を介してゲームセッションを要求します。

1. API Gateway は AWS Lambda 関数を呼び出します。

1. Lambda 関数は、Amazon DynamoDB NoSQL テーブルからプレイヤーデータをリクエストします。この関数は、リクエストコンテキストデータに Amazon Cognito ID を提供します。

1. Lambda 関数は Amazon GameLift Servers FlexMatch マッチメーキングを通じてマッチをリクエストします。

1. FlexMatch は、適切なレイテンシーを持つプレイヤーのグループを照合し、 Amazon GameLift Serversキューを介してゲームセッションの配置をリクエストします。キューには、1 つ以上の AWS リージョン 場所があるフリートがあります。

1. Amazon GameLift Servers がフリートのいずれかのロケーションにセッションを配置すると、Amazon GameLift Servers は Amazon Simple Notification Service (Amazon SNS) トピックにイベント通知を送信します。

1. Lambda 関数は Amazon SNS イベントを受け取り、それを処理します。

1. マッチメーキングチケットが `MatchmakingSucceeded` イベントの場合、Lambda 関数はゲームサーバーのポートと IP アドレスと一緒に結果を DynamoDB に書き込みます。

1. ゲームクライアントは API Gateway に対して署名付きリクエストを行い、特定の間隔でマッチメーキングチケットのステータスを表示します。

1. API Gateway は、マッチメーキングチケットのステータスをチェックする Lambda 関数を使用します。

1. Lambda 関数は DynamoDB テーブルをチェックして、チケットが成功したかどうかを確認します。成功すると、この関数はゲームサーバーのポートと IP アドレスをプレーヤーセッション ID と一緒にクライアントに送り返します。チケットが成功しなかった場合、この関数は、マッチがまだ準備できていないことを確認するレスポンスを送信します。

1. ゲームクライアントは、バックエンドサービスが提供するポートと IP アドレスを使用して、TCP または UDP によってゲームサーバーに接続します。次に、ゲームクライアントはプレイヤーセッション ID をゲームサーバーに送信し、ゲームサーバー側でサーバー SDK for Amazon GameLift Servers を使用してその ID を検証します。

# WebSocket ベースのバックエンドを備えたスタンドアロンのゲームセッションサーバー
<a name="gamelift_quickstart_customservers_designbackend_arch_websockets"></a>

この Amazon API Gateway WebSocket ベースのアーキテクチャを使用すると、WebSockets でマッチメーキングリクエストを行い、サーバーが開始するメッセージを使用して、マッチメーキングの完了のプッシュ通知を送信することができます。このアーキテクチャにより、クライアントとサーバー間の双方向通信が可能になり、パフォーマンスが向上します。

API Gateway WebSock API の使用に関する詳細については、「[WebSocket API の使用](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api.html)」を参照してください。

次の図は、API Gateway などを使用してプレイヤー AWS のサービス をAmazon GameLift Serversフリートで実行されているゲームにマッチングする WebSocket ベースのバックエンドアーキテクチャを示しています。次のリストには、図内の各番号付きの吹き出しについての説明が含まれます。

![\[Amazon GameLift Servers フリートで実行されているゲームにプレイヤーをマッチングさせる WebSockets アーキテクチャの例。\]](http://docs.aws.amazon.com/ja_jp/gameliftservers/latest/developerguide/images/qs_arch_websockets.png)


1. ゲームクライアントは Amazon Cognito アイデンティティプールから Amazon Cognito ユーザー ID をリクエストします。

1. ゲームクライアントは Amazon Cognito 認証情報を使用して、API Gateway API への WebSocket 接続に署名します。

1. API Gateway は、接続で AWS Lambda 関数を呼び出します。この関数は接続情報を Amazon DynamoDB テーブルに保存します。

1. ゲームクライアントは、WebSocket 接続で API Gateway API を介して Lambda 関数にメッセージを送信し、セッションをリクエストします。

1. Lambda 関数はメッセージを受信し、Amazon GameLift Servers FlexMatch マッチメーキングを通じて一致をリクエストします。

1. がプレイヤーのグループFlexMatchを照合すると、 は Amazon GameLift Serversキューを介してゲームセッションの配置をFlexMatchリクエストします。

1. Amazon GameLift Servers がフリートのいずれかのロケーションにセッションを配置すると、Amazon GameLift Servers は Amazon Simple Notification Service (Amazon SNS) トピックにイベント通知を送信します。

1. Lambda 関数は Amazon SNS イベントを受け取り、それを処理します。

1. マッチメーキングチケットが `MatchmakingSucceeded` イベントの場合、Lambda 関数は DynamoDB から正しいプレイヤー接続をリクエストします。次に、この関数は WebSocket 接続で API Gateway API を介してゲームクライアントにメッセージを送信します。このアーキテクチャでは、ゲームクライアントはマッチメーキングのステータスを積極的にポーリングしません。

1. ゲームクライアントは、WebSocket 接続を介してゲームサーバーのポートと IP アドレスをプレイヤーセッション ID と共に受け取ります。

1. ゲームクライアントは、バックエンドサービスが提供するポートと IP アドレスを使用して、TCP または UDP によってゲームサーバーに接続します。次に、ゲームクライアントはプレイヤーセッション ID をゲームサーバーに送信し、ゲームサーバー側でのサーバー SDK for Amazon GameLift Servers を使用してその ID を検証します。