お疲れ様です。おれちゃんでござる!
前回はTerraformを変数とアウトプットで使うのを見てて、少しずつ本番環境でも使えそうな可能性を実感したやろ。今回はTerraformでのコードを分かりやすく綺麗にするコツを教えたいと思います。
今回は具体的な例をあげたくて、AWSのVPC作成の際にサブネット作成をTerraformにしたいと思います。
データシリアライズ言語
TerraformはYAMLというデータシリアライズ言語に基づいて言語で操ることができます。データシリアライズ(直列化)言語というのは複雑なデータやオブジェクトを、配列や連結リスト、ツリーマップなどのネットワーク(グラフ)構造となります。つまり望む構築を細かくコードで写すということです。
ですけど写すだけで複雑なコードパターンが普通にできません。そこでTerraformのHCL言語の特殊なところが使えます。
AWSサブネットの作成
VPCを作る時、沿ってるサブネットも使わなければなりません。普通のYAML風だったら以下になります。
少し長いですよね... 重複もあるしね。もちろん以上もコードは全然正しいですけど変更に際してはなかなか難しい、何箇所が変更しないといけないからです。
そこでcountというパラメーターでresourceを反復できます。結果は以下になります。
どう?もっと綺麗で簡潔でしょう!一緒に分析しましょう
分析
まず一番上のdataを見てみしょう。このdataは使ってるリージョンのAZを含んでいます。
例えばap-southeastだったらこうなります。リージョン変わってもコードは変わらないのでとても便利です。
次はcountのところ分析しましょう。countは何回反復するのを示すパラメーターです。
lengthはリストの長さを図る関数です。AZごとにサブネット作りたいからAZの数がサブネットの数を定めます。今回の場合では「3」になります。サブネット3つ作られるということになります。
でも同じ値でサブネット3つ使ったらエラー出てますからaws_subnetのresourceの変数の値も変数化されてます。
count.indexで反復のなかに何回目なのかを分かってます。この技でcidr_blockは毎回変わるということです。indexは0から始まるから
第一回目 : cidr_block = 172.16.1.0/24
第二回目 : cidr_block = 172.16.2.0/24
第三回目 : cidr_block = 172.16.3.0/24
availability_zoneはcount.indexの値を使ってavailability_zonesのdataのインデックスでAZを抽出できます。count.indexは毎回変わるから選ぶAZも変わる。
こうしたら同じ結果なのにコードはもっと短く、便利で優雅です。
最後に
徐々に本番環境に使えそうなものになりましたね。
コードはともかく次はもっとそのコードの管理に集中したい思います。
また次お楽しみにしてね ^^💦