1. はじめに
1-1 ご挨拶
初めまして、井村と申します。
Terraform 構成ファイルで Azure サブスクリプションの資格情報を記述することは良くないため、PowerShellプロファイルを使ってAzureリソースを作成する方法を備忘録として残します。
Azure CLIやTerraformなどの自動化ツールがAzureリソースを操作するためにサービスプリンシパルを活用しますので、サービスプリンシパルの情報も併せてPowerShellプロファイルに記述します。
2. 事前準備
2-1 Azure CLIとTerraformのインストール
インストール後、バージョンを確認します。
# Azure CLIのバージョン確認
az version
# Terraformのバージョン確認
terraform version
# 出力例
{
"azure-cli": "2.71.0",
"azure-cli-core": "2.71.0",
"azure-cli-telemetry": "1.1.0",
"extensions": {}
}
Terraform v1.12.2
on windows_amd64
2-2 サービスプリンシパルの作成
1 . Azureへログイン
以下コマンドでAzureへログインします。
Connect-AzAccount
# 出力例
Account SubscriptionName TenantId Environment
------- ---------------- -------- -----------
<省略> <省略> "<AzureテナントID>" <省略>
後に使う AzureテナントID をメモします。
2 . AzureサブスクリプションIDの取得
以下コマンドでAzureサブスクリプションIDを取得します。
Get-AzSubscription
# 出力例
Name Id TenantId State
---- -- -------- -----
<省略> "<AzureサブスクリプションID>" <省略> <省略>
後に使う AzureサブスクリプションID をメモします。
3 . サービスプリンシパルの作成
以下コマンドでサービスプリンシパルを作成します。
- 権限:共同作成者
- サービスプリンシパル名:sp-dev-terraform
$sp = New-AzADServicePrincipal -DisplayName sp-dev-terraform -Role "Contributor"
4 . サービスプリンシパルのクライアントIDを表示します。
以下コマンドでサービスプリンシパルのクライアントIDを表示します。
$sp.AppId
# 出力例
"<サービスプリンシパルのクライアントID>"
後に使う サービスプリンシパルのクライアントID をメモします。
5 . 自動生成されたパスワードをテキストに変換します。
以下コマンドでサービスプリンシパルのパスワードを表示します。
$sp.PasswordCredentials.SecretText
# 出力例
"<サービスプリンシパルのパスワード>"
後に使う サービスプリンシパルのパスワード をメモします。
以上で事前準備は終了です。
3. PowerShellプロファイルの設定
1 . PowerShellプロファイルの起動
以下コマンドでPowerShellプロファイルをテキストで開きます。
notepad $PROFILE
2 . 資格情報の記載
テキスト内に以下を記載して保存します。
$env:ARM_TENANT_ID="<AzureテナントID>"
$env:ARM_SUBSCRIPTION_ID="<AzureサブスクリプションID>"
$env:ARM_CLIENT_ID="<サービスプリンシパルのクライアントID>"
$env:ARM_CLIENT_SECRET="<サービスプリンシパルのパスワード>"
3 . プロファイルの読み込み
以下コマンドでプロファイルの情報を環境変数へ反映させます。
. $PROFILE
4 . 環境変数の確認
以下コマンドでプロファイルより設定した環境変数を確認します。
gci env:ARM_*
# 出力例
Name Value
---- ----
ARM_TENANT_ID "<AzureテナントID>"
ARM_SUBSCRIPTION_ID "<AzureサブスクリプションID>"
ARM_CLIENT_ID "<サービスプリンシパルのクライアントID>"
ARM_CLIENT_SECRET "<サービスプリンシパルのパスワード>"
以上でPowerShellプロファイルの設定は終了です。
4. 検証
最後にTerraformを利用してリソースグループを作成します。
検証用フォルダとしてデスクトップ上に「Work_Terraform」を作成します。
Terraform構成ファイルは以下となります。
Work_Terraform
│── main.tf
│── outputs.tf
│── provider.tf
│── terraform.tfvars
└── variables.tf
1 . 検証用フォルダの準備
# 検証用フォルダの作成
New-Item -Path "$HOME\Desktop\Work_Terraform" -ItemType Directory
# 検証用フォルダへ移動
Set-Location -Path "$HOME\Desktop\Work_Terraform"
2 . Terraform構成ファイルの準備
以下Terraform構成ファイルを検証用フォルダに格納します。
main.tf
resource "azurerm_resource_group" "rg" {
name = "rg-${var.env}-${var.location}-${var.system}"
location = var.location
}
outputs.tf
output "resource_group_name" {
value = azurerm_resource_group.rg.name
}
output "resource_group_location" {
value = azurerm_resource_group.rg.location
}
provider.tf
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>3.0"
}
}
}
provider "azurerm" {
features {}
}
terraform.tfvars
env = "dev"
location = "japaneast"
system = "hoge"
variables.tf
variable "env" {
description = "Environment"
type = string
}
variable "location" {
description = "Azure location"
type = string
}
variable "system" {
description = "System name"
type = string
}
provider.tfに認証情報を記述していないことを確認します。
3 . リソースグループの作成
それではAzure上にリソースグループを作成します。
以下コマンドを実行します。
# 初期化
terraform init
# 計画の確認
terraform plan
# 適用
terraform apply
「terraform apply」が正常終了すると以下ログが出力されます。
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Outputs:
resource_group_location = "japaneast"
resource_group_name = "rg-dev-japaneast-hoge"
実際にAzureポータル画面からリソースグループを確認することができます。
以上で検証は終了です。