terraformを使えばクラウド上のリソースを定義ファイルの状態になるように構築してくれます。
今回はterraformを使いAzureの環境の構築・運用自動化に入門してみます。
本記事では、以下を掲載します。
1,CentOS7にterraform実行環境インストール
2,TerraformからAzureにアクセスするための値を取得
3,実際にAzureのリソースグループをterraformで作成
前提
Azureアカウント作成済みであること。
1,CentOS7にterraform実行環境インストール
※rootユーザでの作業とします。
# terraformダウンロード
wget https://releases.hashicorp.com/terraform/0.11.13/terraform_0.11.13_linux_amd64.zip
# terraform配置
unzip ./terraform_0.11.13_linux_amd64.zip -d /usr/local/bin/
# 確認
terraform -v
# terraform用ディレクトリ作成
mkdir terraform
cd terraform
2,TerraformからAzureにアクセスするための値を取得
Azureコンソール上部の以下のマークをクリックし、Azure Cloud Shellに接続。
[bash]か[PowerShell]か選ぶ画面が表示されたら[bash]を選ぶ。すると以下の画面が表示される。
ここで以下コマンドで値を取得する。
# サブスクリプションID、テナントIDを表示
araki@Azure:~$ az account show --query "{subscriptionId:id, tenantId:tenantId}"
{
"subscriptionId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"tenantId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
# アカウントにSUBSCRIPTIONが複数ある場合以下でID設定をする。
一つしかない場合はやる必要がない。むしろやるとエラーになる。
araki@Azure:~$ SUBSCRIPTION_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
araki@Azure:~$ az account set --subscription="SUBSCRIPTION_ID"
# Terraformで使用するサービス プリンシパルを作成
araki@Azure:~$ az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/${SUBSCRIPTION_ID}"
Creating a role assignment under the scope of "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Retrying role assignment creation: 1/36
{
"appId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"displayName": "azure-cli-YYYY-MM-DD-hh-mm-ss",
"name": "http://azure-cli-YYYY-MM-DD-hh-mm-ss",
"password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"tenant": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
3,実際にAzureのリソースグループをterraformで作成
変数設定
CentOS7に戻り先程取得した値を変数に設定する。
export ARM_SUBSCRIPTION_ID=サブスクリプションID
export ARM_CLIENT_ID=アップId
export ARM_CLIENT_SECRET=パスワード
export ARM_TENANT_ID=テナントID
tfファイル作成
vi test.tf
※以下記載。
provider "azurerm" {
}
resource "azurerm_resource_group" "rg" {
name = "testResourceGroup"
location = "westus"
}
上記はtestResourceGroupという名前のリソースグループをwestusに作成する定義をしています。
Terraformのデプロイを初期化
terraform init
※Terraform has been successfully initialized! と表示されたら成功。
ドライラン
terraform plan
※最下部に以下のように表示される。
Terraform will perform the following actions:
+ azurerm_resource_group.rg
id: <computed>
location: "westus"
name: "testResourceGroup"
tags.%: <computed>
Plan: 1 to add, 0 to change, 0 to destroy.
「+」マークがリソース定義により作成される項目です。最終行は追加、変更、削除の項目が何個あるかを表しています。
リソース定義を適用
terraform apply
※途中、本当に適用するか確認されるのでyesと入力する。
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
※最後に以下表示される。
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
実際にコンソール上で確認するとリソースグループが作成されています。
以上、簡単にTerafformでAzureリソースを作成してみましたが、リソース定義についてこちらも参考になります。
・TerraformによってAzureに完全な Linux 仮想マシンのインフラストラクチャを作成する
参考
・VM などのインフラストラクチャを Azure にプロビジョニングするための Terraform のインストールと構成