カスタムゲームサーバー構築を Amazon GameLift にアップロードする - Amazon GameLift

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

カスタムゲームサーバー構築を Amazon GameLift にアップロードする

ゲームサーバーを Amazon GameLift と統合したら、ビルドファイルを Amazon GameLift にアップロードします。このトピックでは、ゲームのビルドファイルをパッケージ化し、オプションのびるインストールスクリプトを作成した後、AWS Command Line Interface (AWS CLI) または AWS SDK を使用してそれらのファイルをアップロードする方法について説明します。

ゲームビルドファイルをパッケージ化する

設定したゲームサーバーを Amazon GameLift にアップロードする前に、ゲームビルドファイルをビルドディレクトリにパッケージ化してください。このディレクトリには、ゲームサーバーの実行と、ゲームセッションのホストを行うために必要なコンポーネントがすべて含まれている必要があります。以下に例を示します。

  • [Game server binaries] (ゲームサーバーバイナリ) - ゲームサーバーを実行するために必要なバイナリファイル。ビルドには、同じプラットフォームで実行するように構築された複数のゲームサーバーのバイナリを含めることができます。サポートされているプラットフォームのリストについては、「Amazon での開発サポート GameLift」を参照してください。

  • [依存関係] - ゲームサーバー実行ファイルを実行するためのすべての依存関係ファイル。例として、アセット、設定ファイル、依存ライブラリがあります。

    注記

    C++ 用 Amazon GameLift サーバー SDK で作成されたゲームビルド (Unreal プラグインで作成されたものを含む) には、サーバー SDK を構築したのと同じバージョンの OpenSSL 用の OpenSSL DLL を含めてください。詳細については、サーバー SDK README ファイルを参照してください。

  • [インストールスクリプト] (オプション) – Amazon GameLift ホスティングサーバーにゲームビルドをインストールするタスクを処理するスクリプトファイル。このファイルをビルドディレクトリのルートに配置します。Amazon GameLift はフリート作成の一部としてインストールスクリプトを実行します。

インストールスクリプトを含む、ビルド内の任意のアプリケーションについて、AWS の他のサービスのリソースに安全にアクセスするようにセットアップできます。これを行う方法については、「フリートの他の AWS リソースと通信する」を参照してください。

ビルドファイルをパッケージ化したら、ターゲット OS のクリーンインストールでゲームサーバーを実行できることを確認します。これにより、必要な依存関係がすべてパッケージに含められ、インストールスクリプトが正しいことを検証できます。

Amazon GameLift ビルドを作成する

ビルドを作成してファイルをアップロードするときは、いくつかのオプションがあります。

いずれの方法でも、Amazon GameLift は、一意のビルド ID と他のメタデータを使用して新しいビルドリソースを作成します。ビルドは [初期化済み] ステータスで開始されます。Amazon GameLift によって正常にゲームサーバーファイルが取得されると、ビルドは [準備完了] ステータスに移行されます。

ビルドの準備ができたら、新しい Amazon GameLift フリートにデプロイできます。詳細については、「Amazon GameLift マネージドフリートを作成する」を参照してください。Amazon GameLift によって新しいフリートが設定されると、ビルドファイルが各フリートインスタンスにダウンロードされ、ビルドファイルがインストールされます。

ファイルディレクトリから構築を作成する

ローカルディレクトリなどの任意のロケーションに保存済みのパッケージゲームビルドを作成するには、upload-build AWS CLI コマンドを使用します。このコマンドで Amazon GameLift に新しいビルドレコードを作成し、指定した場所からファイルをアップロードします。

アップロードリクエストを送信します。コマンドラインウィンドウで、upload-build コマンドとパラメータを入力します。

