【Terraformハンズオン】細かいことは気にせずにTerraformでAzureリソースをデプロイする
はじめに
細かいことはいいから、いますぐterraform applyしてぇ!という方のための記事です。
方法はいくつかありますが、ローカルPC(Windows 11)で実行する手順とします(Cloud Shellのほうが早いのは内緒)
なお、Azureサブスクリプションは作成できていることとします。
事前準備
- Terraformダウンロード
- Azure CLIダウンロード
1. Terraformダウンロード
- 公式サイトからダウンロードすべし。
- ダウンロードしたらzipを解凍する。
- 解凍したディレクトリのアドレスをコピーする。
- いわゆる「パスを通す」をやる。コントロールパネルを開き、「環境変数を編集」をクリック。(「環境変数」と検索するのが早い)
- 「Path」をダブルクリックし編集する。
- 「新規」をクリックして、③でコピーしたアドレスを貼り付ける。「OK」で保存。
- PowerShellを起動し、
terraform -v
を実行。バージョン情報が返ったらOK。
2. Azure CLIダウンロード
公式の手順にしたがってインストールすべし。MSIでもいいし、wingetでもいいし。
Config用意
以下のコードを保存する。ファイル名は「main.tf」とかでOK
7行目の default = ...
を一意のID(名前など)に変更する。
作成されるもの
- リソースグループ x1
- App Service Plan x1
- App Service x1
# プロバイダー指定
provider "azurerm" {
features {}
}
# 環境変数
variable "environment" {
default = "Enter your name."
}
# リソースグループ
resource "azurerm_resource_group" "rg1" {
name = "${var.environment}-rg"
location = "japaneast"
}
# App Service
resource "azurerm_windows_web_app" "aps1" {
name = "${var.environment}-aps"
resource_group_name = azurerm_resource_group.rg1.name
location = azurerm_resource_group.rg1.location
service_plan_id = azurerm_service_plan.plan1.id
site_config {
}
}
# App Service Plan
resource "azurerm_service_plan" "plan1" {
name = "${var.environment}-plan"
resource_group_name = azurerm_resource_group.rg1.name
location = azurerm_resource_group.rg1.location
sku_name = "B1"
os_type = "Windows"
}
Terraform 実行
- Azure認証
- terraform init
- terraform plan
- terraform Apply
1. Azure認証
- PowerShell等のターミナルを起動する
-
az login
を実行し、Azureにログインする
2. terraform init
-
PowerShellを起動し、main.tfを保存したディレクトリに移動する。
cd <main.tfのディレクトリ>
-
terraform init
を実行。Terraform has been successfully initialized!
と表示されればOK
-
.terraform
と.terraform.lock.hcl
が生成される。
3. terraform plan
そのままterraform plan
を実行する。エラーっぽいものが出なければOK
4. terraform apply
terraform apply -auto-approve
を実行する。(-auto-approveをつけない場合、planと同じ挙動をしたあと、適用するか確認される)
以下のメッセージが出力されたら完了。
結果確認
Azureポータルを開き、App Serviceの一覧から作成されたApp Serviceを見つける。
Terraformで設定変更
1. Config変更
main.tfの以下部分を変更し保存する。
# App Service Plan
resource "azurerm_service_plan" "plan1" {
name = "${var.environment}-plan"
resource_group_name = azurerm_resource_group.rg1.name
location = azurerm_resource_group.rg1.location
- sku_name = "B1"
+ sku_name = "S1"
os_type = "Windows"
2. Terraform実行
-
terraform planを実行すると、実行結果にも変更内容が反映されている。
-
そのまま
terraform apply -auto-approve
を実行する。 -
Azureポータルを確認すると、SKUの値が変更されていることがわかる。
Appendix.1 リソースの再作成
Terraformではリソースの変更ができない場合、replace(再作成)により、変更を解決する機能がある。
Configを以下のように編集し、リソースグループのリージョンを変更しようとすると
...
# リソースグループ
resource "azurerm_resource_group" "rg1" {
name = "${var.environment}-rg"
- location = "japaneast"
+ location = "japanwest"
}
...
terraform planを実行すると、削除→再作成が通知される。便利だが思わぬ事故につながる可能性もあるので注意すること。
Appendix.2 terraform destroy
検証用リソースを削除したい場合は、以下のコマンドを実行することで全消しできる。
terraform apply -auto-approve -destroy
Discussion