Azure での Genvid クラスタの設定

Bastion サーバーの設定

クラスタを作成するには、まず Genvid bastion サーバーが実行されているかを確認してください。Bastion サーバーは、 genvid-bastion スクリプトを使用して設定および管理することができます。次のコマンドを実行すると、必要最小限のサービスで設定できます。

Shell から

genvid-bastion install --bastionid mybastion --checkmodules --update-global-tfvars --loadconfig
--bastionid mybastion
Bastion の一意の識別子です。次の形である必要があります。
  • 3 ~ 64 文字。
  • 小文字、数字、ハイフンのみで構成。
  • 冒頭は必ず小文字のアルファベット。
--checkmodules
このオプションを使用して、インストールされていない場合に新しいモジュールをインストールしたり、既にインストールされている場合は更新を行います。
--update-global-tfvars
このオプションを使用してグローバル Terraform 変数を更新します。
--loadconfig
このオプションを使用して Bastion にジョブとログをロードします。

重要

Windows ファイルシステムのディレクトリの長さには制限があるため、システムユーザー名と Bastion ID もクラスタ名の最大文字数に影響します。名前の長さの制限は適度に安全な設定になっていますが、技術的には、ユーザーが特に長いユーザー名や Bastion ID を使用した場合、この制限でも問題が発生する可能性があります。

設定

bastion は ROOTDIR/bastion-services/ 以下にある利用可能なファイルで構成されます。

ROOTDIR/bastion-services/init

このフォルダには、 bastion ジョブの起動前に読み込まれたファイルが含まれます。コンテンツが key-value ストアに追加され、各オブジェクトがフォルダを記述し、それぞれの値が文字列に変換されて、キーとして挿入されます。

フォルダの場所は GENVID_BASTION_INIT_FOLDER を使用して変更できます。詳細については、 setup_jobs() を参照してください。

クラスタの設定

重要

クラスタを設定する前に、azure アカウントが設定されており、azure にログインしていることを確認してください。また、azure ベースのイメージを作成して設定する必要があります。Azure にログインしてイメージを設定する方法については、 クラウド環境の作成 を参照してください。

次のステップで、クラスタを管理するための Bastion-UI を開きます。

  1. Shell から、:を実行

    genvid-bastion monitor
    
  2. Terraform ページを選択します。

  3. Add Config をクリックします。

  4. 一意の ID を入力します。

  5. カテゴリに cluster を選択します。

注釈

クラスタ ID の長さは、技術的な制約から 64 文字に制限されています。

Create a cluster

必要に応じて、他の backend を選択することができますが、現時点ではデフォルトのままにしておきます。バックエンドによっては、変数の設定が必要になる場合があります。

クラスタ作成後、ステータスは EMPTY になっています。これは、クラスタにモジュールが必要であることを意味しています。クラスタのステータスには、次のようなものがあります。

クラスタのクローン

似た構成の異なるクラスタを作成する場合、クローン機能を使うと便利です。Terraform 構成画面の Clone ボタンをクリックするとクローン機能を使用できます。

Clone a cluster

クラスタのステータス

クラスタ作成後、ステータスは EMPTY になっています。これは、クラスタにモジュールが必要であることを意味しています。クラスタのステータスには、次のようなものがあります。

  • VOID: クラスタが存在しない。
  • EMPTY: クラスタは存在するが、モジュールがない。
  • DOWN: クラスタを初期化したが、リソースがない。
  • UP: Terraform apply 処理が成功。
  • BUSY: コマンドを実行中。
  • ERROR: クラスタのチェックでエラーが発生。
  • INVALID: クラスタが無効、またはステータスが不明。

Terraform モジュールによるクラスタの初期化

