Terraformではじめる実践IaC
AWSでのインフラストラクチャ構築の基本から継続的デプロイまで
- 伊藤 太斉、藤原 涼馬 著
- 2025年07月 発行
- 424ページ
- ISBN978-4-8144-0013-3
- フォーマット Print PDF ePub
4,180円
書籍のご注文はオーム社サイトへ
内容
本書は、プログラムコードを用いてインフラストラクチャを管理するインフラストラクチャ・アズ・コード(IaC)を実践したい読者に向けた書籍です。IaCを実践する上で最低限知っておきたいTerraformの知識、またAmazon Web Services(AWS)上で実際にVPCを作成し、ネットワークやコンテナを構築し、CI/CDを用いてデプロイするまでの方法を解説しています。
さらに、記述したコードの改善や、LocalStackを用いたテスト環境、Terraformのドキュメンテーション機能など、IaCを実践する上で役立つ知識についても紹介します。
コードによるインフラ管理の経験やノウハウを身に付けたい読者にとって、よい参考となる1冊です。
関連書籍
目次
まえがき
第Ⅰ部 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 まとめ
索 引