

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

# Amazon GameLift Servers 用のコンテナイメージを構築する
<a name="containers-prepare-images"></a>

このトピックでは、Amazon GameLift Servers で使用するゲームサーバーソフトウェアでコンテナイメージを作成する方法について説明します。ゲームサーバーコンテナイメージには、ゲームサーバー実行可能ファイルと実行する必要がある依存関係が含まれます。ゲームサーバーコンテナイメージは、Amazon GameLift Servers マネージドコンテナホスティングソリューションで使用されます。完全なソリューションの構築の詳細については、以下を参照してください。
+ [Amazon GameLift Servers マネージドコンテナでホスティングするための開発ロードマップ](gamelift-roadmap-containers.md)
+ [Amazon GameLift Servers におけるコンテナの仕組み](containers-howitworks.md)

ゲームサーバーコンテナイメージを Amazon GameLift Servers コンテナフリートにデプロイする準備を整えるには、次のタスクを実行します。これらのタスクを開始する前に、ゲームサーバーコードをAmazon GameLift Servers サーバー SDK と統合します。

**Topics**
+ [ゲームサーバーコンテナイメージを作成する](#containers-prepare-images-build)
+ [コンテナイメージを Amazon ECR にプッシュする](#containers-prepare-images-upload)

## ゲームサーバーコンテナイメージを作成する
<a name="containers-prepare-images-build"></a>

Linux ベースのプラットフォームで作業するとき、または Docker がインストールされている Windows Subsystem for Linux (WSL) を使用するときは、次の手順に従います。

**ゲームサーバーコンテナイメージを作成するには**

1. ゲームサーバーソフトウェアを使用して作業ディレクトリを準備します。ローカルマシンで、作業ディレクトリを作成して、ゲームサーバーコンテナのファイルを整理します。コンテナイメージは、ホスティング用の Amazon GameLift Servers リソースにコンテナをデプロイするときに、このファイル構造を使用します。例えば、次のようになります。

   ```
   [~/]$ mkdir -p work/glc/gamebuild && cd work && find .
   .
   ./glc
   ./glc/gamebuild
   ```
**注記**  
この機能を試みているが、ゲームサーバーをまだ構築していない場合は、GitHub で利用可能なサンプルゲームサーバー [SimpleServer](https://github.com/aws-solutions-library-samples/guidance-for-custom-game-backend-hosting-on-aws/tree/main/BackendFeatures/AmazonGameLiftIntegration/SimpleServer) をお試しください。

1. 提供されたテンプレートを使用して新しい Dockerfile を作成します。

1. Dockerfile テンプレートの指示に従って、独自の使用のために更新します。
   + 必要に応じてベースイメージを更新します。
   + ゲームサーバービルドの環境変数を設定します。

1. コンテナイメージを構築します。独自のリポジトリ名を指定して、`docker build` を実行します。例えば、次のようになります。

   ```
   [~/work/glc]$ docker build -t <local repository name>:<optional tag> .
   ```

   この例に示すように、`docker images` コマンドを使用してリポジトリとイメージ ID を表示できます。

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

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

```
# Base image
# ----------
  # Add the base image that you want to use,
  # 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 gamebuild directory to the env variable below.
  # The game build provided here needs to be integrated with server sdk for Amazon GameLift Servers.
ENV GAME_BUILD_DIRECTORY="<ADD_GAME_BUILD_DIRECTORY>" \
  #
# Game executable and launch parameters
# ---------------
  # 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 server sdk for Amazon GameLift Servers.
  # This template assumes that the executable path is relative to the game build directory.
  # Add any launch parameters to pass into your executable in the 'LAUNCH_PARAMS' env variable below.
  # Add 'HOME_DIR' to identify where the game executable and logs exist.
GAME_EXECUTABLE="<ADD NAME OF EXECUTABLE WITHIN THE GAME DIRECTORY>" \
LAUNCH_PARAMS=<ADD LAUNCH PARAMETERS> \
HOME_DIR="/local/game" \


# Install dependencies as necessary
RUN yum install -y shadow-utils
    
RUN mkdir -p $HOME_DIR
COPY ./$GAME_BUILD_DIRECTORY/ $HOME_DIR
    
# Change directory to home
WORKDIR $HOME_DIR
    
# Set up for 'gamelift' user
RUN useradd -m gamelift && \
  echo "gamelift ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
  chown -R gamelift:gamelift $HOME_DIR

# Add permissions to game build
RUN chmod +x ./$GAME_EXECUTABLE
    
USER gamelift
    
# 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"]
```

## コンテナイメージを Amazon ECR にプッシュする
<a name="containers-prepare-images-upload"></a>

Amazon GameLift Servers にデプロイするコンテナイメージを作成したら、そのイメージを Amazon ECR のパブリックリポジトリまたはプライベートリポジトリに保存します。このリポジトリには URI 値が割り当てられ、Amazon GameLift Servers を使用してコンテナフリートにデプロイするためのイメージのスナップショットを作成します。

**注記**  
Amazon ECR プライベートリポジトリがまだない場合は、[作成します](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)。

**コンテナイメージを Amazon ECR にプッシュする**

1. Amazon ECR 認証情報を取得します。コンテナイメージを Amazon ECR にプッシュする前に、まず一時的な形式で AWS 認証情報を取得し、Docker に提供します。Docker では、ログインにこれらの認証情報が必要です。

   ```
   [~/work/glc]$ aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.us-west-2.amazonaws.com
   WARNING! Your password will be stored unencrypted in 
   /home/user-name/.docker/config.json.
   Configure a credential helper to remove this warning.
   See https://docs.docker.com/engine/reference/commandline/login/#credentials-store
   
   Login Succeeded
   ```

1. 使用する [Amazon ECR プライベートリポジトリ](https://console.aws.amazon.com/ecr/private-registry/repositories)の URI をコピーします。

1. コンテナイメージに Amazon ECR タグを付与します。  
**Example**  

   ```
   [~/work/glc]$ docker tag <IMAGE ID from above> <Amazon ECR private repository URI>:<optional tag>
   ```

1. コンテナイメージを Amazon ECR にプッシュする  
**Example**  

   ```
   [~/work/glc]$ docker image push  <Amazon ECR private repository URI>
   ```