クラスタを構成する前に、モジュールを初期化する必要があります。そうすることで、モジュールのテンプレートがコピーされ、必要なプロバイダ、プラグインがダウンロードされます。

  1. 選択した ID の名前をクリックします。

  2. SDK-{version}/basic/azurerm_basic_cluster または SDK-{version}/basic/azurerm_basic_cluster_alb_ssl モジュールを選択できます。 (azurerm_basic_cluster_alb_ssl モジュールはロードバランス、DNS、SSL 証明書をサポートしています)

  3. Import module をクリックします。

Terraform module

初期化ログが表示されます。このステップは数秒間で終わります。

クラスタのインフラストラクチャをビルドする

クラスタのインフラストラクチャをビルドするには、Terraform 実行プランを適用します。

  1. Plan Apply をクリックして、実行プランを作成します。

  2. 変更内容が、必要な内容と一致しているかを検証します。

  3. Apply をクリックしてプランを実行します。

Terraform Plan Apply
Terraform Apply

重要

モジュールが、ゲームマシン用の計算インスタンスタイプ Standard_NV6 を使用しています。一部のアカウントでは、このインスタンスタイプのプロモバージョンしか利用できません (Standard_NV6_Promo)。

アクティブなアカウントとロケーションに Standard_NV6 がない場合、Terraform の出力には次のようなエラーが表示されます:

The requested size for resource 'XXXX-game-1' is currently not available in location 'XXXX'

回避策としては、Terraform の設定ページで instance_game_typeStandard_NV6_Promo に変更し、 Commands ページで Plan apply -> Apply を再度行ってください。プロモタイプも利用できない場合は、Azure ポータルで接続し、他のタイプが利用できるか確認してください。他の NV タイプのインスタンス、または NVidia グラフィックドライバをサポートする他のインスタンスを探してください。

ログが表示されます。

Terraform によるインフラストラクチャのビルドに失敗した場合:
  • エラーメッセージを確認します。
  • 設定を更新します。
  • もう一度適用します。

このステップの最後には、クラウド上で動作するクラスタが存在します。Terraformのページで**All Configs**を確認すると、ステータスが**UP**になっています。これは、インフラストラクチャのビルドが問題なく動作していて、Genvid MILE SDK が使用可能なことを表しています。

注釈

不要になった既存のクラスタがある場合、指定のコマンドを使用してクリーンアップします。詳細は 不要なクラスタのクリーンアップ を参照してください。

タグ

クラスタ用に作成されたすべてのリソースには、それらを識別するための以下のタグが付いています:

genvid:cluster-name: クラスタ名。genvid:creator-service-id: Bastion UI で作成したときの Bastion ID。

重要

v1.26 より、リソースに名前が付与されなくなります。識別はタグで行います。
すべての番号付きリソースは、インデックスのオフセットも削除され、単純化のために 1 ではなく 0 から始まります。
encoding-1 -> encoding-0
game-1 -> game-0
internal-1 -> internal-0
public-1 -> public-0
server-1 -> server-0

Terraform 設定

Basic Terraform settings

図 9 基本的な Azure クラスタの Bastion-UI 設定

Terraform settings with SSL, DNS, and application gateway

図 10 Azure クラスタの SSL、DNS、アプリケーションゲートウェイを使用した Bastion-UI 設定 (azurerm_basic_cluster_alb_ssl を選択した場合)

Terraform は、クラスタのインフラストラクチャをビルドするために使用します。設定値は、クラスタのインフラストラクチャのビルドに使用されます。クラスタの Settings のサブリンクをクリックして、設定を編集します。

注釈

使いやすさのため、ページの設定を JSON ファイルにダウンロードすることもできます。編集したファイルをフォーム上でドラッグ&ドロップして、複数の設定を一度に編集したり、以前の構成に戻すことができます。保存されていない構成は失われる

クラスタ変数の詳細はこちら: Terraform モジュール

SSL および DNS 設定の Azure クラスタ

SSL と DNS の両方の機能を持つ Azure クラスタを作成することができます。このタイプのクラスタを使用するには、Azure DNS ゾーンに登録されたドメインが必要です。web-{clustername}leafs-{clustername} という 2 つの 「A」 レコードセットが自動的に追加されます。たとえば、ドメインが example.com でクラスタ名が stream の場合、leaf と web のエンドポイントは leafs-stream.example.comweb-stream.example.com になります。

