HCL2対応『Pragmatic Terraform on AWS』の目次完全版と推しポイント #技術書典
以前「技術書典6で『Pragmatic Terraform on AWS』という本を出します」という記事を公開しましたが、目次が確定し、本文の執筆もほぼ完了したので、改めて目次の完全版と推しポイントを紹介します。
4/8追記
無料サンプルや頒布価格を公開しているので、ぜひこちらもチェックしてください。
『Pragmatic Terraform on AWS』とは
『Pragmatic Terraform on AWS』では、Terraformを使ってAWS上にシステムを構築するノウハウを紹介します。ECS Fargateなどのマネージドサービスを中心にアーキテクチャ設計を行い、Terraformで実装します。
推しポイント
- Terraform 0.12で登場する「HCL2」に早くも対応
- HCL2対応の書籍はたぶん世界初?
- 正式版が出ていないため「0.12.0-beta1」で動作確認
- HCL1で書いていたサンプルコードをすべてHCL2に書き換えました1
- 100以上の豊富なサンプルコード
- 多様なサービスを網羅
- ECS Fargate、CodePipeline、Session Manager、Kinesis Data Firehose、ALB、RDSなどなど
- これらのサービスをすべてTerraformで実装
- Terraformの設計に関する知見を凝縮
委託先情報
本書は委託本となります。なんと2つのサークルさんが引き受けてくださいました。本当にありがたいです。
- yagitch.comさん「か11」
- 楽描帳さん「え35」
yagitch.comさんでは、エンジニア向けにアウトプットを継続していくためのテクニックまとめ本『継続的にアウトプットする技術』と、モデリングの学習方法と社内勉強会の進め方ノウハウ本『もくもくモデリングの森を旅するチビドラゴンの軌跡』が頒布されます。バラエティ豊かなラインナップで、濃いブースになりそうです。
楽描帳さんでは、GitHub・CircleCI・Docker・AWSを利用してCIからコンテナのデプロイまで実現する本『コンテナ時代の個人Webサービスの作り方(仮題)』が頒布されます。インフラ構築にはTerraformを使うということなので、「Pragmatic Terraform on AWS」との親和性もバッチリです。
技術書典にお越しの際は、「か11」と「え35」にぜひお立ち寄りいただき、ついでに『Pragmatic Terraform on AWS』も手にとっていただければ嬉しいです。
目次
本書は3部構成です。1〜3章までが「入門編」で、Terraformのインストールからはじめて、文法などを一気に学びます。4〜16章までが「実践編」で、各種リソースのTerraformのコードと設計のポイントを紹介します。17〜22章が「設計編」で、メンテナンス性の高いTerraformの設計について議論します。
1章 はじめに 1.1 対象読者 1.2 対象環境 1.3 本書の構成 2章 インストール 2.1 Homebrew 2.2 tfenv 2.3 クレデンシャル 3章 Terraformの基本 3.1 リソースの作成 3.1.1 HCL(HashiCorp Configuration Language) 3.1.2 terraform init 3.1.3 terraform plan 3.1.4 terraform apply 3.2 リソースの更新 3.2.1 リソースの設定変更 3.2.2 リソースの再作成 3.3 Terraformの構成要素 3.3.1 変数 3.3.2 ローカル変数 3.3.3 出力値 3.3.4 データソース 3.3.5 プロバイダ 3.4 Interpolation Syntax 3.4.1 参照 3.4.2 条件分岐 3.4.3 組み込み関数 3.4.4 テンプレート 3.5 tfstateファイル 3.6 リソースの削除 3.7 モジュール 3.7.1 モジュールの定義 3.7.2 モジュールの利用 4章 全体設計 4.1 システム要件 4.2 システムアーキテクチャ 4.3 テクノロジースタック 5章 権限管理 5.1 ポリシー 5.1.1 ポリシードキュメント 5.1.2 IAMポリシー 5.2 ロール 5.2.1 信頼ポリシー 5.2.2 IAMロール 5.2.3 IAMポリシーのアタッチ 5.3 IAMロールのモジュール化 6章 ストレージ 6.1 プライベートバケット 6.1.1 S3バケット 6.1.2 ブロックパブリックアクセス 6.2 パブリックバケット 6.3 ログバケット 6.3.1 ログローテーションバケット 6.3.2 バケットポリシー 7章 ネットワーク 7.1 パブリックネットワーク 7.1.1 VPC(Virtual Private Cloud) 7.1.2 パブリックサブネット 7.1.3 インターネットゲートウェイ 7.1.4 ルートテーブル 7.2 プライベートネットワーク 7.2.1 プライベートサブネット 7.2.2 NATゲートウェイ 7.2.3 依存関係の明示 7.3 マルチAZ 7.3.1 パブリックネットワークのマルチAZ化 7.3.2 プライベートネットワークのマルチAZ化 7.4 ファイアウォール 7.4.1 セキュリティグループ 7.4.2 セキュリティグループのモジュール化 8章 ロードバランサとDNS 8.1 ALBのコンポーネント 8.2 HTTP用ロードバランサ 8.2.1 アプリケーションロードバランサ 8.2.2 リスナー 8.3 Route 53 8.3.1 ドメインの登録 8.3.2 ホストゾーン 8.3.3 DNSレコード 8.4 ACM(AWS Certificate Manager) 8.4.1 SSL証明書の作成 8.4.2 SSL証明書の検証 8.5 HTTPS用ロードバランサ 8.5.1 HTTPSリスナー 8.5.2 HTTPのリダイレクト 8.6 リクエストフォワーディング 8.6.1 ターゲットグループ 8.6.2 リスナールール 9章 コンテナオーケストレーション 9.1 ECSのコンポーネント 9.2 Webサーバの構築 9.2.1 ECSクラスタ 9.2.2 タスク定義 9.2.3 ECSサービス 9.3 Fargateにおけるロギング 9.3.1 CloudWatch Logs 9.3.2 ECSタスク実行IAMロール 9.3.3 Dockerコンテナのロギング 10章 バッチ 10.1 バッチ設計 10.1.1 バッチ設計の基本原則 10.1.2 ジョブ管理 10.2 ECS Scheduled Tasks 10.2.1 バッチ用タスク定義 10.2.2 CloudWatchイベントIAMロール 10.2.3 CloudWatchイベントルール 10.2.4 CloudWatchイベントターゲット 11章 鍵管理 11.1 KMS(Key Management Service) 11.1.1 カスタマーマスターキー 11.1.2 エイリアス 12章 設定管理 12.1 コンテナの設定管理 12.2 SSMパラメータストア 12.2.1 AWS CLIによる操作 12.2.2 Terraformによるコード化 12.2.3 SSMパラメータストアとECSの統合 13章 データストア 13.1 RDS(Relational Database Service) 13.1.1 DBパラメータグループ 13.1.2 DBオプショングループ 13.1.3 DBサブネットグループ 13.1.4 DBインスタンス 13.1.5 マスターパスワードの変更 13.2 ElastiCache 13.2.1 ElastiCacheパラメータグループ 13.2.2 ElastiCacheサブネットグループ 13.2.3 ElastiCacheレプリケーショングループ 14章 デプロイメントパイプライン 14.1 デプロイメントパイプラインの設計 14.2 コンテナレジストリ 14.2.1 ECRリポジトリ 14.2.2 ECRライフサイクルポリシー 14.2.3 Dockerイメージのプッシュ 14.3 継続的インテグレーション 14.3.1 CodeBuildサービスロール 14.3.2 CodeBuildプロジェクト 14.3.3 ビルド仕様 14.4 継続的デリバリー 14.4.1 CodePipelineサービスロール 14.4.2 アーティファクトストア 14.4.3 GitHubトークン 14.4.4 CodePipeline 14.4.5 CodePipeline Webhook 14.4.6 GitHubプロバイダ 14.4.7 GitHub Webhook 15章 SSHレスオペレーション 15.1 オペレーションサーバの設計 15.2 Session Manager 15.2.1 インスタンスプロファイル 15.2.2 EC2インスタンス 15.2.3 オペレーションログ 15.3 ローカル環境 15.3.1 Session Manager Plugin 15.3.2 シェルアクセス 16章 ロギング 16.1 ロギングの種類 16.1.1 S3へのロギング 16.1.2 CloudWatch Logsへのロギング 16.2 ログ検索 16.2.1 Athena 16.2.2 CloudWatch Logs Insights 16.3 ログ永続化 16.3.1 ログ永続化S3バケット 16.3.2 Kinesis Data Firehose IAMロール 16.3.3 Kinesis Data Firehose配信ストリーム 16.3.4 CloudWatch Logs IAMロール 16.3.5 CloudWatch Logsサブスクリプションフィルタ 17章 構造化 17.1 モノリス 17.2 モジュールの分離 17.2.1 別ディレクトリへの分離 17.2.2 別リポジトリへの分離 17.3 独立した環境 17.3.1 ディレクトリ分割 17.3.2 Workspaces 17.4 コンポーネント分割 17.4.1 安定度 17.4.2 ステートフル 17.4.3 影響範囲 17.4.4 組織のライフサイクル 17.4.5 関心事の分離 17.5 依存関係の制御 18章 Terraformベストプラクティス 18.1 リモートのバックエンドを利用する 18.2 Terraformバージョンを固定する 18.3 プロバイダバージョンを固定する 18.4 リモートステートを使いこなす 18.5 データソースを使いこなす 18.6 削除操作を抑止する 18.7 コードフォーマットをかける 18.8 バリデーションをかける 19章 AWSベストプラクティス 19.1 ネットワーク系デフォルトリソースの使用を避ける 19.2 データストア系デフォルトリソースの使用を避ける 19.3 APIの削除保護機能を活用する 19.4 暗黙的な依存関係を把握する 19.5 暗黙的に作られるリソースに注意する 20章 モジュール設計 20.1 モジュールの設計原則 20.1.1 Small is beautiful 20.1.2 疎結合 20.1.3 高凝集 20.1.4 認知的負荷 20.2 優れたモジュールの構成要素 20.2.1 Standard Module Structure 20.2.2 ドキュメンテーション 20.2.3 バージョニング 20.3 公開モジュール 20.3.1 GitHub 20.3.2 Terraform Module Registry 20.3.3 バージョンアップ 20.3.4 公開モジュールの利用 21章 落ち穂拾い 21.1 高速化 21.2 デバッグログ 21.3 構成ドリフト 21.4 公式ドキュメントを読むコツ 21.5 Terraform管理外のリソース 21.6 Terraformのアップグレード 22章 巨人の肩の上に乗る あとがき
電子書籍は?
多少はニーズがあるようなので、対応しようかと考えています。ただ、まだ紙版の入稿も終わっておらず、そっちが一段落してから手を付けるので、今のところ進捗はゼロです。なんとか出せるよう、がんばります。
おわりに
必ずあなたを満足させます!とまでは言えませんが、フツーの書店やAmazonでは手に入らない書籍にはなっているので、ぜひ遊びにきてください。いろんな人にレビューしてもらったので、そこそこのクオリティにはなってると思います。よろしくおねがいします!
参考:技術書典について
- 日時:2019/04/14 (日) 11:00〜17:00
- 場所:池袋サンシャインシティ2F 展示ホールD(文化会館ビル2F)
- 注意事項:一般参加は11時〜13時の2時間のみ有料です
-
控えめに言って、メチャクチャ大変でした。コードの変換部分ではなく、本文の修正がw↩