Terraform プランを使用してアマゾン ウェブ サービスの Amazon Elastic Compute Cloud インスタンスをデプロイし、Azure Arc に接続する

この記事では、指定された Terraform プランを使用してアマゾン ウェブ サービス (AWS) の Amazon Elastic Compute Cloud (EC2) インスタンスをデプロイし、それを Azure Arc 対応サーバー リソースとして接続するためのガイダンスを提供します。

前提条件

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

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

    az --version
    
  3. SSH キーを生成します (または既存の SSH キーを使用します)

  4. 無料の AWS アカウントを作成します

  5. 0.12 以降の Terraform をインストールします

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

    AWS 仮想マシンを 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://AzureArcAWS" --role contributor --scopes "/subscriptions/00000000-0000-0000-0000-000000000000"
    

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

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

    Note

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

AWS ID を作成する

Terraform で AWS にリソースを作成するには、適切なアクセス許可を持つ新しい AWS IAM ロールを作成し、それを使用するように Terraform を構成する必要があります。

  1. AWS マネジメント コンソールにサインインします

  2. サインインしたら、左上の [サービス] ドロップダウン リストを選択します。 [Security, Identity, and Compliance](セキュリティ、ID、およびコンプライアンス) で、 [IAM] を選択して、ID およびアクセス管理のページにアクセスします

    A screenshot of an AWS cloud console.

    A screenshot of identity and access management in the AWS cloud console.

  3. 左側のメニューで [ユーザー] をクリックし、 [ユーザーを追加] を選択して新しい IAM ユーザーを作成します。

    A screenshot of creating a new user in an AWS cloud console.

  4. [ユーザーを追加] ページで、ユーザーに Terraform という名前を指定し、 [プログラムによるアクセス] チェックボックスをオンにして、 [次のステップ] を選択します。

    Second screenshot of creating a new user in an AWS cloud console.

  5. 「アクセス許可の設定」ページで、「既存のポリシーを直接添付する」を選択し、スクリーンショットに示されているようにAmazonEC2FullAccessの横のチェックボックスをオンにしてから、「次のステップ」を選択します。

    Third screenshot of creating a new user in an AWS cloud console.

  6. [タグ] ページで、azure-arc-demo というキーを持つタグを割り当て、 [次のステップ] を選択して [確認] ページに進みます。

    A screenshot of tags in an AWS cloud console.

  7. すべてが正しいことを確認し、準備ができたら [ユーザーの作成] を選択します。

    Fourth screenshot of creating a user in an AWS cloud console.

  8. ユーザーが作成されると、ユーザーのアクセス キー ID とシークレット アクセス キーが表示されます。 これらの値をコピーしてから [閉じる] を選択します。 次のページでは、これがどのように表示されるかの例を確認できます。 これらのキーを取得すると、これらを Terraform で使用して AWS リソースを作成できるようになります。

    A screenshot of creating a user successfully in an AWS cloud console.

Terraform を構成する

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

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

  2. Terraform プランでは、Microsoft Azure と AWS の両方にリソースが作成されます。 次に、AWS EC2 仮想マシンでスクリプトを実行されて、Azure Arc エージェントと必要なすべてのアーティファクトがインストールされます。 このスクリプトには、AWS および 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
    • AWS_ACCESS_KEY_ID = AWS アクセス キー
    • AWS_SECRET_ACCESS_KEY = AWS シークレット キー
  3. Azure CLI から、複製されたリポジトリの azure_arc_servers_jumpstart/aws/ubuntu/terraform ディレクトリに移動します。

  4. 次に示すように、ソース コマンドを使用して scripts/vars.sh を実行することにより、編集した環境変数をエクスポートします。 Terraform ではプランを適切に実行するために、これらを設定する必要があります。 このスクリプトは、Terraform のデプロイの一部として、AWS 仮想マシンでも自動的にリモートで実行されることに注意してください。

    source ./scripts/vars.sh
    
  5. SSH キーが ~/.ssh で使用可能であり、かつ id_rsa.pub および id_rsa という名前であることを確認します。 ssh-keygen上記の ガイドをフォローしてキーを作成した場合は、既に正しくセットアップされているはずです。 されていない場合は、別のパスのキーを使用するように main.tf を変更する必要があります。

  6. Terraform AzureRM プロバイダーをダウンロードする terraform init コマンドを実行します。

    A screenshot of the terraform init command.

展開

  1. terraform apply --auto-approve コマンドを実行して、プランが終了するまで待ちます。 完了すると、AWS Amazon Linux 2 EC2 インスタンスがデプロイされ、新しいリソース グループ内の新しい Azure Arc 対応サーバーとして接続されます。

  2. Azure portal を開き、arc-aws-demo リソース グループに移動します。 AWS に作成された仮想マシンはリソースとして表示されます。

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

    A screenshot of AWS console displaying EC2 instances.

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

お気付きかもしれませんが、実行の最後の段階では、VM を新しい Azure Arc 対応サーバー リソースとして登録します。

A screenshot of the azcmagent connect command.

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

  1. install_arc_agent.sh.tmplスクリプト テンプレートで run connect command セクションをコメント アウトし、ファイルを保存します。

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

  2. terraform output を実行して、AWS VM のパブリック IP を取得します。

    A screenshot of output from Terraform.

  3. ssh ubuntu@xx.xx.xx.xx を使用して VM に SSH 接続します。ここで、xx.xx.xx.xx はホストの IP です。

    A screenshot of an SSH key connecting to an EC2 server.

  4. vars.sh のすべての環境変数をエクスポートします。

    A screenshot of exported environment variables in vars.sh.

  5. 次のコマンドを実行します。

    azcmagent connect --service-principal-id $TF_VAR_client_id --service-principal-secret $TF_VAR_client_secret --resource-group "arc-aws-demo" --tenant-id $TF_VAR_tenant_id --location "westus2" --subscription-id $TF_VAR_subscription_id
    

    Another screenshot of the azcmagent connect command.

  6. 完了すると、VM は Azure Arc に登録され、Azure portal 経由でリソース グループに表示されます。

デプロイの削除

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

A screenshot of the terraform destroy command.

または、AWS コンソールから AWS EC2 インスタンスを終了して、インスタンスを直接削除することもできます。 インスタンスが実際に削除されるまでに数分かかることに注意してください。

A screenshot of how to terminate an instance in the AWS console.

インスタンスを手動で削除する場合は、Terraform プランによって作成された *./scripts/install_arc_agent.sh も削除する必要があります。