Azure
infrastructure
Terraform

Terraformを使い、Azureのインフラ構築してみた

仕事でTerraformを使用する機会をもらえたので作業ログ
Azureのqiita少なくないですか…?

環境

ホストPC: Mac
Terraform v0.11.7
Azure CLI 0.10.18

Terraformをインストール

tfenvを使ってインストールします
Macユーザーの方はHomebrewを使ってインストールできます

$ brew install tfenv

 tfenv install/uninstall

指定したversionをインストール/アンインストールすることが出来ます。
今回はlatestで最新版をインストールします

$ tfenv install 0.8.0
$ tfenv install latest # 最新のversion
$ tfenv uninstall 0.8.0

tfenv use

terraformの利用するversionを切り替えることが出来ます

$ tfenv use 0.8.0

Azure CLI 2.0をインストールする

まず、Azureリソースを管理するために必要なコマンドラインツールであるAzure CLIをインストールします。
これはTerraform から Azure にアクセスするための設定になります
Macを使っている方は、Homebrewを使用するのが最も簡単です。

$ brew update && brew install azure-cli

CLIインストール後は、azコマンドでAzure CLIを実行することが出来ます

Azure CLIを設定する

まずは次のコマンドを実行しAzure CLIにログインします

$ az login

そうするとWebブラウザを開くようにと指示されます

To sign in, use a web browser to open the page https://aka.ms/devicelogin and enter the code XXXXXXXX to authenticate.

https://aka.ms/deviceloginにログインし、指示通りにcodeをうちこみます
ログイン後は次のコマンドを実行することでアカウントに紐付いている サブスクリプションの一覧を表示することが出来ます

$ az account list

実行結果

[
  {
    "cloudName": "AzureCloud",
    "id": "00000000-0000-0000-0000-000000000000",
    "isDefault": true,
    "name": "PAYG Subscription",
    "state": "Enabled",
    "tenantId": "00000000-0000-0000-0000-000000000000",
    "user": {
      "name": "user@example.com",
      "type": "user"
    }
  }
]

サブスクリプション一覧の中から自分が利用したいものを選択し、次のコマンドでサブスクリプションをを設定します。

$ az account set --subscription="SUBSCRIPTION_ID"

アカウントを照会してサブスクリプション ID とテナント ID の値を取得します。

$ az account show --query "{subscriptionId:id, tenantId:tenantId}"
実行結果
{
  "subscriptionId": "***********************",
  "tenantId": "********************"
}

そして、terraform用に別個の資格情報を作成します

$ az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/${SUBSCRIPTION_ID}"
実行結果
{
  "appId": "****************************:",
  "displayName": "***********************",
  "name": "************************",
  "password": "**********************************",
  "tenant": "************************************"
}

資格情報のテストは下記コマンドを実行します

$ az login --service-principal -u SP_NAME -p PASSWORD --tenant TENANT
$ az vm list-sizes --location westus

Terraformの環境変数を構成する

Azureリソースを作成する時に以下の設定を使用するようにTerraformを構成します
- ARM_SUBSCRIPTION_ID
- ARM_CLIENT_ID
- ARM_CLIENT_SECRET
- ARM_TENANT_ID
- ARM_ENVIRONMENT

次のシェルスクリプトを使用して設定します
それぞれにAzure CLIで確認した項目を入力していきます

echo "Setting environment variables for Terraform"
export ARM_SUBSCRIPTION_ID=your_subscription_id
export ARM_CLIENT_ID=your_appId
export ARM_CLIENT_SECRET=your_password
export ARM_TENANT_ID=your_tenant_id

Terraformを実行する

terraformディレクトリを作成し、test.tfファイルを作成

test.tf
provider "azurerm" {
}
resource "azurerm_resource_group" "test" {
        name = "testResourceGroup"
        location = "westus"
}

test.tfファイルを保存し、terraform initコマンドを実行
このコマンドを実行することによってAzureリソースグループを作成するために必要なAzureモジュールがダウンロードされます

terraform plan

terraform planコマンドは、作成したテンプレートに誤りが無いかと、テンプレートを適用した結果意図したリソースが作成されるか(実行計画)を確認するためのコマンドになります

$ terraform plan

terraform apply

terraform planの結果、問題ないことが確認できたら、実際にリソースグループを作成していきます。

$ terraform apply
実行結果
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  + azurerm_resource_group.rg
      id:       <computed>
      location: "westus"
      name:     "testResourceGroup"
      tags.%:   <computed>

azurerm_resource_group.rg: Creating...
  location: "" => "westus"
  name:     "" => "testResourceGroup"
  tags.%:   "" => "<computed>"
azurerm_resource_group.rg: Creation complete after 1s

できでる〜〜
今回は
- Terraformのインストール
- Azrue資格情報の構成
- Azureリソースグループの作成

を行いました。次はAzure VMを作成していきます!
ありがとうございました!

参考

https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/terraform-install-configure
https://www.terraform.io/docs/providers/azurerm/authenticating_via_azure_cli.html