Open3

Azureでterraform test

だいみょーだいみょー

はじめに

Terraform v1.6.0で導入された、testコマンドをAzureで実行してみるの巻。

尚、手元の環境はmoduleを使っており、ざっと下記のようなディレクトリ構成になっています。

root
 ├ modules // サービス毎にmoduleを定義
 │ ├ resource_group
 │ │ ├ main.tf
 │ │ ├ variables.tf
 │ │ └ output.tf
 │ └ appservice_plan
 ├ develop // 環境毎にディレクトリを定義
 │ ├ main.tf // moduleを呼び出してリソースを作成
 │ └ variables.tf
 ├ staging
 └ production
だいみょーだいみょー

modulesディレクトリで実行したときのあれこれ

上記で実行したときにハマったことや気付いたことについてメモっていきます。

module本体とtestは下記の通り。

modules/resource_group/main.tf
resource "azurerm_resource_group" "common_module_resource_group" {
  name     = var.resource_group_config.name
  location = var.common_config.location
}
modules/resource_group/resouce_group.tftest.hcl
run "test" {
    command = plan

    assert {
        condition = azurerm_resource_group.common_module_resource_group.name == "rg-common-dev-je-001"
        error_message = "Resource group name is not correct"
    }
}

エラー:Missing required provider

以下のエラーが出ました。
initせいってことなので、terraform initをして再実行。

│ This configuration requires provider registry.terraform.io/hashicorp/azurerm, but that provider isn't available. You may be able to install it
│ automatically by running:
│   terraform init

エラー:Insufficient features blocks

どうやらfeautreブロックが必要みたいです。

│   on <empty> line 0:
│   (source code not available)
│ 
│ At least 1 "features" blocks are required.

resouce_group.tftest.hclを以下に書き換えて再実行してみます。

provider "azurerm" {
  features {}
}

run "test" {
    command = plan

    assert {
        condition = azurerm_resource_group.common_module_resource_group.name == "rg-common-dev-je-001"
        error_message = "Resource group name is not correct"
    }
}

通りました〜
plan実行にあたり多少いじいじする必要ありますね。

Hidden comment