kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Terraform の基本的な仕組みから実践まで深く学べる一冊「詳解 Terraform 第3版」を読んだ

2023年11月21日(明日📅)に出版される新著「詳解 Terraform 第3版」を読んだ📕

本書では Terraform の基本的な仕組みを学べるだけではなく,Terraform を実践的に使うときに必要になるステート管理・モジュール・シークレット管理・テストなど幅広いトピックまでまとまった一冊になっていて素晴らしかった❗️また Terraform の日本語書籍は今まであまりなく,この内容を日本語で読めることも素晴らしいと思う.

本書は翻訳を担当された松浦隼人さん,そしてオライリー・ジャパン様に送っていただきました.出版情報を知ったときから絶対に買おうと思っていたほど気になってました.ありがとうございます❗️

そして出版おめでとうございます〜 \( 'ω')/

📚 目次

  • 1章: なぜ Terraform を使うのか
  • 2章: Terraform をはじめよう
  • 3章: Terraform ステートを管理する
  • 4章: モジュールで再利用可能なインフラを作る
  • 5章: Terraform を使うためのヒントとコツ:ループ、条件分岐、デプロイ、 その他つまずきポイント
  • 6章: シークレットを管理する
  • 7章: 複数のプロバイダを使う
  • 8章: 本番レベルの Terraform コード
  • 9章: Terraform のコードをテストする
  • 10章: チームで Terraform を使う

www.oreilly.co.jp

📚 読者層

個人的に本書を読んで感じた読者層としては「Terraform に入門したいとは思ってるけどまだ未着手の初学者」から「仕事で多少は Terraform を使ってるけどバリバリ使いこなせてる自信はない中級者」あたりに特にハマる内容になっていると思う.初学者であれば,本書を全章読みつつ,GitHub に公開されてるサンプルも活用しながら繰り返し試してみるのが良いかと👌中級者であれば,例えば「6章(シークレット管理)」「9章(テスト)」など,気になる章をピックアップして読んでみるのが良いかと👌逆に Terraform を深く理解している上級者なら本書から新しく学べることはあまり多くないように思う.

github.com

さらに本書は HashiCorp 公式の認定試験「HashiCorp Certified: Terraform Associate (003)」の教科書としても使えると感じた🟣 僕は2023年7月に受験したけど,多くの出題範囲がカバーされていると思う.例えば,ステート管理・シークレット管理・プロビジョナーなど(他にももっとあるけど).認定資格の紹介と勉強方法は以下の記事にまとめてあるけど,今後は本書「詳解 Terraform 第3版」も学習リソースに追加できる👏

kakakakakku.hatenablog.com

📚 特に良かった章をピックアップ

1章: なぜ Terraform を使うのか

「1章」は DevOps や Infrastructure as Code (IaC) など,本書の軸と言える価値観を解説する導入章だけど,特に IaC ツールを選択するときに「考慮するべきトレードオフ」という観点は良かった❗️IaC ツール以外を選択するときに使える観点もある.これらの観点を踏まえて我々はどの IaC ツールを選べば良いのだろうか💡

  • 設定管理ツールか・プロビジョニングツールか
  • ミュータブルなインフラか・イミュータブルなインフラか
  • 手続き型言語か・宣言型言語か
  • 汎用言語か・ドメイン特化言語か
  • マスタか・マスタレスか
  • エージェントか・エージェントレスか
  • 有償か・無償か
  • 大きなコミュニティか・小さなコミュニティか
  • 成熟か・最先端か

本書に載っていない関連する観点としては「ライセンス」もあるかもしれない💨

www.hashicorp.com

5章: Terraform を使うためのヒントとコツ

「5章」には Terraform に入門してすぐには不要だと思うけど,ある程度実践的に活用していくと必要になってくることもある count / for_each / for などの構文解説と使いどころの紹介が出てくる.もちろん AWS Cloud Development Kit (CDK) のように柔軟には書けなくても宣言型言語でこういう実装ができるということを知っておくのは重要だと思う.また count「繰り返し」の用途だけじゃなく「条件分岐 (if)」の用途で使う Tips もちゃんと紹介されていた💡

あとは Terraform コードをリファクタリングするときに選択肢として知っておくと便利な moved ブロックの紹介も載っていた❗️

developer.hashicorp.com

9章: Terraform のコードをテストする

