🐕

Terraform公式リファレンスのArgument Referenceが見づらいので自分なりに「これなら見やすいかも?」と思ったこと

2022/03/12に公開

結論

必須のパラメータをとりあえず入れて、terraform plan してみる。

背景

Terraformでresourceを作るときにいろいろパラメータを入れていきますが、
そもそも何が指定できるんだっけ?となりがち。
そんな時、大体は公式リファレンスとかマネジメントコンソールを参照しますね。

例:VPCを作るときに指定できるパラメータ
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc#argument-reference

しかし、公式リファレンスはなぜか順序がごちゃごちゃしていて見づらい。
2,3個ならまだいいんですけど、
Optionalなものを含め10個以上とかあるようなリソースだとツライ。
せめて何故アルファベット順にしてくれなかったのか???
とプリプリしながらterraform plan を打ったら、

+ resource "aws_vpc" "vpc" {
      + arn                                  = (known after apply)
      + assign_generated_ipv6_cidr_block     = false
      + cidr_block                           = "192.168.0.0/16"
      + default_network_acl_id               = (known after apply)
      + default_route_table_id               = (known after apply)
      + default_security_group_id            = (known after apply)
      + dhcp_options_id                      = (known after apply)
      + enable_classiclink                   = (known after apply)
      + enable_classiclink_dns_support       = (known after apply)
      + enable_dns_hostnames                 = true
      + enable_dns_support                   = true
      + id                                   = (known after apply)
      + instance_tenancy                     = "default"
      + ipv6_association_id                  = (known after apply)
      + ipv6_cidr_block                      = (known after apply)
      + ipv6_cidr_block_network_border_group = (known after apply)
      + main_route_table_id                  = (known after apply)
      + owner_id                             = (known after apply)
      + tags                                 = {
	中略

あ、アルファベット順で整理されて同じような情報が出てくる。と気づきました。
パラメータによってはConflict(どちらかしか選べない、片方を選ぶと片方は表示されない)とか、あるパラメータを指定しないとそもそも表示されてないものあるので、丸呑みは出来ませんが、
公式リファレンス”だけ”みるより、2つを照らし合わせてみたほうが個人的にはスッキリ読めそう。
慣れてきたら公式だけでもいけるのかもしれない。

そのあと「えーと、これはどういう設定なのかな」とかを公式リファレンスで読んでいけばいい感じ。

2022/3/14 追記

ちなみにRequired(必須)なパラメータが記述されてないでplanすると、きちんと、「これ足りてないですけど!」と怒ってくれるので、とりあえずplanしてみるといいかもしれない。

│ Error: Missing required argument
│ 
│   on rds.tf line 58, in resource "aws_db_instance" "db-instance":
│   58: resource "aws_db_instance" "db-instance" {
│ 
│ The argument "instance_class" is required, but no definition was found.

planで言わなかったくせに、apply時に言ってくることもある。先に言えよ。

│ Error: provider.aws: aws_db_instance: : "password": required field is not set
│ 
│   with aws_db_instance.db-instance,
│   on rds.tf line 58, in resource "aws_db_instance" "db-instance":
│   58: resource "aws_db_instance" "db-instance" {
│ 
╵

Discussion