Azure での Genvid クラスタの設定¶
In This Section
Bastion サーバーの設定¶
クラスタを作成するには、まず Genvid bastion サーバーが実行されているかを確認してください。Bastion サーバーは、 genvid-bastion スクリプトを使用して設定および管理することができます。次のコマンドを実行すると、必要最小限のサービスで設定できます。
Shell から、::を実行
genvid-bastion install --bastionid mybastion --checkmodules --update-global-tfvars --loadconfig
--bastionid mybastion
- Bastion の一意の識別子です。次の形である必要があります。
- 3 ~ 32 文字。
- 小文字、数字、ハイフンのみで構成。
- 冒頭は必ず小文字のアルファベット。
--checkmodules
- このオプションを使用して、インストールされていない場合に新しいモジュールをインストールしたり、既にインストールされている場合は更新を行います。
--update-global-tfvars
- このオプションを使用してグローバル Terraform 変数を更新します。
--loadconfig
- このオプションを使用して Bastion にジョブとログをロードします。
クラスタの設定¶
重要
クラスタを設定する前に、azure アカウントが設定されており、azure にログインしていることを確認してください。また、azure ベースのイメージを作成して設定する必要があります。Azure にログインしてイメージを設定する方法については、 クラウド環境の作成 を参照してください。
次のステップで、クラスタを管理するための Bastion-UI を開きます。
Shell から、:を実行
genvid-bastion monitor
Terraform ページを選択します。
Add Config をクリックします。
一意の ID を入力します。
カテゴリに cluster を選択します。
必要に応じて、他の backend
を選択することができますが、現時点ではデフォルトのままにしておきます。バックエンドによっては、変数の設定が必要になる場合があります。
クラスタ作成後、ステータスは EMPTY になっています。これは、クラスタにモジュールが必要であることを意味しています。クラスタのステータスには、次のようなものがあります。
クラスタのステータス¶
クラスタ作成後、ステータスは EMPTY になっています。これは、クラスタにモジュールが必要であることを意味しています。クラスタのステータスには、次のようなものがあります。
- VOID: クラスタが存在しない。
- EMPTY: クラスタは存在するが、モジュールがない。
- DOWN: クラスタを初期化したが、リソースがない。
- UP: Terraform
apply
処理が成功。 - BUSY: コマンドを実行中。
- ERROR: クラスタのチェックでエラーが発生。
- INVALID: クラスタが無効、またはステータスが不明。
Terraform モジュールによるクラスタの初期化¶
クラスタを構成する前に、モジュールを初期化する必要があります。そうすることで、モジュールのテンプレートがコピーされ、必要なプロバイダ、プラグインがダウンロードされます。
選択した ID の名前をクリックします。
SDK-{version}/basic/azurerm_basic_cluster または SDK-{version}/basic/azurerm_basic_cluster_alb_ssl モジュールを選択できます。 (azurerm_basic_cluster_alb_ssl モジュールはロードバランス、DNS、SSL 証明書をサポートしています)
Import module をクリックします。
初期化ログが表示されます。このステップは数秒間かかります。
クラスタのインフラストラクチャをビルドする¶
クラスタのインフラストラクチャをビルドするには、Terraform 実行プランを適用します。
Plan Apply をクリックして、実行プランを作成します。
変更内容が、必要な内容と一致しているかを検証します。
Apply をクリックしてプランを実行します。
ログが表示されます。
- Terraform によるインフラストラクチャのビルドに失敗した場合:
- エラーメッセージを確認します。
- 設定を更新します。
- もう一度適用します。
この手順が完了すると、クラウド上でクラスタが動作します。Terraform ページの All Configs を確認すると、ステータスは UP になっています。これは、インフラストラクチャのビルドが問題なく動作していて、Genvid SDK が使用可能なことを表しています。
注釈
不要になった既存のクラスタがある場合、指定のコマンドを使用してクリーンアップします。詳細は 不要なクラスタのクリーンアップ を参照してください。
Terraform 設定¶
Terraform は、クラスタのインフラストラクチャをビルドするために使用します。設定値は、クラスタのインフラストラクチャのビルドに使用されます。クラスタの Settings のサブリンクをクリックして、設定を編集します。
注釈
- Studio 固有の設定については、 Studio 設定ページ を参照してください。
- Tick 固有の設定については、 Tick Setup page を参照してください。
使いやすさのため、ページの設定を JSON ファイルにダウンロードすることもできます。編集したファイルをフォーム上でドラッグ&ドロップして、複数の設定を一度に編集したり、以前の構成に戻すことができます。保存されていない構成は失われるため、注意してください。
一般的な Azure クラスタ設定
設定 | 説明 | デフォルト値 |
---|---|---|
azs | 使用する可用性ゾーンのリストを指定します。Azure は、ゾーン 1、2、および 3 をすべてのリージョンで使用できるようにします。インスタンスは指定されたゾーンに均等に分散され、最初の特定ゾーンから順次開始され、リストの最後に達すると最初のゾーンにロールオーバーされます。 [1] | [] |
datacenter | Nomad がローカルエージェントのグループ化に使用するデータセンター名です。 | default |
instance_encoding_count | Terraform が作成するエンコーディングサーバー数を指定します。 | 1 |
instance_encoding_type | Terraform がエンコーディングサーバーに使用する Azure インスタンスのタイプを指定します。 | Standard_F8s_v2 |
instance_game_count | Terraform が作成するゲームサーバー数を指定します。 | 1 |
instance_game_type | Terraform がゲームサーバーに使用する Azure インスタンスのタイプを指定します。 | Standard_NV6 |
instance_internal_count | Terraform が作成する内部サーバー数を指定します。 | 1 |
instance_internal_type | Terraform が内部サーバーに使用する Azure インスタンスのタイプを指定します。 | Standard_B2s |
instance_public_count | Terraform が作成するパブリックサーバー数を指定します。 | 1 |
instance_public_type | Terraform がパブリックサーバーに使用する Azure インスタンスのタイプを指定します。 | Standard_B2s |
instance_server_count | Terraform が作成する admin サーバー数を指定します。 | 1 |
instance_server_type | Terraform が管理サーバーに使用する Azure インスタンスのタイプを指定します。 | Standard_B2s |
location | クラスタを作成する Azure 領域です。NV6 インスタンスを含むすべてのリージョンを使用できます。 | East US |
namespace | クラスタの現在のデプロイプロジェクト名です。この値は、Azure タグ構成の一部で、Azure ポータルでリソースのグループ化に役立ちます。 | deployment |
shared_gallery_image_version | Azure の共有イメージギャラリーからどのイメージバージョンを使用するかは、現在の SDK のバージョンと一致している必要があります。 | current SDK version |
shared_gallery_name | クラスタ VM イメージが保存されている Azure の共有イメージギャラリー。 | SDKgallery |
shared_gallery_resource_group_name | 共有イメージギャラリーを保持するリソースグループ名。 | Genvid |
stage | クラスタが含まれるステージ名です。この値は、検索と整理を容易にするために、Azure のリソースにタグを付けるために使用されます。 | dev |
toolbox_location | Genvid ツールボックス Wheel ファイル。イメージからアップデートする場合にのみ必要。指定しない場合は、ツールボックスをインストールしません。 | null |
truster_cidr | ローカルマシンの CIDR | Local CIDR |
trusted_cidrs | クラスタへのアクセスを可能にする追加の CIDR | [] |
trusted_security_groups | 信頼するセキュリティグループの一覧 | [] |
wingame_image_prefix | wingame イメージに使用するプレフィックス | default |
SSL および DNS 設定の Azure クラスタ
このクラスタでは、SSL と DNS の機能を持つことができます。このクラスタを使用するには、Azure DNS ゾーンにドメインを登録する必要があります。これにより、提供されたサブドメイン名に基づいて、ドメインに必要なレコードセットが自動的に追加されます。さらに、このクラスタを使用するには、必要な証明書を提供する必要があります。一部のサービス (twitch など) を使用するは、証明書が有効である必要があります。また、自己署名された証明書は認められません。証明書については、ワイルドカード証明書を提供するか、Leaf サービスと Web サービス用に2つの別々の証明書を提供することができます。証明書には .pfx 形式のパスワードが必要です。クラスタの設定におけるパラメータを以下の表に示します。
設定 | 説明 | デフォルト値 |
---|---|---|
azs | 使用する可用性ゾーンのリストを指定します。Azure は、ゾーン 1、2、および 3 をすべてのリージョンで使用できるようにします。インスタンスは指定されたゾーンに均等に分散され、最初の特定ゾーンから順次開始され、リストの最後に達すると最初のゾーンにロールオーバーされます。 [1] | [] |
datacenter | Nomad がローカルエージェントのグループ化に使用するデータセンター名です。 | default |
domain_name | Azure や他のレジストラで作成済みのドメイン [1] | example.com |
gateway_autoscaling_limits | Application Gateway オートスケーラのインスタンス数の最小値と最大値 [1] | [1,3] |
instance_encoding_count | Terraform が作成するエンコーディングサーバー数を指定します。 | 1 |
instance_encoding_type | Terraform がエンコーディングサーバーに使用する Azure インスタンスのタイプを指定します。 | Standard_F8s_v2 |
instance_game_count | Terraform が作成するゲームサーバー数を指定します。 | 1 |
instance_game_type | Terraform がゲームサーバーに使用する Azure インスタンスのタイプを指定します。 | Standard_NV6 |
instance_internal_count | Terraform が作成する内部サーバー数を指定します。 | 1 |
instance_internal_type | Terraform が内部サーバーに使用する Azure インスタンスのタイプを指定します。 | Standard_B2s |
instance_public_count | Terraform が作成するパブリックサーバー数を指定します。 | 1 |
instance_public_type | Terraform がパブリックサーバーに使用する Azure インスタンスのタイプを指定します。 | Standard_B2s |
instance_server_count | Terraform が作成する admin サーバー数を指定します。 | 1 |
instance_server_type | Terraform が管理サーバーに使用する Azure インスタンスのタイプを指定します。 | Standard_B2s |
leaf_port | Leaf サービスがリッスンしているポートです。 | 30001 |
leaf_ssl_certificate_password | Leaf 証明書のパスワード。ワイルドカードの SSL 証明書を提供した場合は、提供する必要はありません。[1] | null |
leaf_ssl_certificate_path | Leaf 証明書のパス。ワイルドカードの SSL 証明書を提供した場合は、提供する必要はありません。[1] | null |
leaf_stickiness_ttl | Leaf ターゲットグループ粘着性のタイムアウト [1] | 20 |
leaf_tg_stickiness_enabled | Leaf ターゲットグループの粘着性のタイムアウトを有効/無効する [1] | false |
location | クラスタを作成する Azure 領域です。NV6 インスタンスを含むすべてのリージョンを使用できます。 | East US |
namespace | クラスタの現在のデプロイプロジェクト名です。この値は、Azure タグ構成の一部で、Azure ポータルでリソースのグループ化に役立ちます。 | deployment |
shared_gallery_image_version | Azure の共有イメージギャラリーからどのイメージバージョンを使用するかは、現在の SDK のバージョンと一致している必要があります。 | current SDK version |
shared_gallery_name | クラスタ VM イメージが保存されている Azure の共有イメージギャラリー。 | SDKgallery |
shared_gallery_resource_group_name | 共有イメージギャラリーを保持するリソースグループ名。 | Genvid |
stage | クラスタが含まれるステージ名です。この値は、検索と整理を容易にするために、Azure のリソースにタグを付けるために使用されます。 | dev |
subdomain_name | 配信に使用するサブドメイン名 [1] | twitch |
toolbox_location | Genvid ツールボックス Wheel ファイル。イメージからアップデートする場合にのみ必要。指定しない場合は、ツールボックスをインストールしません。 | null |
truster_cidr | ローカルマシンの CIDR | Local CIDR |
trusted_cidrs | クラスタへのアクセスを可能にする追加の CIDR | [] |
trusted_security_groups | 信頼するセキュリティグループの一覧 | [] |
ttl_leaf_hostname | サブドメイン DNS の Leaf ホスト名の TTL 情報 [1] | 3600 |
ttl_subdomain | メインドメイン DNS のサブドメインのTTTL情報 [1] | 3600 |
ttl_web_hostname | サブドメイン DNS の web ホスト名の TTL 情報 [1] | 3600 |
web_health_check_path | Web サービスのヘルスチェックのエンドポイントパス。web.nomad.tmpl で定義したパスと一致させる必要があります。 [1] | /health |
web_port | web サービスがリッスンするように設定されているポート [1] | 30000 |
web_ssl_certificate_password | Web 証明書のパスワード。ワイルドカードの SSL 証明書を提供した場合は、提供する必要はありません。[1] | null |
web_ssl_certificate_path | 有効な Web 証明書のパス。ワイルドカードの SSL 証明書を提供した場合は、提供する必要はありません。[1] | null |
web_stickiness_ttl | Web ターゲットグループ粘着性のタイムアウト [1] | 20 |
web_tg_stickiness_enabled | Leaf ターゲットグループ粘着性のタイムアウトを有効/無効する [1] | false |
wildcard_ssl_certificate_password | ワイルドカード証明書のパスワード。Web、Leaf SSL 証明書を提供した場合は、提供する必要はありません。[1] | null |
wildcard_ssl_certificate_path | 有効なワイルドカード証明書のパス。Web、Leaf SSL 証明書を提供した場合は、提供する必要はありません。[1] | null |
wingame_image_prefix | wingame イメージに使用するプレフィックス | default |
[1] | (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20) バージョン 1.25.0 で追加. |
変数の設定方法の詳細については、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 プロバイダ¶
プロバイダはクラスタ、より具体的にはそのクラスタにインポートされたモジュールに固有のものです。したがって、新しいクラスタを作成し、そこにモジュールをインポートすることから始めましょう。
すべてのプロバイダには、識別用に独自の引数セットが付いています。特定のプロバイダをカスタマイズする方法を知る最良の方法は、Terraform Providers のページにアクセスし、興味のある特定のプロバイダを検索してください。
重要
モジュールをインポートするときに、各プロバイダに使用するバージョンを常に指定する必要があります。これを実行しないと、terraform init
コマンドがそれぞれに利用可能な最新バージョンを使用するために、大幅な変更が実施された場合に、環境が不安定になる可能性があります。
詳細は Terraform documentation を参照してください。
Terraform プロバイダのカスタマイズ¶
(グローバル) デフォルト構成¶
プロバイダの構成は 2つのレベルでカスタマイズできます。グローバル (bastion) レベル、またはモジュールをインポートした直後のクラスタです。グローバル構成は、新しいクラスタに (またはモジュールの再インポート時に) デフォルト構成を提供することを目的としています。
bastion のインストール中に、こうした構成をセットアップして、提供されるモジュールのいずれかを使用してクラスタがそのまま動作するようにします。情報は、bastion-services/terraform/providers/default.json
に保存されているファイルから読み込まれます。
モジュールをクラスタにインポートすると、このモジュールが使用するプロバイダのデフォルト構成のみが適用されます。そのため、すべてのモジュールで使用されないプロバイダ構成を追加しても安全です。
プロバイダに新しいデフォルト構成を追加するには:
Bastion UI ページを開く。
Settings をクリックします。
Providers をクリックします。
+ NEW PROVIDER をクリックします。
カスタマイズするプロバイダを識別するために、Provider 、Alias にユニークな名前を入力する。
- オプション: そのプロバイダで使用する指定のデフォルト Version を設定することもできます。
重要
Provider と Alias に使用する識別子は、モジュールをクラスタにインポートするときにチェックされます。そのモジュールで使用されるプロバイダと一致しない場合、デフォルト構成は適用されません。
プロバイダに設定する引数が複数存在する場合は、+ をクリックしてそれぞれを追加します。
SAVE をクリックしてプロバイダ構成を保存します。
クラスタごとの構成¶
クラスタにモジュールをインポートした後、(Terraform の) Provider タブに移動して、現在の構成を確認できます。
一部のプロバイダがこの時点までに自動的に適用されるグローバル構成を持つものでない限り、デフォルトでは構成は空でなければなりません。クラスタのプロバイダに加えられた変更は、そのクラスタにのみ影響します。
警告
クラスタのモジュールが再インポートされると、グローバル構成がその構成をオーバーライドします。
クラスタが作成され、カスタマイズするプロバイダが確認できたら、トップメニューから Terraform に移動し、左側のメニューからクラスタ名の下の Provider に移動できます。
重要
プロバイダのバージョンを変更した後、新しいバージョンをダウンロードするには、新しい terraform init
コマンドを実行する必要があります。
プロバイダをカスタマイズする作業は、グローバルな場合と非常によく似ています。+ ADD PROVIDER ボタンは、まだリストされていないプロバイダの構成を追加するために使用します。それ以外の場合は、編集ボタン (左の Action ボタン) を使用して、既存の構成をカスタマイズできます。
警告
プロバイダ構成の変更は、Refresh コマンドを実行するまで有効にならない場合があります。
Terraform プロバイダの引数¶
バージョン 、エイリアス 、引数などのメタ引数を区別していることにお気付きかもしれません。
これらのメタ引数はすべてのプロバイダに存在し、Terraform の init
フェーズで参照されます。他の引数は plan または apply フェーズで使用され、プロバイダによって異なります。
注釈
plan
フェーズでいくつかの引数が無視されている場合、Refresh を実行して Terraform の状態を新しい構成で更新してみてください。
独自の Terraform モジュールを作成しない場合、プロバイダエイリアスは有用ではありませんが、上記で確認したように、バージョンは非常に重要です。詳細については、Terraform Provider Configuration ページをご覧ください。
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",
"meta": {
"alias": null,
"version": "~> 2.1.0"
},
"arguments": {
"region": "East US"
}
},
{
"provider": "template",
"meta": {
"alias": null,
"version": "~> 2.1"
},
"arguments": {}
},
{
"provider": "tls",
"meta": {
"alias": "myalias",
"version": null,
},
"arguments": {}
}
]
Terraform インフラストラクチャの適用¶
Terraform Apply は、クラスタのインフラストラクチャをビルドするための処理です。
- Plan Apply をクリックして、実行プランを作成します。
- 変更内容が、必要な内容と一致しているかを検証します。
- 変更内容の検証後、Apply をクリックしてプランを実行します。
ログが表示されます。
- Terraform によるインフラストラクチャのビルドに失敗した場合:
- エラーメッセージを確認します。
- 設定を更新します。
- もう一度適用します。
この手順が完了すると、クラウド上でクラスタが動作します。Terraform ページの All Configs を確認すると、ステータスは UP になっています。これは、インフラストラクチャがビルドされていて、Genvid SDK が存在していないことを表しています。
重要
バージョン 1.19.0 より、Terraform がインスタンスを作成した後、バックグラウンドでインスタンスのプロビジョンを行います。ただ、インスタンスを使用する前に、インスタンスがクラスタ UI に Nomad クライアントとして登録されるまで少し時間がかかります。特に、Windows インスタンスは準備が整うまでに最長 30 分かかることがあります。
注釈
パブリック IP は、AMI 設定時に使用した IP とは違います。
ゲーム機にアクセスするには、AMI 設定中に設定したものと同じパスワードで game_public_ips
の IP を使用します。
game_public_ips
の取得方法:
- クラスタが
UP
であることを確認します。 - クラスタの Commands ページに移動します。
- OUTPUT ボタンをクリックします。
game_public_ips
は、JSON ファイル内に記述されています。
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 を取得するライブラリ。