aws gamelift upload-build \ --name user-defined name of build \ --operating-system supported OS \ --server-sdk-version Amazon GameLift server SDK version \ --build-root build path \ --build-version user-defined build number \ --region region name
  • operating-system – ゲームサーバービルドのランタイム環境。OS を指定する必要があります。これを後で更新することはできません。

  • server-sdk-version – ゲームサーバーが統合されている Amazon GameLift サーバー SDK のバージョン。値を指定しない場合、Amazon GameLift はデフォルト値の 4.0.2 が使用されます。間違ったサーバー SDK バージョンを指定すると、Amazon GameLift サービスへの接続を確立するために InitSdk を呼び出すとき、ゲームサーバービルドが失敗する可能性があります。

  • build-root – ビルドファイルのディレクトリパス。

  • name – 新しいビルドのわかりやすい名前。

  • build-version – ビルドファイルのバージョンの詳細。

  • region – ビルドを作成する AWS リージョン。フリートをデプロイする予定のリージョンにビルドを作成します。ゲームを複数のリージョンにデプロイする場合、各リージョンにビルドを作成します。

    注記

    aws configure get region を使用して現在のデフォルトのリージョンを表示します。デフォルトのリージョンを変更するには、aws configure set region region name コマンドを使用します。

aws gamelift upload-build \ --operating-system AMAZON_LINUX_2023 \ --server-sdk-version "5.0.0" \ --build-root "~/mygame" \ --name "My Game Nightly Build" \ --build-version "build 255" \ --region us-west-2
aws gamelift upload-build \ --operating-system WINDOWS_2016 \ --server-sdk-version "5.0.0" \ --build-root "C:\mygame" \ --name "My Game Nightly Build" \ --build-version "build 255" \ --region us-west-2

アップロードリクエストに応じて、Amazon GameLift はアップロードの進行状況を表示します。アップロードが成功すると、Amazon GameLift は新しいビルドレコード ID を返します。アップロードの時間はゲームファイルのサイズおよび接続速度によって異なります。

Amazon S3 内のファイルを使用して構築を作成する

Amazon S3 にビルドファイルを保管し、そしてそこから Amazon GameLift にアップロードすることができます。ビルドを作成するときに S3 バケットのロケーションを指定すると、Amazon GameLift は Amazon S3 から直接ビルドファイルを取得します。

ビルドリソースを作成するには
  1. 構築ファイルをAmazon S3 に保存する。パッケージ化されたビルドファイルを含む .zip ファイルを作成し、それを AWS アカウント の S3 バケットにアップロードします。バケットラベル付けとファイル名をメモしておきます。Amazon GameLift ビルドを作成するときに必要になります。

  2. Amazon GameLift にビルドファイルへのアクセス権を付与します。Amazon S3 でゲームビルドファイルにアクセスする」の指示に従って IAM ロールを作成します。ロールを作成したら、新しいロールの Amazon リソースネーム (ARN) をメモしておきます。ビルドを作成するときにこれが必要になります。

  3. ビルドを作成します。Amazon GameLift コンソールまたは AWS CLI を使用して新しいビルドレコードを作成します。「Amazon GameLift の IAM アクセス許可の例」の説明の通り、PassRole アクセス許可が必要です。

Console
  1. [Amazon GameLift コンソール] のナビゲーションペインで、[ホスティング][ビルド] を選択します。

  2. [ビルド] ページで [ビルドを作成] を選択します。

  3. [ビルドを作成] ページの [ビルド設定] で、次の操作を行います。

    1. [名前] にスクリプト名を入力します。

    2. [バージョン] に、バージョンを入力します。ビルドのコンテンツは更新できるので、バージョンデータは更新の追跡に役立ちます。

    3. [オペレーティングシステム (OS]) では、ゲームサーバービルドの OS を選択します。この値を後で更新することはできません。

    4. [ゲームサーバービルド] では、Amazon S3 にアップロードしたビルドオブジェクトの S3 URI を入力し、[オブジェクトのバージョン] を選択します。Amazon S3 URI とオブジェクトのバージョンを覚えていない場合は、[S3 の参照] を選択し、ビルドオブジェクトを検索します。

    5. [IAM ロール] では、Amazon GameLift に S3 バケットとビルドオブジェクトへのアクセスを許可するために作成したロールを選択します。

  4. (オプション) [タグ][キー][値] のペアを入力して、ビルドにタグを追加します。

  5. [Create] (作成) を選択します。

