🎃

【Terraformハンズオン】細かいことは気にせずにTerraformでAzureリソースをデプロイする

2024/05/28に公開

はじめに

細かいことはいいから、いますぐterraform applyしてぇ!という方のための記事です。
方法はいくつかありますが、ローカルPC(Windows 11)で実行する手順とします(Cloud Shellのほうが早いのは内緒)

なお、Azureサブスクリプションは作成できていることとします。

事前準備

  1. Terraformダウンロード
  2. Azure CLIダウンロード

1. Terraformダウンロード

  1. 公式サイトからダウンロードすべし。
  2. ダウンロードしたらzipを解凍する。
  3. 解凍したディレクトリのアドレスをコピーする。
  4. いわゆる「パスを通す」をやる。コントロールパネルを開き、「環境変数を編集」をクリック。(「環境変数」と検索するのが早い)
  5. 「Path」をダブルクリックし編集する。
  6. 「新規」をクリックして、③でコピーしたアドレスを貼り付ける。「OK」で保存。
  7. PowerShellを起動し、terraform -vを実行。バージョン情報が返ったらOK。

2. Azure CLIダウンロード

公式の手順にしたがってインストールすべし。MSIでもいいし、wingetでもいいし。

Config用意

以下のコードを保存する。ファイル名は「main.tf」とかでOK
7行目の default = ... を一意のID(名前など)に変更する。

作成されるもの

  • リソースグループ x1
  • App Service Plan x1
  • App Service x1
main.tf
# プロバイダー指定
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 実行

  1. Azure認証
  2. terraform init
  3. terraform plan
  4. terraform Apply

1. Azure認証

  1. PowerShell等のターミナルを起動する
  2. az loginを実行し、Azureにログインする

2. terraform init

  1. PowerShellを起動し、main.tfを保存したディレクトリに移動する。
    cd <main.tfのディレクトリ>

  2. terraform initを実行。Terraform has been successfully initialized!と表示されればOK

  3. .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の以下部分を変更し保存する。

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実行

  1. terraform planを実行すると、実行結果にも変更内容が反映されている。

  2. そのままterraform apply -auto-approveを実行する。

  3. Azureポータルを確認すると、SKUの値が変更されていることがわかる。

Appendix.1 リソースの再作成

Terraformではリソースの変更ができない場合、replace(再作成)により、変更を解決する機能がある。
Configを以下のように編集し、リソースグループのリージョンを変更しようとすると

main.tf
...
# リソースグループ
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