Infrastructure as Codeに関する技術書籍を執筆しました

Overview

タイトルの通りですが、技術書博5向けにInfrastructure as Code (IaC)に関する技術書を執筆しました。

gishohaku.dev

一応、僕がそれなりにAWS x IaCにどっぷり浸かっていることもあり、題材のクラウドAWSを主軸にしています。 TerraformやPulumiに関しては、別にAWSに限らずAzureやGoogleCloud利用者の方々にも通ずる部分があると思います。

執筆に至ったモチベーション

僕自身、IaCサービスに関してはCloudFormation 数ヵ月、terraform 2年、Pulumi 8ヶ月ほど経験しており、 それぞれの特徴も知れてきたのでナレッジを形にしたいなと思い、同僚と執筆しました。 ※ちなみに、共著の同僚である@HorseVictoryAWS Top Engineersの一人です。

クラウドネイティブな構成が浸透するにつれて、クラウドサービスを上手に組み合わせることで自分たちのサービスを加速させるスタイルが主流となりつつあります。 そして同時にクラウドを適切に使いこなす力が求められています。 ソフトウェア開発のようにクラウドを使いこなすことは、ソフトウェア開発のプラクティスやエンジニア間のシナジーを高められる観点から、IaCはクラウドネイティブに取り組む上で重要なトピックの1つかなと筆者も考えてます。

そんなわけで(?)、副題もクラウドネイティブIaCストーリーとしています。

どんな本なのか?

これからIaCの利用を考えている方や、現在利用しているIaCと対比して新しいIaCを知りたい方向けに、 各IaCの特徴と選ぶ際の考え方をまとめてみました。 代表的な以下のサービスを取り上げています。

  • CloudFormation
  • AWS CDK
  • Terraform
  • Pulumi

特に、Pulumiは初耳の方も多いのではないでしょうか。 各IaCサービスの違いを理解し自分たちにあったIaCサービスを選択してもらうのが目的です。 そのため、各IaCの深い仕様までは触れていません(それを書いてしまうと、多分IaCサービスだけで1冊本が出来上がってしまいます・・・)。 TerraformにDive Deepしたい方は野村さんの以下の本がおすすめです。

実践Terraform AWSにおけるシステム設計とベストプラクティス (技術の泉シリーズ(NextPublishing)) | 野村 友規 |本 | 通販 | Amazon

対象の読者は?

基本的にIaCに携わっている人全てに読んでもらえると嬉しいなぁ〜と思いつつ、対象読者の方々は以下の通りです。

* IaC自体に興味をお持ちの方
* 新しいIaCについて知りたい方
* これからIaCに取り組まれようとしている方
* AWSでインフラストラクチャを管理している方
* 既存のIaCで悩みを持っている方

どちらかというと、玄人よりはビギナー向けですが、IaCで運用していて辛いな〜と感じる部分で共感してもらえたりする内容にもなっているはずです。

目次

目次は次のとおりです。僕自身は4〜6章を主に担当しました。 まあまあ盛りだくさんなトピックです。


まえがき

第1章はじめに
 1.1 Infrastructure as Codeとは
 1.2 なぜInfrastructure as Codeが必要か
  1.2.1 構築における再利⽤性と冪等性
  1.2.2 コード〜ドキュメントにおけるパラメータ値の乖離
  1.2.3 改定証跡の担保
  1.2.4 アプリケーション開発者とのコラボレーション
 1.3 本書の位置づけと構成
 1.4 各章のサンプルコードで取り上げるAWS構成
 1.5 本書で扱うバージョン情報

第2章 CloudFormation
 2.1 概要
 2.2 基本編
  2.2.1 CloudFormation のアーキテクチャ
  2.2.2 テンプレート
  2.2.3 スタック
  2.2.4 変更セット(Change set)
  2.2.5 CloudFormation の基本動作と基本⽂法
 2.3 応⽤編
  2.3.1 クロススタック参照
  2.3.2 ドリフト検出
  2.3.3 CloudFormation Resource Import
  2.3.4 カスタムリソース
  2.3.5 その他
  2.3.6 注意すべき点
 2.4 筆者のオススメポイント
  2.4.1 特殊なツールいらず
  2.4.2 定期的なドリフト検出による整合性の担保
  2.4.3 cfn-lint による記述内容のチェック
 2.5 まとめ

第3章 AWS Cloud Development Kit
 3.1 概要概
 3.2 基本編
  3.2.1 CDK Toolkit
  3.2.2 Core Framework
  3.2.3 Construct Library
  3.2.4 AWS CDK の基本動作と基本⽂法
 3.3 応⽤編
  3.3.1 クロススタック参照
  3.3.2 環境に応じた設定値の注⼊
  3.3.3 困ったときはL1 に変換する
  3.3.4 注意すべき点/制約事項
 3.4 筆者のオススメポイント
  3.4.1 AWS CDK Roadmap が公開されている
  3.4.2 制御構⽂やエラーハンドリング、テストコード
 3.4.3 diff が簡単に確認できる
 3.4.4 少し⾵変わりなAspects という機能
 3.5 まとめ

第4章 Terraform
 4.1 概要
 4.2 基本編
  4.2.1 Terraform のアーキテクチャ
  4.2.2 リソース作成までの流れ〜Write, Plan, Apply
  4.2.3 モジュールによるリソース定義の集約
  4.2.4 モジュール利⽤に必要な標準構成
  4.2.5 Terraform Registry の活⽤
 4.3 応⽤編
  4.3.1 tfstate のバックエンド管理と排他制御
  4.3.2 リポジトリ統合によるCI/CD
  4.3.3 注意すべき点/制約事項
  4.3.4 さらなるプラクティスに向けて
 4.4 筆者のオススメポイント
  4.4.1 ナレッジが⾮常に豊富
  4.4.2 多様なクラウド・PaaS・SaaS のプロバイダに対応
  4.4.3 Terraform Cloud やその他OSS ツールの充実
 4.5 まとめ

