AGS CLI for Extend
注釈:本資料はAI技術を用いて翻訳されています。
概要
Extend の現行作業には AGS CLI を使います。Extend Helper CLI は非推奨です。そのページはサポート終了日を含む履歴リファレンスとして残しています。
インストールとサインインの手順は Install and sign in にあります。旧 CLI からのコマンド対応表は Migrate from extend-helper-cli にあります。
前提条件
-
Docker(Docker Desktop 4.30+ / Docker Engine v23.0+)
-
Linux の場合:
-
Ubuntu リポジトリからインストールするには、
sudo apt update && sudo apt install docker.io docker-buildx docker-compose-v2を実行します。 -
ユーザーを docker グループに追加します:
sudo usermod -aG docker $USER。 -
変更を反映するため、ログアウトしてから再度ログインします。
-
-
Windows/macOS の場合:
Docker Desktop のインストールについては、Docker のドキュメント(Windows または macOS)に従ってください。
docker version
...
Server: Docker Desktop
Engine:
Version: 24.0.5
-
-
AGS 環境へのアクセス。
Base URLを控えておきます。-
AGS Public Cloud の例:
https://spaceshooter.prod.gamingservices.accelbyte.io -
AGS Private Cloud の例:
https://dev.customer.accelbyte.io
-
-
次の権限を持つ機密 IAM クライアントを作成します。クライアントの作成方法は Manage access control for applications を参照してください。
Client IDとClient Secretを控えておきます。-
AGS Private Cloud の場合、次の権限を追加します:
ADMIN:NAMESPACE:{namespace}:EXTEND:APP [CREATE, READ, UPDATE, DELETE]ADMIN:NAMESPACE:{namespace}:EXTEND:DEPLOYMENT [CREATE]ADMIN:NAMESPACE:{namespace}:EXTEND:REPOCREDENTIALS [READ]ADMIN:NAMESPACE:{namespace}:EXTEND:SECRET [CREATE, READ, UPDATE]ADMIN:NAMESPACE:{namespace}:EXTEND:VARIABLE [CREATE, READ, UPDATE]ADMIN:NAMESPACE:{namespace}:EXTEND:IMAGE [READ]
-
AGS Public Cloud の場合、次の権限グループにチェックを入れます:
- Extend > App Management: Read, Create, Update, Delete
- Extend > Configuration Secret Management: Read, Create, Update
- Extend > Configuration Variable Management: Read, Create, Update
- Extend > Deployment Management: Create
- Extend > Extend app image repository access: Read
警告AGS Public Cloud ユーザー向け: 上記の権限のみを持つ、AGS CLI 専用の OAuth クライアントを作成してください。権限が多すぎる OAuth クライアントを使うと、サーバーが "Request Header or Cookie Too Large" エラーで CLI の HTTP リクエストを拒否することがあります。
-
-
AGS CLI をインストールします。Install and sign in に従ってください。
セットアップ
AGS CLI は .env ファイルを読みません。環境変数で資格情報を設定するか、ags auth login に渡します。
ターミナルから次の値をエクスポートします(プレースホルダーを実際の資格情報に置き換えてください):
export AGS_BASE_URL=<your_base_url>
export AGS_CLIENT_ID=<your_client_id>
export AGS_CLIENT_SECRET=<your_client_secret>
任意:
AGS_ACCESS_TOKEN— クライアントシークレットの代わりに既存のベアラートークンを使う場合AGS_NAMESPACE—--namespaceを省略したときのデフォルト名前空間
これらは Extend Helper CLI が使う AB_* 変数ではありません。
セッションごとに一度サインインします:
ags auth login
スクリプトや CI ジョブでは、機密 IAM クライアントでサインインします:
ags auth login --grant client-credentials --no-input
--namespace(-n)はグローバルフラグです。--yes(-y)は確認プロンプトをスキップします。Extend Helper CLI の --confirm は受け付けられません。
使い方
Extend サブコマンドの一覧を表示するには:
ags extend --help
Extend アプリの作成
create-app は JSON 本体を使います。シナリオは --scenario フラグではなく --json に入れます。
ags extend create-app --namespace <my-game-namespace> --app <my-extend-app> --json '{"scenario":"service-extension"}' --yes
利用可能な scenario の値:
function-overrideservice-extensionevent-handler
応答例
{
"appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"appName": "<my-extend-app>",
"appRepoArn": "",
"appRepoUrl": "",
"basePath": "xxx-xxxx-xxxx",
"CPU": {
"cpuLimit": 1550,
"requestCPU": 1000
},
"createdAt": "2024-01-01T00:00:00.000Z",
"deletedAt": "",
"deploymentCreatedAt": "",
"deploymentId": "",
"deploymentImageTag": "",
"memory": {
"memoryLimit": 3300,
"requestMemory": 350
},
"message": "",
"replica": {
"maxReplica": 10,
"minReplica": 1,
"replicaLimit": 60
},
"scenario": "service-extension",
"servicePublicURL": "https://xxxx.accelbyte.io/xxx-xxxx-xxxx",
"serviceURL": "",
"updatedAt": "2024-01-31T00:00:00.000Z"
}
イメージのアップロードまたはデプロイの準備が整うまで待つには、--wait と --wait-interval <seconds>(デフォルト: 10)、--wait-limit <seconds>(デフォルト: 600)を使います。
ags extend create-app --namespace <my-game-namespace> --app <my-extend-app> --json '{"scenario":"service-extension"}' --yes --wait
Extend アプリ情報の取得
1 つの Extend アプリの詳細を取得するには get-app-info を使います:
ags extend get-app-info --namespace <my-game-namespace> --app <my-extend-app>
{
"appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"appName": "<my-extend-app>",
"appRepoArn": "arn:aws:ecr:xxxxxxxxx:xxxxxxxxxxxx:xxxx/xxxx/xxxx/xxxx/xxxx/xxx-xxxx-xxxx/xxxx",
"appRepoUrl": "xxxx.xxxx.xxxx.xxxxxxxxx.xxxx.xxxx/xxxx/xxxx/xxxx/xxxx/xxx-xxxx-xxxx/xxxx",
"appStatus": "app-undeployed",
"app_release_status": "U",
"basePath": "xxx-xxxx-xxxx",
"createdAt": "2024-01-01T00:00:00.000Z",
"scenario": "service-extension",
"updatedAt": "2024-01-31T00:00:00.000Z"
}
get-app-info に --path フラグはありません。--format json を使い、必要なフィールドを読んでください:
ags extend get-app-info --namespace <my-game-namespace> --app <my-extend-app> --format json | jq -r .appName
ags extend get-app-info --namespace <my-game-namespace> --app <my-extend-app> --format json | jq -r .appRepoUrl
Extend アプリコンテナイメージをプッシュするための認証情報の取得
1 つの名前空間とアプリ向けに Docker を Extend アプリコンテナレジストリへサインインさせるには、docker-login を使います:
ags extend docker-login --namespace <my-game-namespace> --app <my-extend-app>
応答例
Login Succeeded
認証情報はそのゲーム名前空間と Extend アプリにスコープされます。別の名前空間またはアプリでは、再度 docker-login を実行してください。
docker-login が失敗する場合は、Docker ログインが失敗する を参照してください。
Extend アプリコンテナイメージのプッシュ
image-upload はコンテナイメージをビルドし、タグ付けして、Extend アプリコンテナレジストリへプッシュします。
ags extend image-upload --namespace <my-game-namespace> --app <my-extend-app> \
--image-tag v1.0.0 \
--work-dir <path-to-directory-containing-service-dockerfile>
--app と --image-tag は必須です。任意フラグには --dockerfile、--platform、--work-dir、--retry-limit、--retry-interval、--retry-rate があります。
ビルド前にレジストリへ認証するには --login を渡します。別途 docker-login を実行する必要はありません:
ags extend image-upload --namespace <my-game-namespace> --app <my-extend-app> \
--image-tag v1.0.0 \
--work-dir <path-to-directory-containing-service-dockerfile> \
--login
アップロードが失敗した場合は、--retry-limit(任意で --retry-interval と --retry-rate)で再試行します:
ags extend image-upload --namespace <my-game-namespace> --app <my-extend-app> \
--image-tag v1.0.0 \
--work-dir <path-to-directory-containing-service-dockerfile> \
--retry-limit 3
Extend アプリの環境変数とシークレットの作成・更新
環境変数を作成または更新するには update-var を使います:
ags extend update-var --namespace <my-game-namespace> --app <my-extend-app> --key REQUEST_TIMEOUT --value 100
シークレットを作成または更新するには update-secret を使います:
ags extend update-secret --namespace <my-game-namespace> --app <my-extend-app> --key API_KEY --value <api-key>
--key がまだ存在しないときに変数またはシークレットを作成するには、--force を渡します:
ags extend update-var --namespace <my-game-namespace> --app <my-extend-app> --key REQUEST_TIMEOUT --value 100 --force
ags extend update-secret --namespace <my-game-namespace> --app <my-extend-app> --key API_KEY --value <api-key> --force
シェル履歴に値を残さないため、--value より --value-stdin を推奨します。
Extend アプリのコンテナイメージを一覧する
list-images で、1 つの Extend アプリのコンテナイメージを一覧します。IAM クライアントには ADMIN:NAMESPACE:{namespace}:EXTEND:IMAGE [READ] が必要です。
ags extend list-images --namespace <my-game-namespace> --app <my-extend-app>
--cached の既定値は true です。キャッシュを使わない場合は --cached false を渡します。
Extend アプリのデプロイ
deploy-app は JSON 本体を使います。イメージタグはこのコマンドの --image-tag フラグではなく --json に入れます。
ags extend deploy-app --namespace <my-game-namespace> --app <my-extend-app> --json '{"imageTag":"v1.0.0"}'
応答例
{
"deploymentId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
デプロイ完了まで待つには --wait(任意で --wait-interval / --wait-limit)を追加します:
ags extend deploy-app --namespace <my-game-namespace> --app <my-extend-app> --json '{"imageTag":"v1.0.0"}' --wait
Extend アプリの開始と停止
ags extend start-app --namespace <my-game-namespace> --app <my-extend-app>
ags extend stop-app --namespace <my-game-namespace> --app <my-extend-app>
--wait と --wait-interval <seconds>(デフォルト: 10)、--wait-limit <seconds>(デフォルト: 600)を使えます:
ags extend start-app --namespace <my-game-namespace> --app <my-extend-app> --wait
ags extend stop-app --namespace <my-game-namespace> --app <my-extend-app> --wait
Extend アプリの削除
ags extend delete-app --namespace <my-game-namespace> --app <my-extend-app> --yes
アプリの現在のステータスに関係なく削除するには、--forced true を渡します(デフォルト: false)。
ags extend delete-app --namespace <my-game-namespace> --app <my-extend-app> --yes --forced true
削除完了まで待つには、--wait と --wait-interval、--wait-limit を使います:
ags extend delete-app --namespace <my-game-namespace> --app <my-extend-app> --yes --wait
Extend アプリログのストリーム
logs stream には AGS CLI 0.5.2 以降が必要です。--follow なしでは最近の行を表示して終了します。--follow ありでは Ctrl-C まで新しい行を表示し続けます。
ags extend logs stream --namespace <my-game-namespace> --app <my-extend-app>
ags extend logs stream --namespace <my-game-namespace> --app <my-extend-app> --follow
便利なフラグ:
--tail-lines <n>(エイリアス--tail)— ポッドあたりの最近の行数(デフォルト:100)--pods <count>— ストリームするポッド数(デフォルト:1)--since-seconds <seconds>— この秒数より新しい行のみ--previous— 直前のコンテナインスタンス(再起動後のクラッシュテキスト)
ags extend logs stream --namespace <my-game-namespace> --app <my-extend-app> --tail-lines 200 --previous
Admin Portal のログカードと履歴ダウンロードについては、View Extend app logs を参照してください。
データベーストンネルを開く
database-tunnel には AGS CLI 0.5.3 以降が必要です。Ctrl-C まで、ローカル TCP ポートを Extend データベースリソースにバインドします。
ags extend database-tunnel --namespace <my-game-namespace> --resource-name <resource-name> --local-port <port>
リソース名と接続例については、Extend データベースガイドを参照してください:
Extend アプリのリモートデバッグ
実行中のアプリでデバッグセッションを有効化、接続、または無効化するには remote-debug を使います。詳細な手順は Local debugging — with remote live traffic にあります。
ags extend remote-debug enable --namespace <my-game-namespace> --app <my-extend-app> --yes
ags extend remote-debug connect --namespace <my-game-namespace> --app <my-extend-app>
ags extend remote-debug disable --namespace <my-game-namespace> --app <my-extend-app> --yes
実行中のアプリを再起動する enable / disable の確認プロンプトをスキップするには、--yes を渡します。
スターターテンプレートのクローン
ags extend clone-template --template "<full-template-name>" --destination <dir>
clone-template に --scenario フラグはありません。--template には react のような短い名前ではなく、Extend App UI :: react :: JavaScript のような完全なテンプレート名を指定します。名前が一致しない場合、コマンドは利用可能なテンプレート名をすべて表示します。--template なしでは、シナリオ、テンプレート、言語の選択を求められます。
Extend App UI
ags extend app-ui create --namespace <my-game-namespace> --json '{"name":"<app-ui-name>"}'
ags extend app-ui setup-env --namespace <my-game-namespace> --name <app-ui-name>
ags extend app-ui upload --namespace <my-game-namespace> --name <app-ui-name>
app-ui create は name を JSON 本体で送ります。setup-env と upload は --name を取ります。
セキュリティアセスメントをリクエストする
security-assessment のコマンドは セキュリティアセスメントをリクエストする にあります。
トラブルシューティング
Docker ログインが失敗する
ags extend docker-login または ags extend image-upload --login が次のエラーを返します。
Error saving credentials: error storing credentials - err: exit status 1, out: `error storing credentials - err: exit status 1, out: `The stub received bad data.`
Extend レジストリのトークンは、多くの Docker 資格情報ヘルパーが保存できるサイズを超えています。詳細は Docker の 資格情報ヘルパーの issue を参照してください。
ネイティブ Windows では資格情報ヘルパーを使わず、トークンを出力して自分で docker login に渡します。コマンドの全体は Windows での Docker ログイン を参照してください。
Linux または WSL2 では、Docker の設定から資格情報ヘルパーを削除します。
- Linux
- Windows (WSL2)
$HOME/.docker/config.jsonから"credsStore": "desktop.exe"を削除します。ags extend docker-loginを再度実行します。
-
Windows のファイルシステムで次を行います。
%USERPROFILE%\.docker\config.jsonから"credsStore": "desktop.exe"を削除します。C:\Program Files\Docker\Docker\resources\binにある次のファイルの名前を変更します。docker-credential-desktop.exeをdocker-credential-desktop.exe.oldに変更docker-credential-wincred.exeをdocker-credential-wincred.exe.oldに変更
-
WSL2 のファイルシステムで、
$HOME/.docker/config.jsonから"credsStore": "desktop.exe"を削除します。 -
ags extend docker-loginを再度実行します。
この回避策は再度適用が必要になる場合があります。Docker Desktop は再起動時に config.json の "credsStore": "desktop" を復元することがあります。詳細は Docker の config.json の issue を参照してください。