1.この記事を書こうと思った背景

Terraform の description に複数行書きたいとなったので調べた。また、p.s. に description について分からなかったことも書き留めておく。

2.やりかた

Heredoc Strings | Strings and Templates - Configuration Language | Terraform by HashiCorp を読むと、ヒアドキュメント を使うとよさそうだ。

variable の description に使ってみる。

variable "instance_types" {
  description = <<-EOT
    検証用なのでできるだけお金をかけないようにしている
   大きいサイズはt3.xlarge などがある
    https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#AvailableInstanceTypes
  EOT
  default     = ["t2.small", "t3.small", "t2.medium"]
  #default = ["t3.xlarge", "t3.2xlarge"]
}

3.小ネタ)EOT としているワケ

Terraform のドキュメントのサンプルコードにおいて、EOT としているのは、end of text の意味を込めているからだという。

In the above example, EOT is the identifier selected. Any identifier is allowed, but conventionally this identifier is in all-uppercase and begins with EO, meaning “end of”. EOT in this case stands for “end of text”.

出所:Heredoc Strings | Strings and Templates - Configuration Language | Terraform by HashiCorp

ちなみに、EOF は end of file の略称だとみるのが一般的らしい。

参考:End-of-file - Wikipedia

※ 上記の variabledescription で使っている EOTEOF に変えて apply したところ、No changes. Your infrastructure matches the configuration. と変更差分なしとなった。(heredoc の識別子は任意の文字なので当たり前の結果。)

variable "instance_types" {
  description = <<-EOF
    検証用なのでできるだけお金をかけないようにしている
   大きいサイズはt3.xlarge などがある
    https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#AvailableInstanceTypes
  EOF
  default     = ["t2.small", "t3.small", "t2.medium"]
  #default = ["t3.xlarge", "t3.2xlarge"]
}

p.s. descriptionvariableoutput で書くことができると思いますが、terraform planterraform output で参照することはできないですよね、、。description があることでコードの可読性があがるので description があるだけでも価値はあると思うので、よいのですが。。