【優しいTerraform入門 #1】Terraformの環境構築 for Azure
■前提条件
- [必須] Azureサブスクリプションを利用できること
- [必須] ローカルPCに Azure CLI をインストールしていること
- まだ導入できてない方は
brew install azure-cli
でインストールしましょう!
または手動でインストールする方法もあります。
【公式】Azure CLI をインストールする方法
- まだ導入できてない方は
- [任意(Mac/Linux)] ローカルPCに Homebrew をインストールしていること
■Terraformの開発環境を構築しよう
Mac/Linux(Amazon Linux3)の環境設定の手順を紹介します。
※Windows環境の設定方法は、手動でインストールするパターンとChocolatey
を使用するパターンがあります。セットアップ後、PATH環境変数を通してどのディレクトリでもterraformコマンドを利用できるようにしましょう!
choco install terraform
1.Terraformをインストールする
【公式】手動でインストールする方法もあります。実際の開発では、Terraformのバージョンを固定して管理することもあるため、バージョン管理ツールをインストールすることを推奨します。
Terraformの バージョン管理ツール(tfenv) をインストールします。
brew install tfenv
利用可能のTerraformバージョンを取得します。執筆段階では、1.7.3
が最新版でした。
tfenv list-remote
Terraform(1.7.3)をインストールします。この状態ではまだ使用できません。
tfenv install 1.7.3
念の為、ローカルPC上で使用できるTerraformのバージョンを確認します。
tfenv list
Terraform(1.7.3)を使用するように切り替えます。
tfenv use 1.7.3
tfenv use
を実行後、下記のような結果になっていればOKです!
2.サービスプリンシパルを発行する
Azureポータルサイトにアクセスし、Microsoft Entra IDコンソールからアプリケーションの登録を行います。
sp_for_terraform
と名付けたサービスプリンシパルを作成します。
クライアントIDをメモします(後で使用します)。次にクライアントシークレットを発行していきます。
適当な説明文と有効期限を設定して、発行します。発行後のクライアントシークレットもメモします。
3.サービスプリンシパルにAzureロールを付与する
リソースを構築したいサブスクリプションのコンソールの「アクセス制御(IAM)」にアクセスし、サービスプリンシパルに共同作成者のAzureロールを付与します。キーコンテナに証明書追加やAKSクラスタへのアクセス付与などは専用のAzureロールが必要になるため、適宜 追加しましょう!
■TerraformでAzureリソースを構築しよう
1.Azureの資格情報をTerraformに設定する
設定する方法は、下記の3パターンあります。
① ローカルPCの環境変数に登録する
② tfvarsファイルにハードコーディングする
③ terraform コマンド時に指定する
本ブログでは②を紹介します(ブログで表現しやすいため😅)。
<任意の名前>.tfvars
というファイルを作成します。下記のコードをコピペして、必要な値を設定します。
provider_credentials = {
subscription_id = "<構築したい先のサブスクリプションID>"
tenant_id = "<Microsoft Entra ID>"
sp_client_id = "<クライアントID>"
sp_client_secret = "<クライアントシークレット>"
}
設定後は、下記のようになります。
2.Terraformファイルを作成する
本ブログではストレージアカウントを作成するTerraformファイルを紹介します。
<任意の名前>.tfvars
と同じ階層にmain.tf
とvariables.tf
を作成します。
provider "azurerm" {
subscription_id = var.provider_credentials.subscription_id
tenant_id = var.provider_credentials.tenant_id
client_id = var.provider_credentials.sp_client_id
client_secret = var.provider_credentials.sp_client_secret
features {}
}
locals {
resource_group_name = "rg-techblog"
storage_account_diag_name = "satbdiag20240212"
}
resource "azurerm_resource_group" "je" {
name = local.resource_group_name
location = var.location
}
# 診断ログの保管ストレージ
resource "azurerm_storage_account" "diag" {
name = local.storage_account_diag_name
resource_group_name = azurerm_resource_group.je.name
location = azurerm_resource_group.je.location
account_tier = "Standard"
account_replication_type = "LRS"
}
variable "provider_credentials" {
type = object({
subscription_id = string
tenant_id = string
sp_client_id = string
sp_client_secret = string
})
}
variable "location" {
type = string
default = "japaneast"
}
3.Terraformでリソースを作成する
Terraformプロバイダを初期化(init)します。
terraform init
構築されるリソース情報の計画(plan)を実行します。
terraform plan -var-file=<任意の名前>.tfvars
リソース構築(apply)します。
terraform apply -var-file=<任意の名前>.tfvars
planと同じ結果が表示された後、リソース構築の確認を求められます。yes
と入力し、実行してみます。
Plan: 2 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:
1~2分ぐらいで構築できるはず。成功後、下記の表示を確認します。
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
4.構築されたリソースを確認する
リソースグループとストレージアカウントを確認します。
5.構築されたリソースを削除する
削除する方法は、下記の2パターンあります。
① Terraformコマンドから削除する
② Azureポータルサイトから手動で削除する
本ブログでは①を紹介します。
リソースを削除します。
terraform destroy -var-file=<任意の名前>.tfvars
リソース削除の確認を求められます。yes
と入力し、削除を行います。
Plan: 0 to add, 0 to change, 2 to destroy.
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
成功後、下記の表示を確認します。
Destroy complete! Resources: 2 destroyed.
アクティビティログを確認すると、Terraformの操作アクションが記録されていますね!
Discussion