メインコンテンツまでスキップ

専用サーバーのアップロードとビルド設定の作成を自動化する(Extend SDKを使用)

Last updated on July 14, 2026

注釈:本資料はAI技術を用いて翻訳されています。

AccelByte Multiplayer Servers(AMS)向けの専用サーバーアップロードとビルド設定の作成を自動化することで、AMS上で新しいゲームサーバービルドのテストをシームレスに開始できます。このガイドでは、CI/CDパイプラインやビルドマシンなどで使用できる自動化を作成する手順を説明します。自動化を行う前に、専用サーバービルドのアップロード開発フリートでのビルド設定の使用の概念を理解しておいてください。

本番フリートを使用している場合は、代わりにフリート作成の自動化を参照してください。

前提条件

  • 正しい権限を持つIAMクライアントがあることを確認してください。IAMクライアントの作成方法については、IAMクライアントの作成を参照してください。
    • プライベートクラウドの場合は、権限 ADMIN:NAMESPACE:{namespace}:ARMADA:FLEET (Create)(ビルド設定の作成用)と AMS:UPLOAD (Create, Update)(専用サーバーイメージのアップロード用)を追加してください。
    • パブリッククラウドの場合は、Dedicated Server Toolsテンプレートを使用してください。このテンプレートには、必要なDedicated Server ToolkitおよびDedicated Serverの権限が含まれています。
  • ビルドマシンにAMSコマンドラインインターフェース(CLI)ツールをダウンロードしてください。ダウンロードには認証が不要なため、パイプラインから最新バージョンをダウンロードできます(例:https://cdn.prod.ams.accelbyte.io/linux_amd64/ams)。

専用サーバーイメージのアップロード

スクリプト内でAMS CLIを使用して、専用サーバーイメージをAMSにアップロードします。CLIツールはコマンドラインから手動で実行することもできますが、このガイドではプログラムから呼び出します。

APIを介したビルド設定の作成

APIエンドポイントを呼び出してビルド設定を作成します。詳細は以下のとおりです。APIエンドポイントを直接呼び出す代わりに、アクセストークンの取得と必要なエンドポイントの呼び出しを簡素化することで開発者がAccelByte Gaming Services(AGS)を呼び出しやすくする、AccelByteのExtend SDKの使用を推奨します。

または、AccelByte APIエクスプローラーのこのセクションで説明されているように、server-configurationsエンドポイントにリクエストを送信することもできます。

  • name: 一意のビルド設定名(通常はゲームまたはビルドバージョンに合わせます。例:"mygame-v0001")。
  • imageId: アップロードしたビルドの専用サーバーイメージID。
  • commandLineArguments: 専用サーバーを起動するためのコマンドライン引数。
  • expiresAt: ビルド設定が失効してクリーンアップされる日時(例:2025-04-18T10:20:00.000Z)。

サンプルスクリプト:イメージのアップロードとビルド設定の作成(Extend SDK)

以下のサンプルスクリプトは、専用サーバーイメージをアップロードし、そのイメージのビルド設定を作成します。ビルドシステムの要件に応じて調整してください。このスクリプトは、アップロードされたイメージのIDと作成されたビルド設定の名前を出力します。スクリプトを実行すると、ビルド設定はAdmin Portalに表示され、専用サーバーをクレームする際に使用できるようになります。このスクリプトはAccelByte Extend SDKを使用しています。

このサンプルは、GitHub AMS Samples Repositoryにもあります。

サンプルを実行する前に、次の環境変数を設定してください。

export AB_BASE_URL="https://<yourenvironment>.accelbyte.io" # For public cloud use https://<studionamespace>-<gamenamespace>.prod.gamingservices.accelbyte.io
export AB_CLIENT_ID="your_client_id"
export AB_CLIENT_SECRET="your_client_secret"
export AB_NAMESPACE="your_namespace"
import accelbyte_py_sdk
import accelbyte_py_sdk.services.auth as auth_service
import json
import os
import re
import subprocess
from accelbyte_py_sdk.api.ams.models import ApiDevelopmentServerConfigurationCreateRequest
from accelbyte_py_sdk.api.ams.operations.development import DevelopmentServerConfigurationCreate
from accelbyte_py_sdk.core import EnvironmentConfigRepository, run_request
from datetime import datetime, timedelta

BUILD_VERSION = datetime.now().strftime('%Y-%m-%d_%H-%M')

# Constants, update these with your actual values
CONFIG_NAME = f"mygame_{BUILD_VERSION}" # Unique configuration name (max 128 chars)
COMMAND_LINE = "-dsid ${dsid} -port ${default_port}" # Command line arguments passed to your DS
AMS_CLI_PATH = "./ams-cli" # AMS CLI executable path.
DS_FOLDER_PATH = "build" # Filepath containing your DS executable
DS_EXECUTABLE_NAME = "runserver" # Filename of your DS executable
DS_IMAGE_NAME = f"image-{BUILD_VERSION}" # Unique image name

AB_BASE_URL, AB_CLIENT_ID, AB_CLIENT_SECRET, AB_NAMESPACE = (
os.getenv(var) for var in ["AB_BASE_URL", "AB_CLIENT_ID", "AB_CLIENT_SECRET", "AB_NAMESPACE"]
)

def upload_image():
if not os.path.exists(AMS_CLI_PATH):
print("AMS CLI not found")
exit(1)

hostname = AB_BASE_URL.split("//")[-1]
command = [
AMS_CLI_PATH,
"upload",
"-c", AB_CLIENT_ID,
"-s", AB_CLIENT_SECRET,
"-e", DS_EXECUTABLE_NAME,
"-n", DS_IMAGE_NAME,
"-H", hostname,
"-p", DS_FOLDER_PATH
]
try:
# Execute the CLI to upload the DS
result = subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print("Upload successful.")
image_id = re.search(r'img_[a-zA-Z0-9_-]+', result.stderr.decode()).group(0)
print(f"DS Image ID: {image_id}")
return image_id

except subprocess.CalledProcessError as e:
print("An error occurred during the upload process:" + e.stderr.decode())

def create_build_config(image_id):
# Initialize the SDK (uses AB_BASE_URL, AB_CLIENT_ID, AB_CLIENT_SECRET, and AB_NAMESPACE)
accelbyte_py_sdk.initialize()

# Login using client credentials
token, error = auth_service.login_client()
if error:
print("Login failed:", error)
exit(1)

# Set expiration to 30 days from now
expires_at = (datetime.utcnow() + timedelta(days=30)).isoformat() + "Z"

# Build the request body
body = ApiDevelopmentServerConfigurationCreateRequest.create(
command_line_arguments=COMMAND_LINE,
expires_at=expires_at,
image_id=image_id,
name=CONFIG_NAME
)

# Create the operation using the extend SDK's create method
operation = DevelopmentServerConfigurationCreate.create(
body=body,
namespace=AB_NAMESPACE
)

# Execute the operation
result, error = run_request(operation)
if error:
print("Error creating configuration:", error)
exit(1)

print("Your build configuration:")
print(json.dumps(result.to_dict(), indent=2))

if __name__ == "__main__":
for var_name in ["AMS_CLI_PATH", "AB_CLIENT_ID", "AB_NAMESPACE", "AB_CLIENT_SECRET", "DS_EXECUTABLE_NAME", "DS_IMAGE_NAME", "DS_FOLDER_PATH"]:
var_value = globals().get(var_name)
if var_value is None or var_value == "":
raise ValueError(f"Missing or empty required variable: {var_name}")

image_id = upload_image()
if image_id is None or image_id == "":
exit(1)
create_build_config(image_id)
print("Done.")