関連サイト
本書の関連ページが用意されています。
内容紹介
●Terraformの実践的入門書
本書はIaCツールであるTerraformを解説した実践的入門書です。Terrafomはパブリッククラウドなどのインフラ構築を自動化するソフトウェアで、クラウドを横断的に管理できるツールとして、インフラ構築の現場に広く普及しています。
本書では実際にシステムの現場でTerraformを活用することを前提に、その仕組みや重要なキーワードであるIaC(Infrastructure as Code)の考え方を説明していきます。
●さまざまインフラを統一的に管理 TerraformはHCL(HashiCorp Configuration Language)という言語でシステムを記述し、インフラストラクチャを自動作成してくれます。複数のクラウドに対して同じ記法が使える点に特徴があり、ローカルのコンテナから、IaaS(サーバー/ネットワーク等)、PaaS(ミドルウェア)など、サーバーに限らない多彩なシステムの管理が可能です。
●Infrastructure as Codeの実現 IaCは、システム管理の属人化を排除し、仕様と実システムとの乖離を防ぎます。本書では、Terraformを使ってIaCによるシステム管理を現場で実現するためのさまざまな情報を紹介します。コマンドとしてのTerraformのさまざまな機能から、クラウドへの適用方法、HCP(HashiCorp Cloud Platform)による管理情報の共有化など、高度な利用方法までを解説します。
Terraformのインテグレーションを実践する筆者による、活用ノウハウを分かりやすくまとめた一冊です。
書誌情報
- 著者: 草間一人, 伊藤忠司, 七尾健太, 前田友樹, 村田太郎
- 発行日: 2024-11-26 (紙書籍版発行日: 2024-11-26)
- 最終更新日: 2024-11-26
- バージョン: 1.0.0
- ページ数: 336ページ(PDF版換算)
- 対応フォーマット: PDF, EPUB
- 出版社: インプレス
対象読者
システムインフラの管理者、クラウドを使うユーザー、クラウドと自社システムの管理統合を目指す方、クラウドの運用の技術動向を追っているエンジニアの方など
著者について
草間一人
通信事業者でプラットフォームエンジニアを務めたのを皮切りに、いくつかの外資系企業でプロフェッショナルサービスやプリセールスエンジニアとしてクラウドネイティブやプラットフォーム製品に携わるなど、10年以上さまざまな形でプラットフォームに関与している。一般社団法人クラウドネイティブイノベーターズ協会 代表事。Platform Engineering Meetupオーガナイザー。
伊藤忠司
さまざまな業種業態のお客様に対して、TerraformやVaultをメインに全HashiCorpプロダクトのプリセールス業務を担当。インフラエンジニア。過去には、メインフレームからストレージ、Kubernetesなど幅広い技術領域を担当。
七尾健太
ソフトウェアエンジニアとして複数の新規立ち上げやOSS開発に携わったのち、いくつかの外資系企業でアーキテクトとしてさまざまなお客様環境の設計や構築などに携わる。
前田友樹
SIer業界、Web業界でWebアプリケーション開発に従事したあと、SaaSの導入コンサルタントを経て現在はプリセールスに関する業務に従事。OSS活動としてETLアプリケーションフレームワークcliboaの開発にも取り組む。福岡県北九州市出身。趣味は登山、旅行、読書、映画音楽鑑賞など。
村田太郎
お客様担当のプリセールスエンジニアとして、これまで複数の企業でITインフラ/監視ソリューション等の提案活動に従事。現在はHashiCorpにて、TerraformやVaultをはじめとするクラウド活用ソリューションの提案・導入支援等を行っている。
目次
はじめに
- 本書の構成
- 著者の各担当
- 本書のサンプルコードについて
第1章 Terraform概要
- 1.1 クラウドとシステム運用の課題
- 1.1.1 クラウドがもたらした変化
- 1.1.2 クラウド化による課題
- 1.1.3 解決策としての自動化
- 1.2 Terraformとは何か
- 1.2.1 Terraformの歩み
- 1.2.2 ライセンス
- 1.2.3 Terraformの仕組み
- 1.3 Infrastructure as Codeとは
- 1.3.1 手作業によるインフラ構築の問題点
- 1.3.2 Infrastructure as Codeのメリット
- 1.3.3 HashiCorp Configuration Language
- 1.4 その他のツールとの違い
- 1.4.1 他のOSSとの違い
- 1.4.2 クラウドの構築自動化ツールとの違い
第2章 Terraformの基本的な操作
- 2.1 本章で構築する構成と目的
- 2.1.1 Terraformのセットアップ
- 2.1.2 Dockerの準備
- 2.2 リソースを作成する
- 2.2.1 TFファイルの作成
- 2.2.2 初期化 —terraform init—
- 2.2.3 構築 —terraform plan—
- 2.2.4 実行 —terraform apply—
- 2.3 コードを読み解く
- 2.3.1 terraformブロック
- 2.3.2 providerブロック
- 2.3.3 resourceブロック
- 2.3.4 構成されるインフラオブジェクト
- 2.4 構築された環境を読み解く
- 2.4.1 生成されたファイルの確認
- 2.4.2 ステートファイルとは
- 2.4.3 ステートファイルの管理について
- 2.5 変数を利用する
- 2.5.1 変数の宣言
- 2.5.2 変数の利用
- 2.5.3 変数の設定
- 2.6 構築した環境を変更する
- 2.6.1 TFファイルの更新
- 2.6.2 環境の削除 —terraform destroy—
- 2.7 Terraformのコマンド
- 2.7.1 よく利用するコマンド
- 2.7.2 コマンドの流れ
- 2.7.3 HCLの整形
第3章 AWSで始めるTerraform
- 3.1 AWSの環境を構築しよう
- 3.1.1 なぜAWSでTerraformなのか?
- 3.1.2 本章で構築する構成
- 3.2 AWS環境の準備
- 3.2.1 AWSアカウントの作成
- 3.2.2 IAMユーザーの作成
- 3.2.3 認証情報の保管
- 3.3 リソースを作成する
- 3.3.1 TFファイルの作成
- 3.4 Terraformでシステムを作る
- 3.4.1 Wordpressで必要になる環境
- 3.4.2 main.tfの作成
- 3.4.3 VPC
- 3.4.4 サブネット
- 3.4.5 インターネットゲートウェイ
- 3.4.6 ルートテーブル
- 3.4.7 セキュリティグループ
- 3.4.8 RDS
- 3.4.9 EC2 インスタンス
- 3.4.10 WordPress実行環境のセットアップ
- 3.4.11 outputsファイルの作成
- 3.4.12 構築の実行
- 3.4.13 センシティブな値の取得
- 3.5 複数のリソースを作成する
- 3.5.1 ループの利用
- 3.5.2 countの利用(非推奨)
- 3.5.3 countの使い道
- 3.6 AWSプロバイダーに権限を渡す方法
- 3.6.1 providerブロック内のコンフィグ(非推奨)
- 3.6.2 AWS CLI設定ファイル
- 3.6.3 IAMインスタンスプロファイル
- 3.6.4 Dynamic Provider Credentials A
- 3.7 AWS環境を構築するための情報
- 3.7.1 AWSCCプロバイダーのドキュメント
- 3.7.2 HashiCorp Developer
第4章 マルチクラウドでTerraformを活用
- 4.1 マルチクラウドこそTerraformの強み
- 4.1.1 構築ワークフローの統一
- 4.1.2 クラウドごとの知識は必要
- 4.1.3 Terraformによってクラウドの理解が早まる
- 4.2 Azureでの環境構築
- 4.2.1 構築する構成
- 4.2.2 Azureプロバイダー
- 4.2.3 Azure環境の準備
- 4.2.4 リソースを作成する
- 4.2.5 構築の実行
- 4.2.6 Azure構築のまとめ
- 4.3 Google Cloudでの環境構築
- 4.3.2 Google Cloud 環境の準備
- 4.3.3 リソースを作成する
- 4.3.4 構築の実行
- 4.3.5 Google Cloud構築のまとめ
第5章 HCP Terraformを使ったチーム運用
- 5.1 HCP Terraformとは何か
- 5.1.1 Terraform単体だと困ること
- 5.1.2 Terraform運用のベストプラクティス
- 5.1.3 HCP Terraformが提供する機能
- 5.2 HCP Terraformのサインアップ
- 5.3 ステートファイルの移行
- 5.3.1 ローカルでステートファイルを作成しておく
- 5.3.2 HCP Terraform向けの設定を追加
- 5.3.3 ログイン
- 5.3.4 ステートファイルを移行
- 5.3.5 Workspaceを確認する
- 5.4 HCP Terraform上での実行
- 5.4.1 Planを実行する
- 5.4.2 ローカル実行で確認する
- 5.4.3 リモート実行で確認する
- 5.5 VCSと連携する
- 5.5.1 GitおよびGitHubの準備
- 5.5.2 HCP TerraformとGitHubの連携
- 5.5.3 リポジトリを更新する
第6章 モジュールの活用
- 6.1 Terraformにおけるモジュール
- 6.1.1 コードの複雑化に伴う問題
- 6.1.2 モジュールとは?
- 6.1.3 モジュールの呼び出し
- 6.1.4 モジュールのメリット
- 6.1.5 モジュールのベストプラクティス
- 6.2 パブリックモジュール
- 6.2.1 AWS
- 6.2.2 AWS VPCモジュールを使ってみる
- 6.2.3 Azure
- 6.2.4 Google Cloud
- 6.3 自作のモジュールを公開する
- 6.3.1 作成するモジュール
- 6.3.2 モジュールのコーディング
- 6.4 HCP Terraformによるモジュール管理
- 6.4.1 パブリックモジュールの公開
- 6.4.2 プライベートモジュールの登録
- 6.4.3 登録用モジュールの作成
- 6.4.4 プライベートモジュールレジストリへの登録
- 6.4.5 発展的なユースケース
第7章 さまざまなプロバイダー
- 7.1 さまざまなサービスを組み合わせる
- 7.1.1 サービスを組み合わせるのが「現代風」
- 7.1.2 Terraformとリソース
- 7.2 Terraform Registry
- 7.2.1 プロバイダーの情報を取得する
- 7.2.2 プロバイダーのTier
- 7.3 プロバイダー紹介
- 7.3.1 Dockerプロバイダー
- 7.3.2 TFEプロバイダー
- 7.3.3 HashiCorp Cloud Platformプロバイダー
- 7.3.4 HashiCorp Vault プロバイダー
- 7.3.5 VMware vSphereプロバイダー
- 7.3.6 Nutanixプロバイダー
- 7.3.7 Fastlyプロバイダー
- 7.3.8 Datadogプロバイダー
- 7.3.9 Splunk Enterpriseプロバイダー
- 7.3.10 Ansibleプロバイダー
第8章 SentinelによるPolicy as Codeの実践
- 8.1 IaC運用における課題
- 8.1.1 インフラや組織のセキュリティ対策
- 8.1.2 組織のコンプライアンス遵守
- 8.1.3 ベストプラクティスの実践
- 8.1.4 ポリシー適用自動化の必要性
- 8.1.5 Policy as Code
- 8.1.6 PaCの例
- 8.2 Sentinel
- 8.2.1 Sentinelの特徴
- 8.2.2 Sentinelのセットアップ
- 8.2.3 helloworld.sentinel
- 8.2.4 Sentinelの基本的な機能
- 8.2.5 ルールの記述
- 8.2.6 組み込み関数
- 8.2.7 パラメータ
- 8.3 ポリシーテスト
- 8.3.1 テストケースの準備
- 8.3.2 モックテスト
- 8.4 Sentinel CLI設定ファイル
- 8.4.1 設定ファイルのブロック
- 8.4.2 モジュール
- 8.5 実践的なポリシー実装
- 8.5.1 プロビジョナーの禁止
- 8.5.2 Terraformのバージョンの制限
- 8.5.3 ポリシー設定のポイント
- 8.6 HCP Terraformとの連携
- 8.6.1 ポリシーとポリシーセット
- 8.6.2 ポリシーチェックの適用
付録 Terraform Tips
- A.1 Dynamic Provider Credentials
- A.1.1 認証情報を直接与えるリスク
- A.1.2 認証情報を直接与えずにTerraformを使う
- A.1.3 AWSの設定
- A.1.4 HCP Terraformの設定
- A.1.5 動作確認
- A.1.6 さまざまなクラウドでの利用
- A.2 読み出し専用のデータソースを定義する
- A.2.1 データソースとは
- A.2.2 利用可能なデータソース
- A.3 Terraformファイルの分割方法
- A.3.1 Terraformファイルを分割して管理する
- A.3.2 ステートファイルを分割して管理する
- A.4 他のステートファイルを参照する
- A.4.1 terraform remote stateデータソース
- A.4.2 HCP Terraformからremote stateを参照する
- A.4.3 remote stateを参照する手順
- A.5 複数のリージョンやアカウントを使う
- A.5.1 複数のリージョンを同時に設定する
- A.5.2 複数のアカウントを利用する
- A.6 ローカル値
- A.6.1 再利用したい値を定義する
- A.6.2 ローカル値で設定できること
- A.6.3 local値とvariableとの使い分け
- A.7 ヒアドキュメントとテンプレート構文
- A.7.1 ヒアドキュメントで複数行の文字列を扱う
- A.7.2 外部ファイルを読み込む
- A.8 動的にブロックを生成する
- A.8.1 dynamicブロック
- A.9 デバッグとトラブルシューティング
- A.9.1 terraform consoleの活用
- A.9.2 ログレベルの調整
- A.10 覚えておきたい便利コマンド