【Terraform】Terraform ~ tag あれこれ ~

■ はじめに

小ネタ。
Terraform の default_tags などでトラブルがあったのでメモ。

目次

【1】tags
【2】default_tags
 1)モジュールへのタグ設定の継承方法
【3】merge関数

【1】tags

* AWS の Tag で利用できる

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/resource-tagging

resource "aws_s3_bucket" "test-bucket" {
  bucket = "my-tf-test-bucket"
  # ★注目★
  tags = {
    Environment = "Dev"
  }
}

【2】default_tags

* 使用できるリソースタグのデフォルト値を設定するための機能
 => Tag管理において、一般的にかなり共通する部分があり、かつ、
  変更があった場合のメンテナンス性においても共通化するために役立つ

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/default_tags

provider "aws" {
  region = "us-west-2"
  // ★注目★
  default_tags {
    alias  = "dev"
    tags = {
      Environment = "dev"
      Project = "demo-project"
      Owner = "your-company"
    }
  }
}

1)モジュールへのタグ設定の継承方法

provider "aws" {
  region = "us-west-2"
  default_tags {
    alias  = "dev"
    tags = {
      Environment = "dev"
      Project = "demo-project"
      Owner = "your-company"
    }
  }
}

module "demo_module" {
  source "./modules/demo_module"
  # ★ここで、タグ設定した継承したいプロバイダーを指定
  providers = {
    aws     = aws
  }
  #}

modules/demo_module.tf

terraform {
  required_providers {
    aws = {
      source = "hashicorp/aws"
      configuration_aliases = [
        aws
      ]
    }
  }
}

【3】merge関数

* defalut_tags のような動きを、merge関数でも実現できる

merge関数
https://developer.hashicorp.com/terraform/language/functions/merge

 => 複数のMapを結合して1つのMapにする

locals {
  tags = {
      Environment = "dev"
      Project = "demo-project"
      Owner = "your-company"
  }
}

resource "aws_vpc" "demo_vpc" {
  cidr_block       = "10.0.0.0/16"
  instance_tenancy = "default"

  tags = merge(local.tags, {
    Name = "demo-vpc"
  })
}

参考文献

https://qiita.com/chacco38/items/6835f0673420d6b6a623

関連記事

Terraform ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/05/000224
Terraform ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/12/09/222057
Terraform ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/05/03/000000
Terraform ~ Terraformあれこれ ~
https://dk521123.hatenablog.com/entry/2023/05/15/205352
Terraform ~ AWS IAM ~
https://dk521123.hatenablog.com/entry/2023/04/12/214311
Terraform ~ AWS S3 ~
https://dk521123.hatenablog.com/entry/2023/04/09/104204
Terraform ~ AWS CloudWatch ~
https://dk521123.hatenablog.com/entry/2023/05/17/123335
Terraform ~ AWS KMS ~
https://dk521123.hatenablog.com/entry/2023/05/26/000000
Terraform ~ AWS Secrets Manager ~
https://dk521123.hatenablog.com/entry/2023/04/11/152801
Terraform ~ AWS MSK ~
https://dk521123.hatenablog.com/entry/2023/05/14/122215
Terraform ~ AWS MSK Connect ~
https://dk521123.hatenablog.com/entry/2023/05/25/000000
Terraform ~ テンプレート ~
https://dk521123.hatenablog.com/entry/2023/05/22/101325
Terraform ~ 機密情報の扱いを考える ~
https://dk521123.hatenablog.com/entry/2023/05/18/005103