Terraform で構築した AWS リソースにタグを一括付与する方法 (default_tags)

AWSTech

terraform-aws-providerdefault_tags が利用可能になりました。
その名の通り、デフォルトで各リソースにタグを付与できる機能です。

AWS のリソースには環境名や請求管理用のタグを付けることが多いと思いますが、これで一括付与できるようになりました。最高ですね。

事前準備

terraform-aws-provider v3.38 以降で利用可能です。
provider が固定されている場合は terraform init -upgrade などで更新しておきましょう。

default_tags でタグをつける

使い方は非常に簡単です。aws provider の定義場所に default_tags を追加するだけ。
既存の resource レベルのタグも併用できます。

provider "aws" {
  region = "ap-northeast-1"

  default_tags {
    tags = {
      Env     = "dev"
      Service = "hoge"
    }
  }
}

resource "aws_s3_bucket" "this" {
  bucket = "yuu26-test"
  acl    = "private"

  tags = {
    Name = "yuu26-test"
  }
}

provider レベルで設定したタグは tags_all で確認することができます。

% terraform plan

Terraform used the selected providers to generate the following execution plan. Resource actions are
indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # aws_s3_bucket.this will be created
  + resource "aws_s3_bucket" "this" {
      + acceleration_status         = (known after apply)
      + acl                         = "private"
      + arn                         = (known after apply)
      + bucket                      = "yuu26-test"
      + bucket_domain_name          = (known after apply)
      + bucket_regional_domain_name = (known after apply)
      + force_destroy               = false
      + hosted_zone_id              = (known after apply)
      + id                          = (known after apply)
      + region                      = (known after apply)
      + request_payer               = (known after apply)
      + tags                        = {
          + "Name" = "yuu26-test"
        }
      + tags_all                    = {
          + "Env"     = "dev"
          + "Name"    = "yuu26-test"
          + "Service" = "hoge"
        }
      + website_domain              = (known after apply)
      + website_endpoint            = (known after apply)

      + versioning {
          + enabled    = (known after apply)
          + mfa_delete = (known after apply)
        }
    }

Plan: 1 to add, 0 to change, 0 to destroy.

付与されたタグを確認

作成したリソースを AWS コンソールから見てみると、通常通りタグとして付与されています。

Terraform で構築した AWS リソースにタグを一括付与する方法 (default_tags)

補足

詳しい説明は公式ドキュメントを参照しましょう。
https://github.com/hashicorp/terraform-provider-aws/blob/main/website/docs/guides/resource-tagging.html.md#propagating-tags-to-all-resources

tags を付けられるリソースには基本的に対応していますが、2021/05/01時点では aws_autoscaling_group のみ非対応です。

まとめ

  • terraform-aws-provider に default_tags が追加された
  • tags をサポートするリソースに一括付与できる
  • 付与したタグは tags_all で確認可能

VPC のサブネットやルーティングテーブルなど、細かなリソースにも一括付与できるので便利。