Terraformの反復演算

レイ
2023-05-08
2023-05-08

INDI_IMAGE_562

お疲れ様です。おれちゃんでござる!

前回は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も変わる。

こうしたら同じ結果なのにコードはもっと短く、便利で優雅です。

最後に

徐々に本番環境に使えそうなものになりましたね。

コードはともかく次はもっとそのコードの管理に集中したい思います。

また次お楽しみにしてね ^^💦