クラスタを利用するためには、必要な証明書を用意する必要があります。ワイルドカード証明書、またはリーフ用とウェブサービス用の 2 つの証明書を使用することができます。

一部のライブ配信サービス (Twitch など) では、自動署名されたものでない、有効なものである必要があります。また、証明書にはパスワードが必要で、.pfx 形式である必要があります。

変数の設定方法の詳細については、Terraform 設定解説書 を参照してください。

アベイラビリティゾーンの例:

  • 3 インスタンス, azs: [] -> multi-az 無効
  • 3 インスタンス, azs: [2] -> 3 インスタンスはすべてゾーン 2 に作成されます
  • 3 インスタンス, azs: [1, 2, 3] -> インスタンス 1: ゾーン 1, インスタンス 2: ゾーン 2, インスタンス 3: ゾーン 3
  • 3 インスタンス, azs: [1, 3] -> インスタンス 1: ゾーン 1, インスタンス 2: ゾーン 2, インスタンス 3: ゾーン 1
  • 4 インスタンス, azs: [1, 2] -> インスタンス 1: ゾーン 1, インスタンス 2: ゾーン 2, インスタンス 3: ゾーン 1, インスタンス 4: ゾーン 2

注釈

  • アベイラビリティゾーンはゲームインスタンスでは利用できません。Azure は GPU インスタンスのゾーンをサポートしていません。
  • サーバーのインスタンス数を具体的に変更すると、すべてのインスタンスの再構築を強制的に行います。これにより、内部の IP アドレスが更新され、他のサービスを再初期化する必要があります。

Terraform プロバイダ

プロバイダはクラスタ、より具体的にはそのクラスタにインポートされたモジュールに固有のものです。したがって、新しいクラスタを作成し、そこにモジュールをインポートすることから始めましょう。

../../_images/azure_terraform_plan_init.png

図 11 最初のインポートで、ダウンロードされているプロバイダプラグインが表示されます。特定のモジュールで使用されているプロバイダを確認するのに最適な方法です。

すべてのプロバイダには、識別用に独自の引数セットが付いています。特定のプロバイダをカスタマイズする方法を知る最良の方法は、Terraform Providers のページにアクセスし、興味のある特定のプロバイダを検索してください。

Terraform プロバイダのカスタマイズ

(グローバル) デフォルト構成

プロバイダの構成は 2つのレベルでカスタマイズできます。グローバル (bastion) レベル、またはモジュールをインポートした直後のクラスタです。グローバル構成は、新しいクラスタに (またはモジュールの再インポート時に) デフォルト構成を提供することを目的としています。

../../_images/azure_bastion_ui_provider_settings.png

bastion のインストール中に、こうした構成をセットアップして、提供されるモジュールのいずれかを使用してクラスタがそのまま動作するようにします。情報は、bastion-services/terraform/providers/default.json に保存されているファイルから読み込まれます。

モジュールをクラスタにインポートすると、このモジュールが使用するプロバイダのデフォルト構成のみが適用されます。そのため、すべてのモジュールで使用されないプロバイダ構成を追加しても安全です。

../../_images/azure_bastion_ui_add_new_provider.png

プロバイダに新しいデフォルト構成を追加するには:

  1. Bastion UI ページを開く。

  2. Settings をクリックします。

  3. Providers をクリックします。

  4. + NEW PROVIDER をクリックします。

  5. カスタマイズするプロバイダを識別するために、 ProviderAlias にユニークな名前を入力する。

    重要

    ProviderAlias に使用する識別子は、モジュールをクラスタにインポートするときにチェックされます。そのモジュールで使用されるプロバイダと一致しない場合、デフォルト構成は適用されません。

  6. プロバイダに設定する引数が複数存在する場合は、+ をクリックしてそれぞれを追加します。

  7. SAVE をクリックしてプロバイダ構成を保存します。

