AWSでインフラを構築するとAWSのリソースがたくさんできるので、どのリソースがどの環境・プロジェクトのリソースなのかがひと目ではわからなくなる。
例えばsubnetはどのVPCに紐づくか、どのルートテーブルを紐づけているかなどはIDを丁寧にたどっていけば確認できるが面倒。
AWSでは各リソースに対して自由にタグをつけられるので、一定のルールに従ってタグを付けておけばひと目で確認できるようになる。
例えばタグとして以下の様なタグを付ければ便利。
- Environmentタグ: “production"や”staging”や”dev”などの環境名をつける
- “Project"タグ: プロジェクト名をつける
しかしそれぞれのリソースに1つ1つタグ付けをしていては面倒かつ間違いの元となるので、1度の定義で同一タグを付けたい。
本記事ではTerraformのプロジェクトで作成するすべてのリソースに共通のタグを付けるためのdefault_tags
ブロックについて書く。
default_tagsとは
default_tags
はTerraformの設定で使用できるリソースタグのデフォルト値を設定するための機能。
AWSプロバイダーに設定すると、そのプロバイダーで作成されるすべてのリソースに指定したタグをつけられる。
AWSのリソースのタグを見ればそれがどのTerraformプロジェクトで作成されたのか、どの環境のリソースなのかが判別できるようになる。
≫ Configure Default Tags for AWS Resources | Terraform | HashiCorp Developer
default_tagsの設定方法
default_tags
はTerraformのprovider
ブロック内に指定する。以下の例では、AWSプロバイダーに対してdefault_tags
を設定している。
provider "aws" {
region = "ap-northeast-1"
default_tags {
tags = {
Environment = "production"
Project = "my-project"
}
}
}
上記の例ではAWSプロバイダーに対してEnvironment
タグにproduction
を、Project
タグにmy-project
を指定している。default_tags
を設定すると、このAWSプロバイダーで作成されるすべてのリソースに自動的にこのタグが付与される。
タグの上書き
それぞれのリソースでdefault_tags
を使って指定したタグ名と同じタグ名のタグを作成すればそちらのほうが優先される。
resource "aws_s3_bucket" "storage" {
bucket = "some-bucket-name"
tags = {
Environment = "common"
}
}
上記のコード例ではこのS3バケットのEnvironment
タグにはcommon
という値を設定し、それ以外のタグはプロバイダーに設定されたdefault_tags
のタグが設定される。