Amazon GameLift は、ID を新しいビルドに割り当て、指定した zip ファイルをアップロードします。[ビルド] ページでは、ステータスを含めて新しいビルドを確認できます。

AWS CLI

新しいビルドを定義し、サーバービルドファイルをアップロードするには、create-build コマンドを使用します。

  1. コマンドラインウィンドウを開き、AWS CLI を使用できるディレクトリに切り替えます。

  2. 次の create-build コマンドを入力します。

    aws gamelift create-build \ --name user-defined name of build \ --server-sdk-version Amazon GameLift server SDK version \ --operating-system supported OS \ --build-version user-defined build number \ --storage-location "Bucket"=S3 bucket label,"Key"=Build .zip file name,"RoleArn"=Access role ARN} \ --region region name
    • name – 新しいビルドのわかりやすい名前。

    • server-sdk-version – ゲームサーバーを Amazon GameLift と統合するために使用した Amazon GameLift サーバー SDK のバージョン。値を指定しない場合、Amazon GameLift はデフォルト値の 4.0.2 が使用されます。

    • operating-system – ゲームサーバービルドのランタイム環境。OS を指定する必要があります。これを後で更新することはできません。

    • build-version – ビルドファイルのバージョンの詳細。ゲームサーバーの新しいバージョンごとに新しいビルドリソースが必要になるため、この情報は役に立ちます。

    • storage-location

      • Bucket – ビルドを含む S3 バケットの名前。例: 「my_build_files」。

      • Key – ビルドファイルを含む .zip ファイルの名前。例: 「my_game_build_7.0.1, 7.0.2」。

      • RoleARN – 作成した IAM ロールに割り当てられた ARN。例: 「arn:aws:iam::111122223333:role/GameLiftAccess」 ポリシーの例については、Amazon S3 でゲームビルドファイルにアクセスするを参照してください。

    • region – フリートをデプロイする予定の AWS リージョンにビルドを作成します。ゲームを複数のリージョンにデプロイする場合、各リージョンにビルドを作成します。

      注記

      configure get コマンド を使用して現在のデフォルトリージョンを確認することをおすすめします。デフォルトのリージョンを変更するには、configure set コマンドを使用します。

    aws gamelift create-build \ --operating-system WINDOWS_2016 \ --storage-location "Bucket"="my_game_build_files","Key"="mygame_build_101.zip","RoleArn"="arn:aws:iam::111122223333:role/gamelift" \ --name "My Game Nightly Build" \ --build-version "build 101" \ --region us-west-2
  3. 新しいビルドを表示するには、describe-build コマンドを使用します。

構築ファイルを更新する

Amazon GameLift コンソールまたは update-buildAWS CLI コマンドを使用して、ビルドリソースのメタデータを更新できます。

Amazon GameLift ビルドを作成した後は、それに関連するビルドファイルを更新することはできません。新しいファイルセットごとに、新しい Amazon GameLift ビルドを作成します。upload-build コマンドを使用して、Amazon GameLift はリクエストごとに新しいビルドレコードを自動的に作成します。create-build コマンドを使用してビルドファイルを指定する場合は、新しいビルドの .zip ファイルを別の名前で Amazon S3 にアップロードし、その新しいファイル名を参照してビルドドを作成します。

更新したビルドをデプロイする場合は、次のヒントを試してみてください。

  • 必要に応じて、キューを使用し、フリートを交換します。Amazon GameLift でゲーム クライアントを設定するときは、フリートの代わりにキューを指定します。キューを使用する場合は、新しいビルドの新しいフリートをキューに追加し、古いフリートを削除します。詳細については、「ゲームセッションプレイスメント用の Amazon GameLiftt キューのセットアップ」を参照してください。

  • エイリアスを使用して、新しいゲームのビルドにプレイヤーを移行します。ゲーム クライアントを Amazon GameLift に統合するときは、フリート ID の代わりにフリートエイリアスを指定します。詳細については、「Amazon GameLift フリートにエイリアスを追加する」を参照してください。

  • ビルドの自動更新を設定します。Amazon GameLift デプロイをビルドシステムに組み込むためのサンプルスクリプトと情報については、AWS ゲームテックブログの「Amazon GameLift へのデプロイの自動化」を参照してください。