クラスタごとの構成

クラスタにモジュールをインポートした後、(Terraform の) Provider タブに移動して、現在の構成を確認できます。

../../_images/bastion_ui_provider_need_module.png

図 12 Settings タブと同様に、モジュールをまだインポートしていない場合は、 Commands ページに移動して、インポートするように促されます。

一部のプロバイダがこの時点までに自動的に適用されるグローバル構成を持つものでない限り、デフォルトでは構成は空でなければなりません。クラスタのプロバイダに加えられた変更は、そのクラスタにのみ影響します。

警告

クラスタのモジュールが再インポートされると、グローバル構成がその構成をオーバーライドします。

../../_images/azure_bastion_ui_cluster_view_provider.png

図 13 この例から分かるように、プロバイダの引数の値を指定するために Terraform 変数の補間がサポートされています。

クラスタが作成され、カスタマイズするプロバイダが確認できたら、トップメニューから Terraform に移動し、左側のメニューからクラスタ名の下の Provider に移動できます。

プロバイダをカスタマイズする作業は、グローバルな場合と非常によく似ています。 + ADD PROVIDER ボタンは、まだリストされていないプロバイダの構成を追加するために使用します。それ以外の場合は、編集ボタン (左の Action ボタン) を使用して、既存の構成をカスタマイズできます。

警告

プロバイダ構成の変更は、Refresh コマンドを実行するまで有効にならない場合があります。

Terraform プロバイダの引数

異なるプロバイダの設定に aliases を与えることができます。Terraform の init フェーズでは設定を検討し、 plan および apply フェーズでは引数を使用します。引数はプロバイダによって異なります。

注釈

plan フェーズでいくつかの引数が無視されている場合、 Refresh を実行して Terraform の状態を新しい構成で更新してみてください。

独自の Terraform モジュールを作成しない場合、プロバイダエイリアスは有用ではありません。詳細については、Terraform Provider Configuration ページをご覧ください。

Terraform プロバイダバージョン

重要

Genvid MILE SDK バージョン 1.28.0 以降、は、Bastion UI からプロバイダのバージョンを直接変更することができなくなります。

カスタムモジュールでプロバイダバージョンを指定する方法については Terraform Provider Requirements を参照してください。

提供されたクラスタ上のプロバイダのバージョンを手動で変更したい場合、 bastion-services/terraform/modules/basic/cluster/versions.tf に宣言があります。

Terraform ファイルを変更する場合、変更を反映するには、Bastion UI でモジュールを更新してください。詳細は モジュールセクション を参照してください。

Terraform プロバイダのツールボックスのサポート

ツールボックスには、プロバイダの管理に役立つサブコマンドが用意されています。次の表は、使用可能なコマンドをまとめたものです。

コマンド 説明
genvid-bastion get-default-terraform-providers 現在のグローバルプロバイダ構成を JSON で表示する。
genvid-bastion set-default-terraform-providers get-default-terraform-providers の形式と一致する JSON ファイルからグローバルプロバイダ構成を設定する。
genvid-bastion delete-default-terraform-providers 既存のグローバルプロバイダ構成を削除する。
genvid-clusters get-terraform-providers 指定のクラスタの指定の現在のプロバイダ構成を表示する。
genvid-clusters set-terraform-providers get-terraform-providers の形式と一致する JSON ファイルから指定クラスタのプロバイダ構成を設定する。
genvid-clusters delete-terraform-providers 指定のクラスタの指定の既存のプロバイダ構成を削除する。

最も簡単に新しいプロバイダ構成を作成する方法は、bastion UI を使用後にツールボックスを使用して構成をファイルにリダイレクトすることですが、手動で構成する場合の例を次に示します。

[
    {
        "provider": "azurerm",
        "alias": null,
        "arguments": {
            "region": "East US"
        }
    },
    {
        "provider": "template",
        "alias": null,
        "arguments": {}
    },
    {
        "provider": "tls",
        "alias": "myalias"
        "arguments": {}
    }
]

