詳解 Terraform 第3版

―Infrastructure as Codeを実現する

[cover photo]
TOPICS
System/Network
発行年月日
PRINT LENGTH
472
ISBN
978-4-8144-0052-2
原書
Terraform: Up & Running, 3rd Edition
FORMAT
Print PDF EPUB
Ebook
4,180円
Ebookを購入する
Print
4,180円

本書は、Terraformのシンプルな宣言的表現によって、コマンド操作で、インフラをデプロイし管理する方法を豊富なサンプルコードを使って解説します。
Terraformがインフラの状態をどのように管理し、ファイルのレイアウト、分離、ロックにどのように影響するかを学びます。またTerraformを使ったサーバクラスタやロードバランサ、データベースのデプロイ、Terraformモジュールでの再利用可能なインフラの作成、ゼロダウンタイムデプロイを実現するための高度なTerraformの文法を解説します。さらにTerraformの各種ファイルにスケーラビリティを持たせた状態で管理する方法や、パスワードなどの機密情報をTerraformでうまく管理する方法、テストまでを詳述します。
Terraformの基本から、大規模なトラフィックと多数の開発者チームをサポートするフルスタックの運用までを包括的に学ぶ本書は、開発者、システム管理者必携の一冊です。Terraformバージョン1.0以降対応。

正誤表

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

第1刷正誤表

(2023年12月15日更新)

■p.20 箇条書きの4つ目
誤:汎用言語かドメイン特化言語か
正:汎用言語か、ドメイン特化言語か

■p.20 箇条書きの7つ目
誤:有償か無償か
正:有償か、無償か

■p.56 1つ目のパラグラフの1行目
誤:何がTerraformが何を
正:Terraformが何を

■p.205 脚注†10の下から2行目
誤:GitHub Action
正:GitHub Actions

■p.250 8行目
誤:使えrます。
正:使えます。

■p.263 「このコードは、」で始まるパラグラフの2行目
誤:支持
正:指示

■p.337 「ここで注意を」で始まるパラグラフの2行目
誤:hell-world-app
正:hello-world-app

■p.338 「db_remote_state_bucketと」で始まるパラグラフの4行目
誤:hell-world-app
正:hello-world-app

目次

はじめに

1章 なぜTerraformを使うのか
    1.1 DevOpsとは何か
    1.2 Infrastructure as Codeとは何か
        1.2.1 アドホックなスクリプト
        1.2.2 設定管理ツール
        1.2.3 サーバテンプレーティングツール
        1.2.4 オーケストレーションツール
        1.2.5 プロビジョニングツール
    1.3 Infrastructure as Codeの利点とは
    1.4 Terraformはどう動くのか
    1.5 Terraformと他のIaCツールとはどう違うのか
        1.5.1 設定管理ツールか、プロビジョニングツールか
        1.5.2 ミュータブルなインフラか、イミュータブルなインフラか
        1.5.3 手続き型言語か、宣言型言語か
        1.5.4 汎用言語かドメイン特化言語か
        1.5.5 マスタか、マスタレスか
        1.5.6 エージェントか、エージェントレスか
        1.5.7 有償か、無償か
        1.5.8 大きなコミュニティか、小さなコミュニティか
        1.5.9 成熟か、最先端か
        1.5.10 複数のツールの組み合わせ
    1.6 まとめ

2章 Terraformをはじめよう
    2.1 AWSアカウントのセットアップ
    2.2 Terraformのインストール
    2.3 サーバ1台のデプロイ
    2.4 Webサーバ 1台のデプロイ
    2.5 設定変更可能なWebサーバのデプロイ
    2.6 Webサーバのクラスタのデプロイ
    2.7 ロードバランサのデプロイ
    2.8 後片付け
    2.9 まとめ 

3章 Terraformステートを管理する
    3.1 Terraformステートとは
    3.2 ステートファイルの共有ストレージ
    3.3 Terraformバックエンドの制限
    3.4 ステートファイルの分離
        3.4.1 ワークスペースによる分離
        3.4.2 ファイルレイアウトによる分離
    3.5 terraform_remote_stateデータソース
    3.6 まとめ 

4章 モジュールで再利用可能なインフラを作る
    4.1 モジュールの基本
    4.2 モジュールの入力
    4.3 モジュールのローカルな値
    4.4 モジュールの出力
    4.5 モジュールの注意点
        4.5.1 ファイルパス
        4.5.2 インラインブロック
    4.6 モジュールのバージョン管理
    4.7 まとめ 