第5章 Pulumi
 5.1 概要
 5.2 基本編
  5.2.1 Pulumi のアーキテクチャ
  5.2.2 リソース作成までの流れ
 5.3 応⽤編
  5.3.1 ステートの管理
  5.3.2 Github Actions によるCI/CD 統合
  5.3.3 注意すべき点/制約事項
  5.3.4 プラクティス
 5.4 筆者のオススメポイント
  5.4.1 IaC の中で最も⾃由度の⾼いサービス
  5.4.2 クラウドが提供するAPI を100% サポート
 5.5 まとめ

第6章 IaCサービスの選びかた
 6.1 どの IaCサービスもそれぞれの良さがある
  6.1.1 優れた開発者体験の重要性
  6.1.2 ビジネス要件への配慮
 6.2 開発者体験を重視した評価軸からの考察
  6.2.1 言語の選択性
  6.2.2 ドキュメントや情報の充実さ
  6.2.3 シンプルで高速な開発
  6.2.4 コミュニティの充実性
 6.3 ビジネス要件観点からの考察
  6.3.1 コンプライアンス要件
  6.3.2 コスト
  6.3.3 開発体制とサポート
  6.3.4 セキュリティ
  6.3.5 効率性
 6.4 各IaC利⽤のユースケース
  6.4.1 CloudFormation を選択するユースケース
  6.4.2 AWS CDK を選択するユースケース
  6.4.3 Terraform を選択するユースケース
  6.4.4 Pulumi を選択するユースケース
 6.5 よりよいIaCライフを送るために
  6.5.1 まずはIaC を試してみる
  6.5.2 事前に⼿作業でクラウドを構築してみる
  6.5.3 Dry Run が成功してもうまくいくとは限らない
  6.5.4 全リソースのIaC 化は本当に必要か
 6.6 まとめ

付録A IaCのサンプルコード
おわりに


もう少し本書の内容に踏み込んで・・・

僕が担当した章の話になってしまいますが、4章ではTerraformのアーキテクチャの話から始まり、簡単なIaCコードの書き方からプロビジョニングの流れをを紹介しています。 モジュールを活用した効率的なリソース開発の流れや複数環境利用時のフォルダ構成など、Teraformを一度浸かったことがある方であれば、少し悩みそうな実践ポイントまで踏み込んでいます。

f:id:iselegant:20210619225857p:plain

ちなみに、この4章は僕の元上司であり、Terraformコントリビューターである@minamijoyoさんにTerraformの章レビューをお願いしました。minamijoyoさんはQiitaでTerraform職人への道に関する記事を投稿しており、Terraform界隈では割と有名なお方です。

qiita.com

qiita.com

容赦のないレビューコメント(?)で本書のクォリティを格段に高めていただきました。 忙しいなか快諾していただいた上、何度も内容をチェックいただきありがとうございました。 この場を借りてお礼申し上げますmm

5章はPulumiについて取り上げています。 聞いたことが無い方も多いかも知れませんが、GolangやTypescript、Pythonなどモダンな言語でリソースを定義できる比較的新しいIaCサービスです。 AWS以外にもGoogle Cloud, Azure, GitHubやNewRelicなどその他SaaSにも対応しているツールの特徴について触れていきます。 Terraformと似たような体験で記述できることに加え、既存の言語を利用できるため、ソフトウェア開発の体験がそのまま応用できる点が旨みだったりします。

f:id:iselegant:20210619230219p:plain

Terraformと同じく基本的なアーキテクチャや利用フローだけでなく、CI/CDとの統合やプラクティスについても多数載せています。 ぜひ本書とともに、Pulumiの世界にも触れてみると新しいクラウド開発体験にきっと気付けるはず。

6章では、本書で取り上げたツールの特徴を様々な軸で比較しています。 この書籍の目的は自分たちのユースケースにあったIaCはどれだろう、といったところをしっかりと言語化したり、チーム内や組織内で納得できるようにお手伝いすることです。 開発者体験とビジネス要件という大きな軸から、様々な角度で比較してみました。

以上がざっとした内容です。 120ページ程度の本ですが、業務で得た経験やプラクティスをギュッと詰め込みました。

サンプルコード

本書には4つのIaCサービスのサンプルコードリンクを付録でつけてます。 ちなみにサンプルコードで作成されるAWSリソースはこちら↓

f:id:iselegant:20210619225336p:plain

シンプルな構成ですが、一応ECS/Fargateのモダンな構成上に、Go言語APIをデプロイするためのリソースを一式作ってくれるものを用意しました。 サンプルコードは全てCloud9で動かせるので、AWS上で完結します。 READMEにそれぞれの実行方法とかも載せています。 本書で特徴を掴みながら、ハンズオン感覚でぜひ体験していただければと思っています。

最後に

執筆期間は2週間ちょいで短期集中で書き上げましたが、個人的にはかなりよい形に仕上げることができたかな、と感じています。

技術書典#11にも出店予定ですが、PDFでよければすでに本日からBOOTHにて販売しております。 もし気になる方はぜひお手にとっていただけると嬉しいです。

booth.pm

ではまた!