本書は、プログラムコードを用いてインフラストラクチャを管理するインフラストラクチャ・アズ・コード(IaC)を実践したい読者に向けた書籍です。IaCを実践する上で最低限知っておきたいTerraformの知識、またAmazon Web Services(AWS)上で実際にVPCを作成し、ネットワークやコンテナを構築し、CI/CDを用いてデプロイするまでの方法を解説しています。
さらに、記述したコードの改善や、LocalStackを用いたテスト環境、Terraformのドキュメンテーション機能など、IaCを実践する上で役立つ知識についても紹介します。
コードによるインフラ管理の経験やノウハウを身に付けたい読者にとって、よい参考となる1冊です。
Terraformではじめる実践IaC
―AWSでのインフラストラクチャ構築の基本から継続的デプロイまで
伊藤 太斉、藤原 涼馬 著
![[cover photo]](https://www.oreilly.co.jp/books/images/picture_large978-4-8144-0013-3.jpeg)
- TOPICS
- System/Network
- 発行年月日
- 2025年07月26日 発売予定
- PRINT LENGTH
- 424 (予定)
- ISBN
- 978-4-8144-0013-3
- FORMAT
目次
まえがき 第Ⅰ部 TerraformでInfrastructure as Code(IaC)を実現する 1章 Infrastructure as Code(IaC)とTerraform 1.1 IaCのメリット 1.1.1 パブリッククラウドを構築、管理する場合 1.2 主なIaCツールを分類、比較する 1.2.1 記述方法による分類(手続き型と宣言型) 1.2.2 ツールの適用範囲による分類 1.2.3 ツールの使い分け 1.3 Terraformとは 1.3.1 Terraformのメリット 1.4 IaC化すべきかの判断基準 1.4.1 繰り返し作成する回数 1.4.2 リソースの更新頻度 1.5 まとめ 2章 Terraformを使ったインフラストラクチャの構築 2.1 インフラストラクチャの構築サイクル 2.1.1 インフラストラクチャの構成を考える 2.1.2 コーディング 2.1.3 動作確認 2.1.4 環境への適用 2.1.5 環境の破棄 2.2 Terraformを構成する要素 2.2.1 モジュール(module) 2.2.2 プロバイダー(provider) 2.2.3 ステート(state) 2.3 モジュールとワークスペース 2.3.1 モジュール 2.3.2 ワークスペース(workspace) 2.4 まとめ 3章 Terraformのコマンドを利用する 3.1 主要なコマンド 3.1.1 init 3.1.2 fmt 3.1.3 validate 3.1.4 plan 3.1.5 apply 3.1.6 planとapplyの組み合わせ 3.1.7 destroy 3.1.8 import 3.2 ステートの管理 3.2.1 state list 3.2.2 state show 3.2.3 state mv 3.2.4 state rm 3.2.5 ステートの保管場所としてのバックエンド 3.3 ワークスペースの管理 3.3.1 workspace new 3.3.2 workspace list 3.3.3 workspace select 3.3.4 workspace delete 3.3.5 ワークスペース名の活用 3.4 まとめ 4章 Terraformの基本文法 4.1 resource 4.1.1 resourceのメタ引数 4.2 provider 4.2.1 プロバイダー指定の使い所 4.3 data(データソース) 4.4 variable 4.4.1 object(オブジェクト型) 4.4.2 map(マップ型) 4.4.3 list(配列型) 4.4.4 tuple(タプル型) 4.5 local(局所変数) 4.6 module(モジュール) 4.6.1 モジュールの呼び出し方 4.7 output 4.8 count 4.9 for_each 4.10 for 4.11 条件分岐 4.12 まとめ 5章 変数を制御する 5.1 variableブロックにおけるパラメーター 5.1.1 typeによる制御 5.1.2 validationブロックによる制御 5.1.3 評価式で局所変数を参照する 5.1.4 より厳格な変数制御 5.2 まとめ 6章 繰り返し構文 6.1 count 6.2 for_each 6.2.1 toset関数 6.3 まとめ 7章 メンテナンスのしやすいコード 7.1 再利用性を考慮したコード 7.2 可読性を高める 7.3 movedブロックを使ったコードの改善 7.4 ステートの移動 7.4.1 ステートの内部構成を把握する 7.4.2 実際にステートを移動する 7.5 どのようにコードを改善するか 7.5.1 いつはじめるか 7.6 まとめ 8章 importブロックを使いこなす 8.1 importブロック以前の既存リソースの取り込み 8.2 importブロック導入後の既存リソースの取り込み 8.3 importブロックのもう1つの用途 第Ⅱ部 AWSを使ったインフラストラクチャ構築 VPCを使ったネットワーク構築 ECSを使ったアプリケーション実行環境構築 ECSサービスへの継続的インテグレーションと継続的デプロイ チーム・組織としてのインフラストラクチャ記述 サンプルを見ていく上での注意 9章 TerraformでシンプルなVPCを構築する 9.1 事前に行うこと 9.1.1 Terraform操作用にAWS IAMユーザーを作成する 9.1.2 ステートの保管先S3バケットの作成 9.1.3 AWS認証情報の設定 9.1.4 Terraformの作業ディレクトリの初期化 9.2 VPCの作成 9.2.1 最初のVPC 9.2.2 今回作成したコードを見直してみる 9.2.3 修正版のVPC作成 9.3 命名規則などについての議論 9.4 まとめ 10章 VPCリソースをモジュール化する 10.1 Terraformにおけるモジュールとは 10.2 モジュール化することの意義 10.3 VPCリソースのモジュール化 10.3.1 単純なモジュール化 10.3.2 モジュール内コードの解説 10.3.3 モジュールの呼び出し元の記述 10.3.4 その他の環境向けリソースの作成方法 10.3.5 envディレクトリ配下のコード 10.4 まとめ 11章 サブネットの作成 11.1 判断しなければいけないこと 11.2 サブネットリソースの作成 11.2.1 サブネットの要件 11.2.2 サブネットリソースの変数定義 11.2.3 サブネットリソースの作成 11.3 ゲートウェイの作成 11.3.1 インターネットゲートウェイの作成 11.3.2 NATゲートウェイの作成 11.4 ルートテーブルの作成 11.4.1 パブリックサブネットのルートテーブルの作成 11.4.2 プライベートサブネットのルートテーブルの作成 11.5 モジュール内の情報をモジュール外と連携する 11.5.1 outputの用途 11.6 outputの書き方を考える 11.7 まとめ 12章 ECSクラスターの作成 12.1 事前に判断しなければいけないこと 12.1.1 依存関係の有無 12.1.2 ライフサイクル 12.1.3 将来的な拡張性(ステートのサイズ)と巨大なステートが引き起こす問題 12.2 実装コード 12.3 クラスターの作成 12.4 まとめ 13章 ECRリポジトリの作成とGitHub Actionsを用いたイメージ管理 13.1 Amazon ECRとは 13.2 開発プロセスから見たときのコンテナイメージリポジトリ 13.3 コンテナイメージリポジトリ利用に必要なもの 13.4 ECRリポジトリの作成 13.4.1 ECRリポジトリ本体 13.4.2 イメージのライフサイクルポリシーリソースの作成 13.5 GitHub Actionsワークフローの作成 13.5.1 GitHub Actionsとは 13.5.2 GitHub Actionsでの考慮事項 13.5.3 OIDCを使ったGitHub ActionsとAWSの接続 13.6 まとめ 14章 ECSタスク定義の作成 14.1 ECSタスク定義の概要 14.1.1 ECSタスク定義に関連するリソース 14.2 ECSタスク定義のモジュール化 14.2.1 ECSタスク定義モジュールのコード 14.2.2 タスク定義(aws_ecs_task_definitionリソース)のコード 14.3 ECSタスク定義モジュールの呼び出し元コード 14.3.1 局所変数で記述されたコンテナ定義 14.3.2 ガードレールとしてのIAMロールモジュールの提供 14.3.3 CloudWatch Logs 14.4 まとめとさらなるポイント 14.4.1 ポイント1:IAMロールの権限管理 14.4.2 ポイント2:ECSタスク定義の管理方法 15章 ECSサービスの作成 15.1 ECSサービスの全体像 15.2 セキュリティグループのTerraformモジュール化 15.2.1 内向きの通信ルール 15.2.2 外向きの通信ルール 15.2.3 セキュリティグループモジュールのoutput 15.3 ロードバランサー(ALB)の準備 15.3.1 ALB本体とアクセスログ管理 15.3.2 リスナー 15.3.3 ターゲットグループ 15.4 ECSサービスの準備 15.4.1 ECSサービス名 15.4.2 利用するコンピューティング基盤 15.4.3 所属クラスター 15.4.4 ネットワーク 15.4.5 オプション:ロードバランサー 15.4.6 デプロイ 15.5 ECSサービスモジュールの呼び出し元を再確認 16章 ECSサービスのCD 16.1 今回作成するCDパイプラインの概要 16.2 ECSサービスへのCDをGitHub Actionsで実現する 16.3 ECSサービスへのCDに必要となるIAMロールを作成する 16.4 ECSサービスへのCDワークフローの記述 16.4.1 CheckoutステップとGet image tagステップ 16.4.2 Assume roleステップ 16.4.3 Login to Amazon ECRステップとCheck docker image existsステップ 16.4.4 Set up ECS task definition settingsステップとRender ECS task definitionステップ 16.4.5 Deploy ECS task on serviceステップ 16.5 まとめ 付録A AWSアカウントの作成手順 付録B Terraformで作成したリソースをテストする B.1 terraform test B.1.1 terraform testの基本的な書き方 B.2 terraform testの注意点 付録C Terraformのローカルテスト環境 C.1 LocalStackとは C.2 環境構築 C.2.1 コマンドを準備する C.2.2 Terraformのソースコードの設定 C.3 LocalStackを使ったモックリソースの作成 C.3.1 DynamoDBの読み取り、書き込みを行う C.3.2 そのほかのLocalStackの機能 C.4 まとめ 付録D ドキュメンテーション D.1 terraform-docsとは D.2 基本的なコマンドの使い方 D.3 テンプレートファイルを利用して省力化する D.3.1 基本的な出力 D.4 CIを活用してドキュメンテーションを自動化する D.5 まとめ 索 引