Terraform プランを使用して Google Cloud Platform Windows インスタンスをデプロイし、Azure Arc に接続する

この記事では、指定された Terraform プランを使用して Windows Server Google Cloud Platform (GCP) インスタンスをデプロイし、Azure Arc 対応サーバー リソースとして接続するためのガイダンスを提供します。

前提条件

  1. Azure Arc Jumpstart リポジトリを複製します。

    git clone https://github.com/microsoft/azure_arc.git
    
  2. バージョン 2.7 以降の Azure CLI をインストールするか、更新します。 現在インストールされているバージョンを確認するには、次のコマンドを使用してください。

    az --version
    
  3. 0.12 以降の Terraform をインストールします

  4. 課金が有効になっている Google Cloud Platform アカウント:無料試用版アカウントを作成します。 Windows Server 仮想マシンを作成するには、アカウントをアップグレードして課金を有効にする必要があります。 メニューから [Billing](お支払い) を選択し、右下にある [Upgrade](アップグレード) を選択します。

    First screenshot showing how to enable billing on a GCP account.

    Second screenshot showing how to enable billing on a GCP account.

    Third screenshot showing how to enable billing on a GCP account.

    免責事項: 予期しない料金を回避するには、この記事の最後にある「デプロイの削除」セクションに従ってください。

  5. Azure サービス プリンシパルを作成します。

    GCP 仮想マシンを Azure Arc に接続するには、共同作成者ロールが割り当てられた Azure サービス プリンシパルが必要です。 これを作成するには、Azure アカウントにサインインして、次のコマンドを実行します。 このコマンドは、Azure Cloud Shell 内で実行することもできます。

    az login
    az account set -s <Your Subscription ID>
    az ad sp create-for-rbac -n "<Unique SP Name>" --role contributor --scopes "/subscriptions/<Your Subscription ID>"
    

    次に例を示します。

    az ad sp create-for-rbac -n "http://AzureArcGCP" --role contributor --scopes "/subscriptions/00000000-0000-0000-0000-000000000000"
    

    出力は次のようになります。

    {
      "appId": "XXXXXXXXXXXXXXXXXXXXXXXXXXXX",
      "displayName": "http://AzureArcGCP",
      "password": "XXXXXXXXXXXXXXXXXXXXXXXXXXXX",
      "tenant": "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    }
    

    Note

    サービス プリンシパルのスコープを、特定の Azure サブスクリプションとリソース グループに限定することを強くお勧めします。

新しい GCP プロジェクトを作成する

  1. Google API コンソールに移動し、お使いの Google アカウントでサインインします。 ログインしたら、Azure Arc demo という名前の新しいプロジェクトを作成します。 作成した後は、プロジェクト ID を必ずコピーしてください。通常、これはプロジェクト名とは異なるためです。

    First screenshot of the New Project page in the GCP console.

    Second screenshot of the New Project page in the GCP console.

  2. 新しいプロジェクトが作成され、ページ上部にあるドロップダウン リストで選択されたら、そのプロジェクトに対して Compute Engine API のアクセスを有効にする必要があります。 [+ Enable APIs and Services](API とサービスを有効にする) をクリックし、"compute engine" を検索します。 次に、 [Enable](有効にする) を選択して、API アクセスを有効にします。

    First screenshot of Compute Engine API in the GCP console.

    Second screenshot of Compute Engine API in the GCP console.

  3. 次に、Terraform で GCP プロジェクトのリソースを作成および管理するために使用されるサービス アカウント キーを設定します。 サービス アカウント キーの作成ページにアクセスします。 ドロップダウン リストから [新しいサービス アカウント] を選択し、名前を指定してから、プロジェクト、ロールとしての所有者、キーの種類としての JSON を順に選択し、 [作成] を選択します。 これにより、Terraform がリソースを管理するために必要なすべての資格情報を含む JSON ファイルがダウンロードされます。 ダウンロードした JSON ファイルを azure_arc_servers_jumpstart/gcp/windows/terraform ディレクトリにコピーします。

    A screenshot of how to create a service account in the GCP console.

展開

Terraform プランを実行する前に、プランで使用される環境変数を設定し、エクスポートする必要があります。 これらの変数は、先ほど作成した Azure サービス プリンシパル、Azure サブスクリプションとテナント、GCP プロジェクト名に基づいています。

  1. az account list コマンドを使用して、Azure サブスクリプション ID とテナント ID を取得します。

  2. Terraform プランでは、Microsoft Azure と Google Cloud Platform の両方にリソースが作成されます。 次に、GCP 仮想マシンでスクリプトが実行され、Azure Arc エージェントと必要なすべてのアーティファクトがインストールされます。 このスクリプトには、GCP および Azure 環境に関する特定の情報が必要です。 scripts/vars.sh を編集し、各変数を適切な値で更新します。

    • TF_VAR_subscription_id = お使いの Azure サブスクリプション ID
    • TF_VAR_client_id = お使いの Azure サービス プリンシパル アプリケーション ID
    • TF_VAR_client_secret = お使いの Azure サービス プリンシパル パスワード
    • TF_VAR_tenant_id = お使いの Azure テナント ID
    • TF_VAR_gcp_project_id = GCP プロジェクト ID
    • TF_VAR_gcp_credentials_filename = GCP 資格情報 JSON ファイル名
  3. CLI から、クローンされたリポジトリの azure_arc_servers_jumpstart/gcp/windows/terraform ディレクトリに移動します。

  4. 下に示すように、source コマンドを使って scripts/vars.sh を実行することにより、編集した環境変数をエクスポートします。 Terraform ではプランを適切に実行するために、これらを設定する必要があります。

    source ./scripts/vars.sh
    
  5. Terraform AzureRM プロバイダーをダウンロードする terraform init コマンドを実行します。

    A screenshot of the terraform init command.

  6. 次に、terraform apply --auto-approve コマンドを実行して、プランが終了するまで待ちます。 Terraform スクリプトが完了すると、GCP Windows Server 2019 VM がデプロイされ、スクリプト (VM に Azure Arc エージェントをダウンロードして、VM を新しい Azure Arc 対応サーバーとして新しい Azure リソース グループ内に接続する) が開始されます。 エージェントがプロビジョニングを完了するまでに数分かかりますので、休憩しましょう。

    A screenshot of the terraform apply command.

  7. 数分後に Azure portal を開くと、arc-gcp-demo リソース グループに移動できるようになっているはずです。 GCP に作成された Windows Server 仮想マシンがリソースとして表示されます。

    A screenshot of an Azure Arc-enabled server in the Azure portal.

半自動デプロイ (省略可能)

Terraform プランは、VM が最初に起動されたときに PowerShell スクリプトを実行して Azure Arc エージェントを自動的にインストールし、VM を管理対象リソースとして Azure に接続します。

A screenshot of the azcmagent connect command.

実際の登録プロセスのデモまたは制御を行う場合は、次の手順を行います。

  1. terraform apply コマンドを実行する前に main.tf を開き、windows-startup-script-ps1 = local-file.install_arc_agent-ps1.content 行をコメント アウトしてファイルを保存します。

    A screenshot showing main.tf being commented out to disable automatic onboarding of an Azure Arc agent.

  2. 上記の指示に従って terraform apply --auto-approve を実行します。

  3. GCP コンソールを開き、コンピューティング インスタンス ページに移動して、作成した VM を選択します。

    A screenshot of a server in the GCP console.

    A screenshot showing how to reset a password for a Windows Server in the GCP console.

  4. [Set Password](パスワードの設定) を選択し、ユーザー名を指定して VM のユーザーとパスワードを作成します。

    A screenshot showing how to set a username and password for a Windows Server in the GCP console.

  5. GCP コンソールの VM ページで [RDP] ボタンを選択して仮想マシンに RDP 接続し、先ほど作成したユーザー名とパスワードでサインインします。

    A screenshot showing how to RDP into a GCP instance.

  6. ログインしたら、管理者として PowerShell ISE を開きます。 PowerShell ISE の x86 バージョンではなく、x64 バージョンを実行していることを確認してください。 開いたら、[File](ファイル)> > [New](新規作成) を選択して、空の .ps1 ファイルを作成します。 次に、./scripts/install_arc_agent.ps1 の内容全体を貼り付けます。 [play(実行)] ボタンをクリックして、スクリプトを実行します。 完了すると、マシンが正常にオンボードしたことを示す出力が表示されるはずです。

    Screenshot showing the Windows PowerShell integrated scripting environment with an Azure Arc agent connection script.

デプロイの削除

このデモの一部として作成したすべてのリソースを削除するには、下のように terraform destroy --auto-approve コマンドを使用します。

A screenshot of the terraform destroy command.

または、GCP コンソールから直接 GCP VM を削除することもできます。

A screenshot showing how to delete a virtual machine from the GCP console.