Terraformなら簡単に全AWSリソースに共通タグを設定できます

2021.05.31

今回は TerraformのAWS Providerの便利機能default tagsをご紹介します。

やりたいこと

一連のリソースに同じタグを付けてタグでリソース管理をしたい時、あると思います。よくあるのが同一アカウント内に複数環境(開発/テスト/本番など)のリソースを作成するとき。また、コスト配分タグという機能を使えば、タグごとにコストをグルーピングすることができ、こちらも非常に便利です。タグの活用パターンについては以下にまとまっていますのでご確認いただければと思います。

ただ、どうやって各リソースに同じタグを設定すれば良いでしょうか。各リソースを作成時に都度都度タグの定義をしていては、抜け漏れとかタイポが発生しそうですよね。

そこでdefault tags

この機能を使えば、各リソースに散らばってしまうタグ付与の設定を一元化することができます。TerraformのAWS Providerの引数の1つで、ここでタグの設定をすると、そのproviderを使ってプロビジョニングする全AWSリソースにそのタグが付与されます。便利!

  • ※ もちろん、タグが付与できるリソースのみに限ります。
  • aws_autoscaling_groupも対象外だそうです。

やってみた

provider "aws" {
  region = "ap-northeast-1"
  default_tags {
    tags = {
      env = "dev"
    }
  }
}

こんな感じで、AWS Providerブロック内にdefault_tags.tagsブロックを作成します。今回はプロビジョニングするリソースとして、VPC関連の一連のリソース(サブネット、NACL、ルートテーブル…)を設定しています。

以下、terraform plan例です。

default_tags_vpc

default_tags_subnet

tagtags_allがありますね。tagにはそのリソースで設定されたタグ、tags_allにはそのリソースで設定されたタグに加えてdefault_tagsで設定されたタグが表示されます。

terraform apply実施後、リソースを確認してみましょう。

default_tag_rtb

default_tag_igw こんな感じで、プロビジョニングしたリソースに軒並みenv = dev タグを設定できました。

リソースのタグとタグ名が被ったら?

provider "aws" {
  region = "ap-northeast-1"
  default_tags {
    tags = {
      env = "dev"
    }
  }
}

resource "aws_eip" "tagtest" {
  vpc = true
  tags = {
    env = "override"
  }
}

上記のようにdefault_tagsとリソースのtagsでタグ名が被ってしまった場合は… default_tags_override リソースの設定が勝ります。まぁでも上書かないで済むような設計にしたほうがわかりやすいかと思います。

参考情報