

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

# Unity 用プラグイン: ゲームをマネージド コンテナフリートにデプロイする
<a name="unity-plug-in-container"></a>

このガイド付きプラグインワークフローを使用して、ゲームサーバーのコンテナイメージを作成し、コンテナベースのホスティングソリューションにデプロイします。このワークフローを正常に完了すると、コンテナ化されたゲームサーバーがクラウドで実行され、プラグインを使用してゲームクライアントを起動し、ゲームセッションに接続してゲームをプレイできます。

## 開始する前に
<a name="unity-plug-in-container-prereqs"></a>

このワークフローでは、次のタスクを完了していることを前提としています。
+ ** ゲームサーバーコードを Amazon GameLift Servers サーバー SDK と統合します。** ホストされているゲームサーバーは、Amazon GameLift Servers サービスと通信できる必要があります。これにより、新しいゲームセッション開始のリクエストに応答し、ステータスを報告できます。このタスクをまだ完了していない場合は、まずプラグインワークフロー [Anywhere でホスト] を実行することをお勧めします。ゲームサーバーコードの準備に関するガイダンスについては、「[サーバーコードを統合する](unity-plug-in-anywhere.md#unity-plug-in-anywhere-integrate-server)」を参照してください。マネージドコンテナフリートの場合、ゲームサーバーを サーバー SDK バージョン 5.2 以上 と統合する必要があります。
**注記**  
サンプルゲームをインポートした場合、このタスクはすでに完了しています。
+ **Linux で実行するようにゲームサーバー実行可能ファイルをパッケージ化します。**
+ **ゲームサーバービルドでデプロイするファイルを収集します。**ローカルマシン上に 作業ディレクトリを作成し、コンテナイメージに組み込むファイルを整理します。これには、ゲームの依存関係、コンテナ起動時にゲームサーバーやその他のプロセスを起動するためのスクリプト などが含まれます。
+ **ゲームクライアントコードを Amazon GameLift Servers と統合します。**このタスクを完了する一つの方法は、プラグインに付属している、既に統合済みのサンプルアセットを追加することです。ゲームクライアントコードの準備に関するガイダンスについては、「[クライアントコードを統合する](unity-plug-in-anywhere.md#unity-plug-in-anywhere-integrate-client)」を参照してください。
+ **ローカルマシンに Docker をインストールしてセットアップします。**プラグインにコンテナイメージの作成と、ECR リポジトリへのプッシュを行わせたい場合、このツールをインストールしておく必要があります。または、これらのタスクを手動で実行し、既存のコンテナイメージを使用するようにプラグインへ指示することもできます。コンテナイメージを手動で構築する方法の詳細については、「[Amazon GameLift Servers 用のコンテナイメージを構築する](https://docs.aws.amazon.com/gameliftservers/latest/developerguide/containers-prepare-images.html)」を参照してください。

**Amazon GameLift Servers マネージドコンテナワークフローを開始するには:**
+ Unity エディタのメインツールバーで、Amazon GameLift Servers メニューを選択し、**[マネージドコンテナ]** を選択します。この操作により、プラグインページ **[マネージドコンテナでホスト]** が開き、ゲームサーバービルドを基にしたコンテナイメージの作成、コンテナフリートへのデプロイ、ゲームの起動までをステップごとに案内するワークフローが表示されます。

## ステップ 0: プロファイルを設定する
<a name="unity-plug-in-container-profile"></a>

このセクションには、現在選択されているユーザープロファイルが表示されます。現在のユーザープロファイルが、このワークフローで使用するものであることを確認します。このワークフローで作成するすべてのリソースは、プロファイルの AWS アカウントに関連付けられ、プロファイルのデフォルト AWS リージョンに配置されます。プロファイルユーザーのアクセス許可によって、 AWS リソースとアクションへのアクセスが決まります。

次の場合は、選択中のユーザープロファイルを変更する必要がある場合があります。
+ 現在、プロファイルが選択されていない場合。
+ 別のプロファイルを選択する場合、または新しいプロファイルを作成する場合。
+ 選択したプロファイルのブートストラップステータスが「非アクティブ」の場合、そのプロファイルをブートストラップする必要があります。

**選択するユーザープロファイルを設定または変更するには**
+ Amazon GameLift Servers メニューで、**Open AWS Access Credentials** を選択します。

## ステップ 1: コンテナの準備状況を評価する
<a name="unity-plug-in-container-assess"></a>

ゲームサーバーをコンテナフリートにデプロイする前に、これをコンテナイメージにパッケージ化し、Amazon ECR リポジトリに保存する必要があります。これらのタスクは、プラグインが自動的に処理することも、手動で実行することもできます。このステップでは、コンテナイメージおよび ECR リポジトリの状態に関する情報を入力します。

評価用の質問に回答し、プラグインが実行すべき手順を指示します。
+ **新しいコンテナイメージを作成します。**このオプションを選択すると、次のステップでゲームサーバービルドディレクトリの場所と実行可能ファイルの入力を求められます。プラグインは (Amazon GameLift Servers が提供する) Dockerfile テンプレートを使用し、ゲーム用に自動的に設定します。テンプレートは [Amazon GameLift Servers 用のコンテナイメージを構築する](containers-prepare-images.md) で使用できます。このオプションを選択した後、プラグインが新しいイメージを保存する場所を指定します。
  + 新しい Amazon ECR リポジトリを作成し、コンテナイメージをプッシュします。プラグインは、 AWS アカウントと選択したユーザープロファイル AWS リージョン のデフォルトを使用してプライベート ECR リポジトリを作成します。
  + Amazon ECR リポジトリにコンテナイメージをプッシュします。このオプションを選択すると、次のステップでリストから既存の Amazon ECR リポジトリを選択するよう求められます。リストには、 AWS アカウントのすべての Amazon ECR リポジトリと、選択したユーザープロファイル AWS リージョン のデフォルトが含まれます。パブリックリポジトリまたはプライベートリポジトリを選択できます。
+ **既存のコンテナイメージを使用します。**イメージを手動で構築した場合は、Amazon GameLift Servers が提供する Dockerfile テンプレートを使用することをお勧めします。このテンプレートは [Amazon GameLift Servers 用のコンテナイメージを構築する](containers-prepare-images.md) で入手できます。このオプションを選択したら、イメージの場所を指定します。
  + ローカルに保存された Docker 生成イメージ。このオプションを選択すると、プラグインは新しい Amazon ECR プライベートリポジトリを作成し、ローカルのイメージファイルをプッシュします。次のステップでは、プラグインがイメージファイルを見つけるために使用するイメージ ID の入力を求められます。
  + Amazon ECR リポジトリに既に保存されているコンテナイメージ。このオプションを選択すると、次のステップで、リストから既存の Amazon ECR リポジトリとイメージを選択するよう求められます。リストには、 AWS アカウントのすべての Amazon ECR リポジトリと、選択したユーザープロファイル AWS リージョン のデフォルトが含まれます。パブリックリポジトリまたはプライベートリポジトリを選択できます。
  +  Linux での Unity 6.3 には glibc 2.35 が必要です。Amazon Linux 2023 には glibc 2.34 が含まれています。ソースからの glibc 2.35 の構築と、glibc 2.35 を使用するように Unity バイナリを設定する処理を行う Dockerfile テンプレートを以下に示します。

### Unity 6.3 ゲームサーバーコンテナイメージの Dockerfile テンプレート
<a name="w2aab9c11b9c21c27c11c11b1"></a>

このテンプレートには、ゲームサーバーコンテナが Amazon GameLift Servers フリートで使用できるようにするために必要な最小限の手順が含まれています。ゲームサーバーに必要なコンテンツを変更します。

```
# Base image
# ----------
  # Add the base image that you want to use over here,
  # Make sure to use an image with the same architecture as the
  # Instance type you are planning to use on your fleets.
FROM public.ecr.aws/amazonlinux/amazonlinux

# Game build directory
# --------------------
  # Add your game build directory in the 'GAME_BUILD_DIRECTORY' env variable below.
  #
# Game executable
# ---------------
  # Add the relative path to your executable in the 'GAME_EXECUTABLE' env variable below.
  # The game build provided over here needs to be integrated with gamelift server sdk.
  # This template assumes that the executable path is relative to the game build directory.
  #
# Launch parameters
# -----------------
  # Add any launch parameters to pass into your executable in the 'LAUNCH_PARAMS' env variable below.
  #
# Default directory
# -----------------
  # The value provided in 'HOME_DIR' below will be where the game executable and logs exist.
  #
ARG GAME_BUILD_DIRECTORY
ARG GAME_EXECUTABLE
ARG LAUNCH_PARAMS

ENV GAME_BUILD_DIRECTORY=$GAME_BUILD_DIRECTORY \
    GAME_EXECUTABLE=$GAME_EXECUTABLE \
    LAUNCH_PARAMS=$LAUNCH_PARAMS \
    HOME_DIR="/local/game"

# install dependencies as necessary
RUN yum install -y shadow-utils bison wget gcc make patchelf tar gzip && \
    yum clean all && rm -fr /var/cache

RUN mkdir -p $HOME_DIR
COPY .$GAME_BUILD_DIRECTORY/ $HOME_DIR

# Change directory to home
WORKDIR $HOME_DIR

# Build glibc 2.35 and patch Unity binaries
RUN GLIBC_VERSION="2.35" && \
    INSTALL_PREFIX="/opt/glibc-${GLIBC_VERSION}" && \
    ARCH=$(uname -m) && \
    if [ "$ARCH" = "x86_64" ]; then \
        INTERPRETER="${INSTALL_PREFIX}/lib/ld-linux-x86-64.so.2"; \
        MONO_ARCH="x86_64"; \
    elif [ "$ARCH" = "aarch64" ]; then \
        INTERPRETER="${INSTALL_PREFIX}/lib/ld-linux-aarch64.so.1"; \
        MONO_ARCH="aarch64"; \
    else \
        echo "ERROR: Unsupported architecture: $ARCH"; exit 1; \
    fi && \
    cd /tmp && \
    wget -q "https://ftp.gnu.org/gnu/glibc/glibc-${GLIBC_VERSION}.tar.gz" && \
    tar -xzf "glibc-${GLIBC_VERSION}.tar.gz" && \
    cd "glibc-${GLIBC_VERSION}" && mkdir glibc-build && cd glibc-build && \
    touch /etc/ld.so.conf && \
    ../configure --prefix="${INSTALL_PREFIX}" && \
    make -s all && make -s install && \
    cd / && rm -rf /tmp/glibc-* && \
    GLIBC_LIB="${INSTALL_PREFIX}/lib" && \
    EXECUTABLE_NAME=$(echo "$GAME_EXECUTABLE" | sed 's/\.[^.]*$//') && \
    DATA_DIR="$HOME_DIR/${EXECUTABLE_NAME}_Data" && \
    patchelf --set-interpreter "$INTERPRETER" "$HOME_DIR/$GAME_EXECUTABLE" && \
    patchelf --set-rpath "$GLIBC_LIB:$HOME_DIR:/lib64:$DATA_DIR/MonoBleedingEdge/$MONO_ARCH" "$HOME_DIR/$GAME_EXECUTABLE" && \
    patchelf --set-rpath "$GLIBC_LIB:/lib64" "$HOME_DIR/UnityPlayer.so" && \
    MONO_LIB="$DATA_DIR/MonoBleedingEdge/$MONO_ARCH/libmonobdwgc-2.0.so" && \
    if [ -f "$MONO_LIB" ]; then patchelf --set-rpath "$GLIBC_LIB:/lib64" "$MONO_LIB"; fi && \
    GAME_ASSEMBLY="$HOME_DIR/GameAssembly.so" && \
    if [ -f "$GAME_ASSEMBLY" ]; then patchelf --set-rpath "$GLIBC_LIB:/lib64" "$GAME_ASSEMBLY"; fi

RUN useradd -m gamescale && \
    echo "gamescale ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
    chown -R gamescale:gamescale $HOME_DIR

# Add permissions to game build
RUN chmod +x ./$GAME_EXECUTABLE

USER gamescale

# Check directory before starting the container
RUN ls -lhrt .

# Check path before starting the container
RUN echo $PATH

# Start the game build
ENTRYPOINT ["/bin/sh", "-c", "./$GAME_EXECUTABLE $LAUNCH_PARAMS"]
```

## ステップ 2: イメージデプロイを設定する
<a name="unity-plug-in-container-configure"></a>

このステップでは、コンテナイメージをコンテナフリートにデプロイするために、プラグインが必要とする情報を提供します。このステップでは、以下の情報をリクエストします。
+ ステップ 1 で選択した内容に基づき、ゲームサーバービルド、コンテナイメージ、または Amazon ECR リポジトリの場所。
+ マネージドコンテナのデプロイで使用するシナリオ。
+ オプションのデプロイ設定。このセクションには、プラグインがデフォルトで使用する設定が含まれます。または、デフォルト値を変更できます。
  + ゲーム名は、デフォルトでゲームプロジェクトの名前に設定されます。プラグインが作成するすべての AWS リソースは、ゲーム名の値を参照します。
  + ポート範囲、メモリ制限、vCPU 制限は、コンテナフリートの設定です。これらの値のカスタマイズの詳細については、接続ポート範囲については[ネットワーク接続を構成する](containers-design-fleet.md#containers-custom-network)、リソース制限については「[リソース制限の設定](containers-design-fleet.md#containers-design-fleet-limits)」を参照してください。
  + コンテナイメージタグは、Amazon ECR でコンテナイメージを分類するために使用されます。デフォルト値は `unity-gamelift-plugin` です。

### デプロイシナリオのオプション
<a name="unity-plug-in-container-configure-scenarios"></a>

#### 単一リージョンコンテナフリート
<a name="w2aab9c11b9c21c27c13b7b3b1"></a>

このシナリオでは、ゲームサーバーを 1 つのコンテナフリートにデプロイします。これは、 AWS とのサーバー統合とコンテナ設定をテストするための出発点として最適です。次のリソースをデプロイします。
+ Amazon GameLift Servers コンテナグループ定義では、コンテナイメージをコンテナフリートにデプロイして実行する方法について説明します。
+ Amazon GameLift Servers ゲームサーバーコンテナがインストールされ実行されている、エイリアス付きのコンテナフリート (オンデマンド)。
+ プレイヤーが認証してゲームを開始するための Amazon Cognito ユーザープールとクライアント。
+ ユーザープールと API をリンクする API ゲートウェイオーソライザー。
+ API ゲートウェイへの過剰なプレイヤー呼び出しをスロットリングするための Web アクセスコントロールリスト (ACL)。
+ ゲームセッションのリクエストやゲームへの参加など、ゲームクライアントに代わって Amazon GameLift Servers サービスにリクエストを行うバックエンドサービス。
  + プレイヤーがゲームセッションスロットをリクエストするための API ゲートウェイ \$1 Lambda 関数。この関数は、何も利用できない場合に `CreateGameSession()` を呼び出します。
  + プレイヤーがゲームリクエストの接続情報を取得するための API ゲートウェイ \$1 Lambda 関数。

#### FlexMatch を使用した単一リージョンコンテナフリート
<a name="w2aab9c11b9c21c27c13b7b3b3"></a>

このシナリオでは、ゲームサーバーをコンテナフリートにデプロイし、ゲームセッションの配置を設定し、FlexMatch マッチメーキングを設定します。このシナリオは、ホスティングソリューション用のマッチメーカーコンポーネントの設計を開始する準備ができたときに役立ちます。このシナリオでは、このソリューションための基本リソースを作成し、必要に応じて後でカスタマイズできます。次のリソースをデプロイします。
+ Amazon GameLift Servers コンテナフリートでコンテナイメージをデプロイして実行する方法を説明するコンテナグループ定義。
+ Amazon GameLift Servers ゲームサーバーコンテナがインストールされ実行されている、エイリアス付きのコンテナフリート (オンデマンド)。
+ FlexMatch のマッチメーキング設定とプレイヤーのリクエストとフォームマッチを受け入れるためのマッチメーキングルールセット。
+ (実行可能性、コスト、プレイヤーレイテンシーなどに基づいて) 最適なホスティングリソースを見つけ、ゲームセッションを開始することで、提案されたマッチのリクエストに応える Amazon GameLift Servers ゲームセッションプレイスメントキュー。
+ プレイヤーが認証してゲームを開始するための Amazon Cognito ユーザープールとクライアント。
+ ユーザープールと API をリンクする API ゲートウェイオーソライザー。
+ API ゲートウェイへの過剰なプレイヤー呼び出しをスロットリングするための Web アクセスコントロールリスト (ACL)。
+ ゲームセッションのリクエストやゲームへの参加など、ゲームクライアントに代わって Amazon GameLift Servers サービスにリクエストを行うバックエンドサービス。
  + プレイヤーがゲームセッションスロットをリクエストするための API ゲートウェイ \$1 Lambda 関数。この関数は、何も利用できない場合に `StartMatchmaking()` を呼び出します。
  + プレイヤーがゲームリクエストの接続情報を取得するための API ゲートウェイ \$1 Lambda 関数。
+ DynamoDB テーブルには、プレイヤーのマッチメーキングチケットとゲームセッション情報を保存できます。
+ GameSessionQueue イベントを処理する SNS トピック \$1 Lambda 関数。

## コンテナフリートをデプロイする
<a name="unity-plug-in-container-deploy"></a>

フリート設定が完了したら、**[コンテナフリートをデプロイ]** ボタンを選択してデプロイを開始します。このプロセスには、プラグインがコンテナイメージを作成して ECR にプッシュし、コンテナフリートのホスティングリソースをプロビジョニングし、選択したホスティングソリューションシナリオのフリートやその他の AWS リソースをデプロイするまでに数分かかることがあります。

デプロイを開始すると、各ステップの進行状況を追跡できます。設定によっては、次の手順が含まれる場合があります。
+ コンテナイメージの設定
+ Amazon ECR リポジトリの作成 
+ イメージの構築と Amazon ECR へのプッシュ
+ コンテナグループ定義の作成
+ コンテナフリートの作成

デプロイの詳細については、**[ AWS マネジメントコンソールで表示]** を選択します。コンテナフリートがアクティブステータスに達すると、フリートはゲームセッションをホストする準備ができているサーバープロセスで実行しているコンテナをアクティブに実行します。

デプロイが完了すると、ゲームセッションをホストし、プレイヤー接続を受け入れる準備ができている作業コンテナフリートがあります。

進行中のデプロイを停止することはできません。デプロイが不正な状態になった場合、または失敗した場合は、**[デプロイをリセット]** オプションを使用して最初からやり直すことができます。

## クライアントの起動
<a name="unity-plug-in-container-launch"></a>

この時点で、Amazon GameLift Servers でホストされているマルチプレイヤーゲームを起動してプレイするために必要なタスクはすべて完了しています。ゲームをプレイするには、**[クライアントを起動]** を選択してゲームクライアントのローカルインスタンスを起動します。
+ シングルフリートシナリオをデプロイした場合、1 人のプレイヤーで 1 つのクライアントインスタンスを開き、サーバーマップに入って動き回ることができます。ゲームクライアントの 2 つ目のインスタンスを開き、同じサーバーゲームマップに 2 人目のプレイヤーを追加できます。
+ FlexMatch シナリオをデプロイした場合、ホスティングソリューションは少なくとも 2 つのゲームクライアントがマッチメイキングリクエストを行うのを待ちます。少なくとも 2 つのインスタンスのゲームクライアントを、1 人のプレイヤーとともに開きます。2 人のプレイヤーがマッチングされ、マッチングのゲームセッションに参加するように求められます。

## コンテナフリートの作成
<a name="unity-plug-in-container-update"></a>

マネージドコンテナホスティングソリューションを正常にデプロイした場合は、**[デプロイを更新]** 機能を使用できます。このオプションを使用すると、1 つのフリートを作成することなく、デプロイされたコンテナフリートの設定を更新できます。

デプロイを更新する際には、別のゲームサーバービルドでコンテナイメージをデプロイしたり、Amazon ECR リポジトリを変更したり、別のデプロイシナリオを選択したり、オプションの設定をカスタマイズしたりできます。

変更をデプロイする準備ができたら、[更新] を選択します。デプロイの更新に必要な時間は、完全なデプロイに似ています。デプロイの詳細については、 ** AWS マネジメントコンソールで表示** を選択します。

## デプロイされたリソースをクリーンアップします。
<a name="unity-plug-in-container-cleanup"></a>

ベストプラクティスとして、不要になったマネージドコンテナソリューションの AWS リソースをすぐにクリーンアップします。これらのリソースを削除しないと、引き続きコストが発生する可能性があります。

リソースを削除するには、次の作業を行います。
+ マネージドコンテナリソーススタック。このスタックのリソースは、選択したデプロイシナリオによって異なります。スタック全体を削除するには、 CloudFormation コンソールを使用します。Amazon GameLift Servers プラグインから生成されたスタックは、命名規則 `GameLiftPluginForUnity-{GameName}-Containers` を使用します。スタックの削除プロセスが完了するまで待ってから、プラグインで新しいマネージドコンテナのデプロイを開始します。詳細については、「[CloudFormation コンソールからスタックを削除する](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)」を参照してください。
+ Amazon ECR リポジトリ。プラグインを使用してコンテナイメージのリポジトリを作成した場合は、不要になったリポジトリを削除できます。マネージドコンテナのデプロイをリセットする前にリポジトリを削除する必要はありません。デプロイを更新またはリセットすると、別のリポジトリを使用するように指示されない限り、プラグインは同じリポジトリを自動的に使用します。詳細については、「[Amazon ECR のプライベートリポジトリの削除](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-delete.html)」を参照してください。