6月1日(水)に開催した第4回とことんDevOps勉強会のイベントレポートです。
今回は日本仮想化技術の田中から「Terraform CloudでIaC(Infrastructure as Code)について考えてみよう」と題してお話をさせていただきました。Terraform Cloudを題材にIaCのメリットやツールの選択、プラクティスについてデモを交えながら紹介させていただきました。たくさんあるIaCツールの中からTerraformを選択して、どのように活用してるか、CI/CDの中での位置付けなども紹介させていただきました。
また、Q&A、相談コーナーでもたくさんの質問やアドバイスをいただき、非常に有意義なディスカッションができました。
振り返りも兼ねて当日の配信の様子をYoutubeでアーカイブしていますので、是非ご覧ください。当日参加できなかった方も、これを機会にとことんDevOps勉強会に興味を持っていただければと思います。また、当日いただいたQ&Aに関してもこちらのブログでまとめていますので、ご覧ください。
セミナー動画 - Youtube Live アーカイブ
発表資料 - Speaker Deck
Q&A まとめ
Q:手動で Terraform apply しているのですが、それでもよいのでしょうか。
一人でやっている分には問題ないと思います。ただし、複数人で作業している場合は作業がバッティングしてしまったり、Stateファイルの整合性をどう取るのかの問題があります。もし可能であればTerraform Cloudに移行するのも検討してはいかがでしょうか?
また、Terraform Cloudの有料プランでは、プランニングした時点でクラウドでの費用の見積もりを出してくれるので、便利です。
Q : Terraformの基礎から学びたいです。
今度Blogで基礎から学ぶコンテンツを書いてみたいと思います。
自分は最初に学んだ際には、公式のドキュメントを使って学習しました。
また、参加者のみなさんから下記の書籍を基礎から学ぶためのおすすめコンテンツとしてご紹介いただきました。
Q : IaCを使うか、使わないか見極める、判断するポイントはどのあたりにありますか?
1年に一度しか実行しないような作業や、最初に一度しか実行しないような作業、あとは自分が検証のために使うような環境ではIaCを使いません。逆に、実行回数が少なくても、コードとして履歴を残しておく必要がある作業に関してはIaCを使います。
Q : Terraform Cloudでplannedの状態からapplyを行うまでの間に、レビューを挟むことはできますか?
レビューという機能はないのですが、デモでお見せしたような承認処理を挟んで実行することができます。そこで却下をすることができるので、変更点の確認を行うことができます。逆に、承認処理を挟まずに自動実行することもできます。
Q : GitHubのプルリクエストでレビューするのと、plannedの状態で確認を行うことの違いはなんでしょうか?
GitHubのプルリクエストはIaCのコードがどう変わったかのレビューを行うのに対して、Plannedの状態で比較を行うのは、現状のインスタンスの状態と、これから加えようとする変更の差分を確認できます。
Q : Terraformコードのモジュール化のベストプラクティスが知りたいです。
弊社でも、またベストプラクティスと呼べるような段階まで検討ができていません。ただ、モジュール化は必要であるというのは共通認識としてあるので、今後検討をしていきたいと思っています。この辺の考えがまとまったら、Blogにまとめていきたいと思います。
Q : Terraform Cloudの対抗馬を挙げるとしたら何がありますか?
Terraform Cloudはクラウドから実行できるというのがメリットで、その点を考えるとあまり他のツールで同じような製品が見当たらないと思います。逆に、どのような製品がどういう特徴があるのかの比較は今後やっていきたいと思っています。
Q : AWSでPermissionBoundaryなどポリシー・ロール周りがややこしくてCDKで苦労しています。TerraformではAWS固有の記述は簡単にできますか?
CDKを使ったことがないので、ちょっとお答えできませんが、今度試してみたいと思います。
Q : Terraform のtfファイルを実装するにあたりリソース名やディレクトリ構成など最低限守るようにしているルールなどありますか?
かっちりとしたルールは設けていませんが、GKEやSQLなどの変更のタイミングが異なるリソースに関してはディレクトリを分けるようにしています。間違った記述で思いもしないリソースが削除されてしまっては困るので、そういった方針をとっています。
Q : IaCはテンプレート化して使いまわす、という発想には適さないんでしょうか?
Terraformでもモジュール化という仕組みがあり、それを他のディレクトリから読み込んで、必要な部分だけを記述するという手法があります。ただし、あまり汎用化しすぎると、中で何をやっているのかわからなくなるので、汎用化のレベルには注意した方が良いです。
Q : VSCで管理する際、APIキーなどセキュアな文字列の管理はどうされますか? チーム開発では、特に困るポイント化と思います。
Terraformを使うのであれば、同じHashiCorpのVaultなどを使うのが良いかと思います。それほど頻繁に変更がないのであれば、GitHub ActionsのSecretやKubernetesのSecretを使っても良いと思います。
VCSでのAPIキーの管理などはしていません。
Q : Terraform Cloud でworkspaceは利用していますか?
使っています。基本的に、Terraform CloudではWorkspaceを作成しないと、デモでお見せしたような実行画面にはいけません。
Q : Stateファイルは一つのファイルで管理でしょうか ある程度のカテゴリ単位で分割してますか?
先ほどのtfファイルのディレクトリ構成の質問がありましたが、その構成をとっている理由の一つにStateファイルを分けたいという目的があるため、ある程度カテゴリ単位にディレクトリを分けています。
Q : GitLabでも実はStateファイルの保存が可能です。MRで変更差分も見られます。
TerraformではVCSでStateファイルを管理するのが非推奨となっていたと記憶しています。GitLabはその問題を解決しているのであれば、差分比較できるのは魅力的です。
Q : Excelで構成管理してTerraformにかける、みたいなワークフローは作れるのでしょうか?
ExcelからTerraformの設定へのジェネレーターを開発すればできるとは思いますが、Terraformの構文にはクセがあるので、おそらくTerraformの構文を覚えた方が楽なのではないでしょうか?
Q : Terraformの設定ファイルから、Terraformの構文がわからない人が理解できるドキュメントの生成はできますか?
もしかしたら、そういったツールがあるのかもしれません。探してみてあったらBlogに書きたいと思います。
Q : Terraform Cloud の契約プランやコスト感はどんな感じでしょうか。
5ユーザーまでは無償で利用できます。できること、できないことの違いはそれほどありません。それ以上の場合は1ユーザー20ドルになります。