Provider Configuration

2 件の記事

ルール

Do not define provider blocks within shared modules (provider configuration should be done only once in root module)

(サブモジュール内で provider ブロックを定義しない。provider の設定はルートモジュールで一度だけ行う)

解説

プロバイダの設定はルートモジュールで一元管理します。サブモジュール内に provider ブロックを含めると混乱のもととなるため禁止します。

サンプルコード

# ルートモジュール: ./production/providers.tf
provider "aws" {
  region = "ap-northeast-1"

  default_tags {
    tags = {
      Environment = "production"
      Service     = "my-service"
    }
  }
}

# 共有モジュール: ./modules/networking/main.tf
# providerブロックは定義しない
resource "aws_vpc" "main" {
  cidr_block = var.vpc_cidr
}

参考リンク

ルール

Declare required providers and version constraints in required_providers (e.g., = 4.0)

(required_providers で必要なプロバイダとバージョン制約を宣言する)

解説

プロバイダやTerraformのバージョンによって無視できない挙動の違いが出ることが稀にあります。 本番環境でそのようなことが起こらないよう、バージョンは「=」だけで完全に固定します。「以上(>=)」や「パッチバージョンの違いは許す"~>"」のようなあいまいな書き方はすべて禁止です。

サンプルコード

# versions.tf
terraform {
  required_version = "= 1.0"

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "= 4.0"
    }
  }
}

参考リンク