5章 Terraformを使うためのヒントとコツ:ループ、条件分岐、デプロイ、その他つまずきポイント
    5.1 ループ
        5.1.1 countパラメータによるループ
        5.1.2 for_each式によるループ
        5.1.3 for式によるループ
        5.1.4 forの文字列ディレクティブを使ったループ
    5.2 条件分岐
        5.2.1 countパラメータを使った条件分岐
        5.2.2 for_eachとforを使った条件分岐
        5.2.3 if文字列ディレクティブを使った条件分岐
    5.3 ゼロダウンタイムデプロイ
    5.4 Terraformのつまずきポイント
        5.4.1 countとfor_eachの制限事項
        5.4.2 ゼロダウンタイムデプロイの制限事項
        5.4.3 有効なプランも失敗することがある
        5.4.4 リファクタリングは難しい
    5.5 まとめ 

6章 シークレットを管理する
    6.1 シークレット管理の基本
    6.2 シークレット管理ツール
        6.2.1 保存するシークレットの種類
        6.2.2 シークレットの保存方法
        6.2.3 シークレットにアクセスするインタフェイス
        6.2.4 シークレット管理ツールの比較
    6.3 シークレット管理ツールとTerraform
        6.3.1 プロバイダ
        6.3.2 リソースとデータソース
        6.3.3 ステートファイルとプランファイル
    6.4 まとめ 

7章 複数のプロバイダを使う
    7.1 1つのプロバイダを使う
        7.1.1 プロバイダとは何か
        7.1.2 プロバイダをどのようにインストールするのか
        7.1.3 プロバイダをどのように使うのか
    7.2 同じプロバイダのコピーを複数使う
        7.2.1 複数のAWSリージョンを使う
        7.2.2 複数のAWSアカウントを使う
        7.2.3 複数のプロバイダを使えるモジュールを作る
    7.3 異なる複数のプロバイダを使う
        7.3.1 Docker短期集中コース
        7.3.2 Kubernetes短期集中コース
        7.3.3 Elastic Kubernetes Service(EKS)を使ったAWSへのDockerコンテナのデプロイ
    7.4 まとめ 

8章 本番レベルのTerraformコード
    8.1 本番レベルのインフラを構築するのに時間がかかる理由
    8.2 本番レベルのインフラのチェックリスト
    8.3 本番レベルのインフラモジュール
        8.3.1 小さなモジュール
        8.3.2 組み合わせ可能なモジュール
        8.3.3 テスト可能なモジュール
        8.3.4 バージョン管理されたモジュール
        8.3.5 Terraformモジュールの先へ
    8.4 まとめ 

9章 Terraformのコードをテストする
    9.1 手動テスト
        9.1.1 手動テストの基礎
        9.1.2 テスト後の後片付け
    9.2 自動テスト
        9.2.1 ユニットテスト
        9.2.2 統合テスト
        9.2.3 E2Eテスト
        9.2.4 その他のテスト手法
    9.3 まとめ 

10章 チームでTerraformを使う
    10.1 チームでInfrastructure as Codeを採用する
        10.1.1 上司を説得する
        10.1.2 少しずつ進める
        10.1.3 学ぶ時間をチームに与える
    10.2 アプリケーションコードのデプロイワークフロー
        10.2.1 バージョン管理する
        10.2.2 コードをローカルで実行する
        10.2.3 コードに変更を加える
        10.2.4 変更に対するレビューを依頼する
        10.2.5 自動テストを実行する
        10.2.6 マージしてリリースする
        10.2.7 デプロイする
    10.3 インフラコードのデプロイワークフロー
        10.3.1 バージョン管理する
        10.3.2 コードをローカルで実行する
        10.3.3 コードに変更を加える
        10.3.4 変更に対するレビューを依頼する
        10.3.5 自動テストを実行する
        10.3.6 マージしてリリースする
        10.3.7 デプロイする
    10.4 すべてを組み合わせよう
    10.5 まとめ

付録A 参考文献
    A.1 書籍
    A.2 ブログ
    A.3 講演
    A.4 ニュースレター
    A.5 オンラインフォーラム

訳者あとがき
索引

コラム目次
    ネットワークの分離
    タグに関するルールを強制する
    1つのメールアドレスで複数のエイリアスを使う方法
    プロビジョナとユーザーデータ