今回のとことんDevOps勉強会は「IaCコードリーディング ~Terraformのコードを一緒に読んで行こう~」と題して、Terraformのコードをステップ・バイ・ステップで読み解きながら、理解を深めていくコードリーディングを行いました。
IaCが徐々に普及し、IaCのメリットやツールに関する情報はこの勉強会でも扱ってきましたが、実際にどのようなコードを記述するのか、コードレベルでどのようなことができるのかという点に関してはまとまった形で触れる機会はあまりないかと思います。今回はAWSのEKSを設定し、そこにアプリケーションをデプロイするまでのシナリオをTerraformで実現するコードを紹介しています。IaCの実践に向けて一歩踏み込んだ内容をご理解いただけると思います。
振り返りも兼ねて当日の配信の様子をYoutubeでアーカイブしていますので、是非ご覧ください。当日参加できなかった方も、これを機会にとことんDevOps勉強会に興味を持っていただければと思います。また、当日いただいたQ&Aに関してもこちらのブログでまとめていますので、ぜひご覧ください。
セミナー動画 - YouTube Live アーカイブ
発表資料 - Speaker Deck
Q&Aまとめ
Q: IaCのコードを書き始めるとき、どこから手をつければいいですか?そのまま流用できそうなテンプレ的なものを見つけてくるやり方が良いのでしょうか?過不足ないか不安になったりもします。
A: 公式ドキュメントの各項目にはサンプルコードが掲載されているので、実現したいことが記述されている部分のサンプルコードを参考にして、そこからカスタマイズしていくのが良いのではないでしょうか?
過不足に関しては、実際に構築された環境と比較しながら確認するしかないと思います。慣れてくれば、不足している点も見つけやすくなるかと思います。要件が曖昧な段階から作り始め、徐々に本当に必要な設定を追加していくようにすれば過不足のないコードが書けると思います。
Q: 初期構築した後、設定を変更するようなコードを書くときのコツみたいなものはありますか?
A: コードの差分をみたり、terraform planのコマンドを使って構築させる環境の差分を確認することができます。どうしてもTry & Errorを繰り返さなければならないので、テスト用の環境をして試してみるということが必要になります。あとは、プルリクなどを作って、複数の人で本番環境に適用する前に確認するというのは重要だと思います。
Q: Terraformだけではなく、他のツールと組み合わせて使わなければいけないようなケースはありますか?
A: TerraformはクラウドのAPIを叩いて実行するツールなので、サーバーの中身を設定することが苦手です。そういった場合はAnsibleを使ったりします。ツールの特性に合わせて、うまく組み合わせて使っていけば良いと思います。
Q: 事前に設計書やパラメータシートのようなものを作ったりするのでしょうか?
A: 普段は設計書やパラメーターシートがない段階から作成を始めるので、弊社では使っていません。基本的にはコード上にパラメーターシートと同様の事が書かれるので、コードを読めばわかるようになっています。IaCは設計書やパラメーターシートが極力不要になるようにという思想のツールなので、別に作るケースはほとんどないと思います。
Q: Terrafornのコードからコードがわからない人向けにドキュメントを生成することはできますか?
A: コードからドキュメントの自動生成は可能です。セミナー中に見ていただいたように、variables.tfにdescriptionやtype、validationなどを記述する事ができるので、それを元にマークダウンのドキュメントを生成する事ができます。
参考記事
Q: AWSの場合、Terraformで指定できないことはあるのでしょうか?
A: TerraformはAWS謹製のツールではないので、バージョンが古かったりするとできない事もあったりします。ただ、メンテナンスは頻繁に行われているので、今までTerraformでそれほど困ったことはありません。
AWS謹製のCloud Formationと比べても劣っているということはありません。逆にCloud Formationだとやりたい事ができなくて困った事は時々あります。
Q: 生成系AIを使ってTerraformのコードを生成したりできるのでしょうか?できるなら、どれぐらい使いものになるでしょうか?
A: Q&A中に回答できませんでしたが、下記の情報が見つかりました。
Q: 既存のAWS環境をベースにしてコード化する方法は無いでしょうか?
A: Terraformのimportブロックを使用する事で生成する事ができます。importブロックでどのリソースをとってくるかをしておくと、そのリソースからコードを自動生成してくれます。
参考記事
Q: 先ほどサーバ内の設定はAnsibleを使うと良いとのことでしたが、Cloud Formationと Terraformの得意不得意なところはどんなことがありますか?
A: サーバー内の設定という意味では、Terraformではコマンドを書く事で実現できますが、Cloud Formationでその辺ができるかは不明です。
また、Ansible、Cloud Formation、Terraformの比較という意味ではこちらの記事が参考になります。