ビルドインストールスクリプトを追加する

ゲームビルドのオペレーティングシステム (OS) 用のインストールスクリプトを作成します。

  • Windows: 「install.bat」という名前のバッチファイルを作成します。

  • Linux: 「install.sh」という名前のシェルスクリプトファイルを作成します。

インストールスクリプトを作成するときは、次の点に留意してください。

  • このスクリプトはユーザー入力を一切受け付けません。

  • Amazon GameLift はビルドをインストールし、以下のロケーションのホスティングサーバー上のビルドパッケージにファイルディレクトリを再作成します。

    • Windows フリート: C:\game

    • Linux フリート: /local/game

  • Linux フリートのインストールプロセスで、run-as ユーザーは、インスタンスのファイル構造へのアクセスが制限されます。このユーザーは、ビルドファイルがインストールされているディレクトリに対しては完全な権限があります。インストールスクリプトが管理者アクセス許可を必要とするアクションを実行する場合は、sudo を使用して管理者アクセスを指定します。Windows フリートの run-as ユーザーには、デフォルトで管理者アクセス許可があります。インストールスクリプトに関連するアクセス許可の失敗により、スクリプトに問題があることを示すイベントメッセージが生成されます。

  • Amazon GameLift では、bash などの一般的なシェルインタープリタ言語がサポートされています。shebang (#!/bin/bash など) を、インストールスクリプトの先頭に追加します。目的のシェルコマンドのサポートについて確認するには、アクティブな Linux インスタンスにリモートにアクセスし、シェルコマンドを開きます。詳細については、「Amazon GameLift フリートインスタンスにリモート接続する」を参照してください。

  • インストールスクリプトは VPC ピアリング接続に依存できません。VPC ピアリング接続は、Amazon GameLift がフリートインスタンスにビルドをインストールするまで使用できません。

例 Windows インストール bash ファイル

この install.bat ファイルの例では、ゲームサーバーに必要な Visual C++ ランタイムコンポーネントをインストールし、結果をログファイルに書き込みます。スクリプトはルートのビルドパッケージにコンポーネントファイルを含めます。

vcredist_x64.exe /install /quiet /norestart /log c:\game\vcredist_2013_x64.log
例 Linux インストールシェルスクリプト

この install.sh ファイルの例では、インストールスクリプトで bash を使用し、結果をログファイルに書き込みます。

#!/bin/bash echo 'Hello World' > install.log

この install.sh ファイルの例では、Amazon CloudWatch エージェントを使用してシステムレベルおよびカスタムのメトリクスを収集し、ログローテーションを処理する方法を示します。Amazon GameLift はサービス VPC で実行されているため、Amazon GameLift がユーザーに代わって AWS Identity and Access Management (IAM) ロールを引き受けるためのアクセス許可を与える必要があります。Amazon GameLift がロールを引き受けることができるようにするには、AWS マネージドポリシー CloudWatchAgentAdminPolicy を含むロールを作成し、フリートを作成するときにそのロールを使用します。

sudo yum install -y amazon-cloudwatch-agent sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm sudo yum install -y collectd cat <<'EOF' > /tmp/config.json { "agent": { "metrics_collection_interval": 60, "run_as_user": "root", "credentials": { "role_arn": "arn:aws:iam::account#:role/rolename" } }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/tmp/log", "log_group_name": "gllog", "log_stream_name": "{instance_id}" } ] } } }, "metrics": { "namespace": "GL_Metric", "append_dimensions": { "ImageId": "${aws:ImageId}", "InstanceId": "${aws:InstanceId}", "InstanceType": "${aws:InstanceType}" }, "metrics_collected": { // Configure metrics you want to collect. // For more information, see Manually create or edit the CloudWatch agent configuration file. } } } EOF sudo mv /tmp/config.json /opt/aws/amazon-cloudwatch-agent/bin/config.json sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json sudo systemctl enable amazon-cloudwatch-agent.service