「9章」では Terraform(とインフラ全体)のテストを実装することの難しさを前提にしつつ,静的解析・プランテスト・ユニットテストなど多くのテスト手法が紹介されていて良かった💡内容的には Terratest を使ったテスト実装が多かったけど(著者が Gruntwork に所属してるという背景もあるとは思う),Go の testing フレームワークに沿ってて,InitAndPlanInitAndApply など表現力も高く便利そうだった.実は僕は Terratest は使ったことがなくさっそく検討してみようと思う❗️また時期的に本書には掲載されていないけど Terraform 1.6 で導入された terraform test も登場して今後は選択肢にも変化がありそう.

www.hashicorp.com

また terraform plan コマンドの結果を活用したプランテストの選択肢も Terratest 以外に Open Policy Agent (OPA)HashiCorp Sentinel などの比較表が載っていた.最近紹介記事を書いた tf-policy-validator コマンドもプラン結果と AWS IAM Access Analyzer を組み合わせた仕組みになっていて,プランテストと言えそう.

kakakakakku.hatenablog.com

静的解析ツールとしては terraform validate コマンド・tfsec・tflint・Terrascan などの比較表が載っていた.個人的にも GitHub Actions で terraform validate コマンド・Trivy・tflint を実行する仕組みを業務利用していて,Terraform コードの品質を底上げするファーストステップとして静的解析の導入はおすすめ❗️ちなみに tfsec は Trivy に移行する可能性があるとアナウンスされているため,今後は Trivy を検討すると良いと思う.詳しくはブログにまとめてある \( 'ω')/

kakakakakku.hatenablog.com

他にはサーバーテスト(ようするに Linux などサーバー自体の設定をテストすること)の選択肢として Goss が出てきた.Goss は前に紹介したけど導入も簡単だし機能も充実してて Amazon EC2 内部のテストをするならおすすめ❗️

kakakakakku.hatenablog.com

10章: チームで Terraform を使う

「10章」の内容は開発組織に IaC 文化が浸透していれば普通のことに思えるかもしれないけど,今後 IaC を推進するなら Terraform を使うかどうかに関わらず読んでおくと良いという内容が凝縮されていた👌 特に Terraform コードを GitHub などでバージョン管理をして,プルリクエストを使ってレビューをして,最終的にリリースをするなど,完璧に同じではないけど,アプリケーション側で実現しているライフサイクルのベストプラクティスをインフラ側にも適用しようという意図にも読み取れる内容になっていた❗️

📚 Terraform Cloud の解説もあればもっと良かった

本書の「はじめに」に書かれているけど,本書では Terraform Cloud の解説はなく,部分的に選択肢の一つとして紹介される程度だった.HashiCorp 公式の書籍ではないし,一部の有償機能に依存したくないという気持ちは理解できるけど,例えばステート管理(3章)・シークレット管理(6章)・プルリクエスト駆動プラン実行(10章)などは Terraform Cloud を採用することで楽になる部分はあると思う.他にも Sentinel / OPA ポリシー連携・Run Task 機能・Ephemeral Workspaces 機能なども便利で,あくまで個人的には Terraform Cloud の解説があればもっと良かったな〜とは思った💡

developer.hashicorp.com

developer.hashicorp.com

www.hashicorp.com

📚 誤植

読みながら気付いたところをまとめておく📝

  • P.20: 汎用言語かドメイン特化言語か汎用言語か、ドメイン特化言語か(きっとここに句点が必要そう?)
  • P.20: 有償か無償か有償か、無償か(きっとここに句点が必要そう?)
  • P.56: 何が Terraform が何をTerraform が何を
  • P.68: Amazon の Elastic Load Balancing (ELB)AWS の Elastic Load Balancing (ELB) もしくは Elastic Load Balancing (ELB)(誤植ではないけど少し気になった)
  • P.104: Amazon の Relational Database Service (RDS)AWS の Relational Database Service (RDS) もしくは Amazon Relational Database Service (Amazon RDS)(誤植ではないけど少し気になった)
  • P.205: GitHub ActionGitHub Actions
  • P.263: 支持指示
  • P.338: hell-world-apphello-world-app

📚 まとめ

2023年11月21日に出版される新著「詳解 Terraform 第3版」を読んだ📕

Terraform の基本的な仕組みから実践まで幅広いトピックがまとまっている素晴らしい一冊で,この内容を日本語で読めるということにも価値があると思う.そろそろ Terraform に入門したいという初学者はもちろん,多少 Terraform を使ってる中級者にももちろんおすすめできる❗️Terraform を実装しながら手元に置いておきたい一冊だぁ〜 \( 'ω')/