TerraformをAzure上に展開する
Ubuntu 20.04にterraformをインストールする
$ sudo apt update
$ sudo apt upgrade
公式リポジトリからTerraformをインストールする
$ curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
$ sudo apt-add-repository "deb [arch=$(dpkg --print-architecture)] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
リポジトリが追加されたら、次のコマンドを実行してTerraformをインストールする
$ sudo apt update
$ sudo apt install terraform
Terraform
がインストールされていることを確認する。
$ terraform -v
Terraform v1.1.6
on linux_amd64
Azure CLIでのログイン
Azure CLIのインストール方法などは、こちらを参照してください。
以下コマンドでAzureのログインができます。ブラウザが立ち上がって認証画面にリダイレクトされます。
$ az login
以下コマンドで、以下のような認証情報が出ていれば成功です。
$ az account show
{
"environmentName": "AzureCloud",
"homeTenantId": "<tenantId>",
"id": "<subscription_id>",
"isDefault": true,
"managedByTenants": [],
"name": "<subscription_name>",
"state": "Enabled",
"tenantId": "<tenantId>",
"user": {
"name": "<username>",
"type": "user"
}
}
サービスプリンシパル (SP) での認証
自分の個人アカウントでTerraformを実行しても良いと思いますが、大抵はCI/CD上からTerraformのコマンドを実行するかと思います。
そのために、個人ではなくサービスプリンシパルというアプリケーション用のアカウントというのを作れます。
# サブスクリプション情報を表示
$ az account list --query "[].{name:name, subscriptionId:id}"
[
{
"name": "subscription_name",
"subscriptionId": "********************"
}
]
# 特定のサブスクリプションへの操作設定
$ az account set --subscription="<subscription_id>"
# SPの作成
$ az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/<subscription_id>"
Creating a role assignment under the scope of "/subscriptions/******************:"
{
"appId": "**************",
"displayName": "*****",
"name": "***********",
"password": "***********",
"tenant": "*********"
}
ここで表示されたパスワードは必ず控えてください。
後から参照することはできません。
$ az login --service-principal -u <service_principal_name> -p <service_principal_password> --tenant <service_principal_tenant>
これでサービスプリンシパルとしてAzureにログインができます。
Terraform構成ファイルを作成
それでは実際にTerraform構成ファイル
を作成していきます。
まずはTerraform
用のディレクトリを作成します。
$ mkdir terraformTest
$ cd terraformTest
次にTerraform構成ファイルを作成していきます。
今回はterraformTest.tf
というファイルで作成します。
terraform {
required_version = ">=0.12"
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>2.0"
}
}
}
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "rg" {
name = "terraformTest-rg"
location = "japaneast"
}
内容としては以下を作成するという内容になります。
- Azureに対してのTerraform構成ファイル
- リージョンは
東日本リージョン
- リソースグループ
terraformTest-rg
それぞれのブロックについて紹介します。
provider
provider
ブロックで、Azureプロバイダー(azurerm)
を使用することを指定します。
resource リソース
azurerm_resource_group
のリソースの種類に対するもの
azure_resource_group
に必要な引数は以下の2つ
- name
- location
Terraformの実行
実際に実行してみます。実行する時は必ず構成ファイルがある場所まで移動する必要があります。
Terraformの初期化
リソースグループの作成に必要なモジュールがDLされる
$ terraform init
アクションのプレビュー
期待した通りに実行されるかを確かめることができる。
-out
パラメータを使用すると、後々のためにこのプランを保存しておくことができます。
$ terraform plan
実行プランの適用
実際にTerraformを実行します。
$ terraform apply
確認
実際にできているかを確認します。
$ az group show -n "terraformTest-rg"
{
"id": "/subscriptions/****/resourceGroups/terraformTest-rg",
"location": "japaneast",
"managedBy": null,
"name": "terraformTest-rg",
"properties": {
"provisioningState": "Succeeded"
},
"tags": {},
"type": "Microsoft.Resources/resourceGroups"
}
実行プランの保存
実行プランをファイル形式
で保存しておくことができる。
複雑な操作の場合は実行プランを指定して実行すると使いやすい。
# -out で出力するファイル名を指定
$ terraform plan -out terraTest.tfplan
# 上記ファイルを指定し、実行
$ terraform apply terraTest.tfplan
削除
なんと以下のコマンドで、Terraformで作成したリソースは以下のコマンドで削除できる。
# 途中でyesと入力することが求められる
$ terraform destroy
# 削除の確認
$ az group show -n "terraformTest-rg"
(ResourceGroupNotFound) Resource group 'terraformTest-rg' could not be found.
Code: ResourceGroupNotFound
Message: Resource group 'terraformTest-rg' could not be found.
TerraformでAzure上にコンテナを展開する
Terraformを元にインフラ構成図を自動生成
インフラ構成図を作っていくのがめんどくさかったので、調べたら以下のような便利なツールが出てきた。
インストール方法
$ git clone https://github.com/cycloidio/inframap
$ cd inframap
$ go mod download
$ make build
nframap
という実行ファイルが生成される。次に以下のコマンドでシンボリックリンクを貼る。
$ cd /usr/local/bin
$ ln -s <inframapがあるPATH> inframap