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を一つずつ取り出しています。


■まとめ

便利か!!コードは短いほうがメンテしやすいのでぜひ使いこなしましょう!!!ただmapに依存してしまうとメンテしづらいのと、可読性が下がるというデメリットを感じましたね。使う用途によって利用するのがベストだと感じました。

Pocket

カテゴリー: AWSTerraform

adachin

1989年生まれのSRE。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、緊急対応、AWS/Azureでのインフラ構築、Docker開発環境の提供、Kubernetes保守、インフラコード化、新技術の検証、リファクタリング、セキュリティ強化などを担当している。個人事業主では数社サーバー保守とベンチャー企業のSREインフラコンサルティングやMENTAで未経験者にインフラのコーチング/コミュニティの運用を実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。

0件のコメント

コメントを残す

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