TerraformでAzureを触ってみます。
先週、ついにTerraformの0.15.0がGAになりました。
最新版のTerraformのインストール
というわけで、まずはTerraformの0.15.0をインストールします。
$ tfenv install 0.15.0 $ tfenv use 0.15.0 $ terraform version Terraform v0.15.0 on darwin_amd64
Azure CLIのインストール
Azureに対してTerraformを利用するためには、当然Azureの認証をパスする必要があります。 最初はもっとも簡易と思われるAzure CLIを利用した認証をしてみましょう。
Azure CLIのインストール方法はこちらに記載があります。
homebrewでインストールできるようなので、さっとインストールしてみます。
$ brew update && brew install azure-cli $ az version { "azure-cli": "2.22.0", "azure-cli-core": "2.22.0", "azure-cli-telemetry": "1.0.6", "extensions": {} }
Azureへのログイン
それでは早速Azure CLIを使ったユーザー認証をしてみましょう。az login
を実行すると、ブラウザが立ち上がり、そこでログインを行うことになります。
実際にそのフローを行うと、以下のような出力が得られました。
$ az login The default web browser has been opened at https://login.microsoftonline.com/common/oauth2/authorize. Please continue the login in the web browser. If no web browser is available or if the web browser fails to open, use device code flow with `az login --use-device-code`. You have logged in. Now let us find all the subscriptions to which you have access... [ { "cloudName": "AzureCloud", "homeTenantId": "xxxxxx", "id": "xxxxxx", "isDefault": true, "managedByTenants": [], "name": "無料試用版", "state": "Enabled", "tenantId": "xxxxxx", "user": { "name": "xxxxxx", "type": "user" } } ]
Terraformを実行してみる
ここでは、最初にリソースグループだけを作ってみましょう。以下のようなtfファイルをmain.tf
として保存します。
terraform { required_version = "0.15.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "=2.56.0" } } } provider "azurerm" { features {} } resource "azurerm_resource_group" "example" { name = "example" location = "Japan East" }
これをapplyしてみます。
$ ls main.tf $ terraform apply Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # azurerm_resource_group.example will be created + resource "azurerm_resource_group" "example" { + id = (known after apply) + location = "japaneast" + name = "example" } Plan: 1 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes azurerm_resource_group.example: Creating... azurerm_resource_group.example: Creation complete after 0s [id=/subscriptions/xxxxxx/resourceGroups/example] Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
うまくいったようですね。実際に作成できているのか確認してみましょう。
$ az group list -o table Name Location Status ------- ---------- --------- example japaneast Succeeded
きちんとリソースが作成されているようです。
Azureにログインできていなかった場合はどうなるか
Azureにログインできていなかった場合はどのようになるでしょうか。
az logout
をした上でterraform apply
を実行すると、認証エラーが返却されます。
$ az logout $ terraform apply ╷ │ Error: Error building AzureRM Client: obtain subscription() from Azure CLI: Error parsing json result from the Azure CLI: Error waiting for the Azure CLI: exit status 1: ERROR: Please run 'az login' to setup account. │ │ on main.tf line 12, in provider "azurerm": │ 12: provider "azurerm" { │ ╵
まとめ
今日は単にAzureのプロバイダを使ってリソースグループを作ってみただけです。 Azure CLIを使った認証方法だと、基本的にはinteractiveな操作が要求され、インフラ構築の「自動化」には向きません。
Terraform Registryには、Azure CLI以外の認証方法もまとまっているので、学びながら試してみます。