Terraform リソースの命名規則を考える

異論は認めるし、手探りなので特にこれと言った答えはない。

Terraformではリソースに名前をつける(terraform_res_nameの部分)。

resource "aws_s3_bucket" "terraform_res_name" {
  bucket = "enq-${var.env}-${var.service}-private"
  acl    = "private"

  tags {
    Name        = "${var.env_tag}-${var.service_tag}-Private"
    Environment = "${var.env_tag}"
    ServiceName = "${var.service_tag}"
  }
}

これは、Terraformのコード内で値を参照したいときに利用される。 基本はスネークケースなので、参照するときもスネークケースになるように_でつなぐ。どんなリソースかは、リソース名に書いてあるので、冗長にならないように付けない。たとえば、サムネイル画像サーバ用のS3バケットだった場合thumbnail_imageとつける(Nameとかはケバブケースでつける)。

resource "aws_s3_bucket" "thumbnail_image" {
  bucket = "foo-${var.env}-${var.service}-private"
  acl    = "private"

  tags {
    Name        = "${var.env_tag}-${var.service_tag}-Private"
    Environment = "${var.env_tag}"
    ServiceName = "${var.service_tag}"
  }
}

バケットを参照するときは、${aws_s3_bucket.thumbnail_image.bucket}となる。 環境は、変数から注入してタグなどに埋め込むので気にしなくて良いとおもう。リソース名に変数は使えない issue-#571。とは言えこういう話もある issue-#1976