LINEで送る
Pocket

Terraformには変数の条件によって使い分けをする場合mapを使用するとめちゃくちゃ便利だということをブログしてなかったのでその話をしましょう👍

他にも関数によるインスタンス台数が増える場合count.indexを使ってインスタンス数を指定するだけや、Nameタグの値にインデックスを含めるにはformat関数など併用して、${}の中では算術演算子が使えるなど、さらにコードを短くすることも可能です。

今回はせっかくなのでそれらを応用して構築してみました😇


■Map/Function

https://www.terraform.io/docs/configuration/variables.html

https://www.terraform.io/docs/configuration/interpolation.html

🤡使わないとわからん!


■かつてのaws_ec2.tf

このようにインスタンス数が増えるとじゃんじゃんコードも増えるわけです😩

これが!!!


■aws_ec2.tf

 ■ aws_variables.tf

 ・Nameタグの数値をインスタンス毎に変更する

(例)adachin-web01,adachin-web02

まず上記に書きましたcount.indexを使うことで、リソースのインデックスを取得することができます。インデックスは0から始まるので今回2台構築となると+1で値を指定しましょう。さらにタグの値にインデックスを含めるにはformat関数を利用して文字列を整形します。

・毎回異なるAZ(サブネット)に配置する

(例)subent_id

ここでmapを使い、サブネットIDを変数化します。aws_variables.tfではa,c,dとサブネットが3つ指定しています。これをlookup関数によりmapの値を取得します。ちなみにmapではなく、element関数とsplit関数を使って取得する方法もあるそうです。(めんどくさい👀)

・インスタンス毎にEIPを設定する

こちらもcount.indexを使ってインスタンスIDを一つずつ取り出しています。


■まとめ

便利か!!
コードは短いほうがメンテしやすいのでぜひ使いこなしましょう!!!

LINEで送る
Pocket

カテゴリー: AWSTerraform

あだちん

1989年生まれ。 ランサーズ/SRE。 ホスティングから大規模なアドテクなどのインフラエンジニアとして携わり、他社インフラレスポンス改善、ランサーズでの副業、ansibleでのインフラコード化を推進し、未経験によるエンジニアのMENTAなども実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/広報/VulsRepo init file,chatwork通知のコントリビュータでもある。現在はDocker開発環境の提供,AWSで新サービスのインフラ構築,PHPバージョンアップ,分析基盤を担当しておりDigdag,embulk,BigQueryを使いこなし中。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください