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

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

Last updated on February 4, 2026

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

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

プロダクションフリートを使用している場合は、代わりにフリート作成を自動化するを参照してください。

前提条件

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

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

スクリプトで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と作成されたビルド設定の名前を出力します。スクリプトを実行すると、ビルド設定が管理ポータルに表示され、専用サーバーをクレームする際に使用できます。このスクリプトは、AccelByte Extend SDKを使用します。

このサンプルは、GitHub AMS Samplesリポジトリでも見つけることができます。

サンプルを実行する前に、次の環境変数を設定します。

export AB_BASE_URL="https://<yourenvironment>.accelbyte.io" # For shared 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.")