Terraform インフラストラクチャの適用

Terraform Apply は、クラスタのインフラストラクチャをビルドするための処理です。

  1. Plan Apply をクリックして、実行プランを作成します。
  2. 変更内容が、必要な内容と一致しているかを検証します。
  3. 変更内容の検証後、Apply をクリックしてプランを実行します。
Terraform Plan Apply
Terraform Apply

ログが表示されます。

Terraform によるインフラストラクチャのビルドに失敗した場合:
  • エラーメッセージを確認します。
  • 設定を更新します。
  • もう一度適用します。

このステップの最後には、クラウド上で動作するクラスタが存在します。Terraformのページで**All Configs**を確認すると、ステータスが**UP**になっています。これは、インフラは稼働していますが、 Genvid MILE SDK がまだ存在していないことを意味します。

重要

バージョン 1.19.0 より、Terraform がインスタンスを作成した後、バックグラウンドでインスタンスのプロビジョンを行います。ただ、インスタンスを使用する前に、インスタンスがクラスタ UI に Nomad クライアントとして登録されるまで少し時間がかかります。特に、Windows インスタンスは準備が整うまでに最長 30 分かかることがあります。

注釈

パブリック IP は、AMI 設定時に使用した IP とは違います。

ゲーム機にアクセスするには、AMI 設定中に設定したものと同じパスワードで game_public_ips の IP を使用します。

game_public_ips の取得方法:

  1. クラスタが UP であることを確認します。
  2. クラスタの Commands ページに移動します。
  3. OUTPUT ボタンをクリックします。

game_public_ips は、JSON ファイル内に記述されています。

実行中のクラスタで SDK を設定

クラスタのステータスが UP になってから、Genvid MILE SDK を設定して、プロジェクトを実行します。

クラウドの SDK ガイドの手順に従ってください。

Terraform インフラストラクチャの破棄

terraform destroy コマンドは、クラスタ設定からすべてのリソースを削除します。そのクラスタでプロジェクトを実行する必要がなくなった場合は、クラスタの Terraform インフラストラクチャだけを破棄してください。Terraform インフラストラクチャを破棄するには、Plan destroy ボタンをクリックします。

現在の Terraform インフラストラクチャの破棄を確実に実行したい場合は、Destroy ボタンをクリックします。

詳細は インフラストラクチャの破棄 を参照してください。

クラスタの削除

クラスタを削除するには、まず、Terraform インフラストラクチャを破棄します。All Configs で、 Delete ボタンをクリックします。

カスタムレポジトリの使用

bastion の Terraform のレポジトリは、追加や削除を行うことができます。各レポジトリには、クラスタのインスタンスを作成するモジュールが含まれています。現在のレポジトリを一覧表示するには、以下のコマンドを使用します。

genvid-clusters module-list

新規モジュールを追加するには、以下のコマンドを実行します。

genvid-clusters module-add -u {URL} {name}
  • {URL} には go-getter と互換性のあるすべてのソースを指定できます (ローカルファイルを含みます)。
  • {name} は、bastion でのこのレポジトリの保存フォルダです。

bastion レポジトリで URL をクローン後、modules/module のソースとして利用できるようになります。モジュールの使用方法についての詳細は、Terraform’s Module Configuration を参照してください。

Bastion は、モジュールの起源を記憶しているため、以下のコマンドでアップデートできます。

genvid-clusters module-update [name]

名前の指定はオプションです。指定しない場合、すべてのレポジトリが更新されます。

以下のコマンドを使用して、モジュールを削除できます。

genvid-clusters module-remove {name}

参考

genvid-clusters
Genvid Cluster-Management スクリプト解説書。
Terraform の Bastion API
Terraform の Bastion API
Terraform のモジュール設定
Terraform のモジュールの解説書
go-getter
Go で URL を取得するライブラリ。