🗂

azurerm 4.x系をapplyした際のsubscription IDの指定についてメモ

2025/01/15に公開

現象

AKSを題材にterraformを勉強中に、Github Actions走らせたら以下のようなエラーが出てきました。

╷
│ Error: `subscription_id` is a required provider property when performing a plan/apply operation
│ 
│   with provider["registry.terraform.io/hashicorp/azurerm"],
│   on providers.tf line 20, in provider "azurerm":
│   20: provider "azurerm" ***
│ 
╵

Azure learnのterraformサンプルだと以下のように"~>3.0"なのですが、
2025/1/15時点での最新の"4.15.0"にすると上記のエラーになります。

terraform {
  required_version = ">=1.0"

  required_providers {
    azapi = {
      source  = "azure/azapi"
      version = "~>1.5"
    }
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~>3.0" # ここを"~>=4.15.0"
    }
    random = {
      source  = "hashicorp/random"
      version = "~>3.0"
    }
    time = {
      source  = "hashicorp/time"
      version = "0.9.1"
    }
  }
}

provider "azurerm" {
  features {}
}

原因

terraformの公式のNoteに書いている通りでsubscription_idはplan or applyで必須になったというだけなのですが、サンプルコードには書いていないので少し不親切な気はします。
https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs#argument-reference

以下のようにsubscription_idをコードで直書きはあり得ないので、

provider "azurerm" {
  features {}
  subscription_id = "*************"
}

公式のnoteに書いている通りで、Azure CLIの実行時の環境変数"ARM_SUBSCRIPTION_ID"を設定するstepを追加することが基本的な選択肢になると思います。

以下、Github Actionsのstepです

      - name: login to Azure for storage
        uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_STORAGE_TF_CREDENTIALS }}

      - name: set subscription id
        run: echo "ARM_SUBSCRIPTION_ID=$(az account show --query id -o tsv)" >> $GITHUB_ENV

Discussion