18
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ARISE analyticsAdvent Calendar 2023

Day 3

Terraform初心者にもおすすめ!「詳解 Terraform 第3版」まとめ

Last updated at Posted at 2023-12-03

はじめに

今年(2023年)の11月に発売された「詳解 Terraform 第3版」を読んだので、書籍紹介&各章で理解に役立つ記事のリンクを紹介します。
タイトルにもある通り、Terraform歴2ヶ月の初心者の筆者でもスルスル読めたので、初心者の方にもおすすめです!!

サマリー

「詳解 Terraform 第3版」は、Terraformの基礎から応用まで幅広く解説した書籍で、DevOpsやIaCの概念、ステート管理、モジュール利用、シークレット管理、複数プロバイダ使用などが紹介されています。

1章や2章は初学者向けの内容であり、Terraformを初めて使う人にも親切です。
3章以降は実践的な内容が多く、辞書的に使うのも良いのかなと思います。(上級者にとっては少し物足りない可能性)

以下に各章でざっくりどんなことが書いてあったか&理解に役立つ記事や補足の記事のリンクを付記します。

1章:なぜTerraformを使うのか

対象:

Terraformの背景、必要性が知りたい方

DevOps、Infrastructure as Code(IaC)、Terraformの仕組み(宣言型言語であること)について記載されています。

Terraformの仕組みについて、以下の記事などでわかりやすく解説されています。

2章:Terraformをはじめよう

対象:

Terraformの基本的な使い方、AWSの基礎知識(EC2、VPC等)と基本的なterraformのプログラムの書き方が知りたい方。

terraformの基礎(planapplyや変数、データソース)について記述されています。またterraform outputterraform graphなどの可視化のコマンドについても解説されています。

特に可視化については以下の記事がわかりやすいです。

EC2やVPC、セキュリティグループ、ロードバランサーなどのAWSの基礎知識及び、それらをterraformプログラムを作成する方法が記載されています。

3章:Terraformステートを管理する

対象:

ステートの保存方法や異なる環境での分離方法が知りたい方。

3章ではステートの管理方法が記載されています。

ステートの保存•共有方法としてS3&DynamoDB(ロック)の方法が推奨されています。

具体的な方法は以下の記事で紹介されています。

また異なる環境(例:開発環境とテスト環境)のステート管理の方法として、(1)ワークスペースを用いた分離と(2)ファイルレイアウトを用いた分離が述べられています。

(2)ファイルレイアウトを用いた分離では、環境やモジュールの集合(vpc、dbなど)でフォルダ分けをする方法が記載されていました。フォルダ分けの方法については、所属チームで流派があると思いますが、参考になるかなと思います。

書籍では紹介されていませんが、Terraform Cloudを用いたステート管理もあるようです。

4章:モジュールで再利用可能なインフラを作る

対象:

モジュールの利点や使い方について知りたい方

モジュールを使う上では欠かせない変数は、環境によって変わるものはvar(例:dbのサイズ)、変わらないものはlocals(例:ポート番号)を選択します。

モジュールのバージョン管理方法については、live(稼働中)とmodulesに分けて運用する方法が記載されています。
modulesでコードを改修してdevstg環境でテストを行い、テストが環境したらliveにコードを移す運用ということです。(つまりprdのモジュールのsourceliveを参照している。)

5章:Terraformのテクニックやポイント

対象:

Terraformの文法やテクニックについて知りたい方

紹介されているTerraformの文法は以下7つです。

関数•文法 説明
count countの個数だけリソースを作成 (0でリソースを作成しない)
length 配列の長さを返す
スプラット式 配列の全ての要素を指定
for_each リスト、集合、マップをループ
for式 リスト内包表記
concat 2つ以上のリストを1つにまとめる
one リストの要素数が0->null、1->要素、2以上:エラー

Terraform使用時のポイントとして、以下3つが紹介されています。

  1. Terraformのみで環境を操作する
  2. 既存インフラがある場合はimportする
  3. 実行前にplanで確認する(必要なリソースが削除されないかどうか)。ゼロダウンタイムデプロイするために、lifecyclecreate_before_destory=trueにすることで置き換え先のリソースを先に作成しておく。

create_before_destoryのドキュメントは以下です。

6章:シークレットを管理する

対象:

シークレット情報(ex.パスワード)の管理方法を知りたい方

シークレット情報の認証を用いる状況として3つが説明されています。

  1. プロバイダ
  2. リソースとデータファイル
  3. ステートファイルとプランファイル

プロバイダ

個人ユーザーのシークレット情報を保存する方法は以下の2つです。

  • 環境変数
  • aws-vault add(AWSの認証)

aws-vaultについての解説は以下です。

またマシンユーザであるCircleCIの場合はCircleCIコンテキストに保存します。

リソースとデータファイル

リソースとデータファイルのシークレット情報は以下3つで管理します。

  • 環境変数
  • 暗号化されたファイル
    KMSを使う方法やPSGキーを使う方法があります。
  • シークレットストア

KMSに関しては以下の記事でわかりやすく解説されています。

ステートファイルとプランファイル

保存場所を暗号化がサポートされているバックエンドとし、ファイルを暗号化することが推奨されています。

7章:複数のプロバイダを使う

対象:

複数のプロバイダを扱う方法を理解したい方

複数プロバイダを使う場面を以下3つに分類しています。

  • 複数のAWSリージョンにデプロイ
  • 複数のAWSアカウントにデプロイ
  • 異なる複数のプロバイドにデプロイ

複数のAWSリージョン

複数リージョンにデプロイする際は、複数のproviderブロックを使い、それぞれ別々のregionaliasで設定します。

複数のAWSアカウント

複数アカウントにデプロイする際は、別々のassume_rolealiasと設定します。

異なる複数のプロバイダ

異なる複数のプロバイダを使う現実的に試しにくい例として、Docker化されたアプリケーションをAWSプロバイダとやKubernetesを組み合わせて使う方法が紹介されています。

またDockerの使い方、Kubernetesの使い方や特徴についても説明されています。

8章:本番レベルのTerraformコード

対象:

本番レベルのTerraformプロジェクトに必要な要素を知りたい方

本番レベルのインフラで時間を要する理由として以下3つが挙げれています。

 - ツールが急速に成長しており、発展途上であること
 - 偶有的複雑性:選択したツールによって発生する問題
 - 本質的複雑性:選択したツールに関わらず発生する問題

さらに本番レベルのインフラではチェック項目が以下のように多数あります。

  • インストール
  • 設定
  • プロビジョニング
  • デプロイ
  • 高可用性
  • スケーラビリティ
  • パフォーマンス
  • ネットワーク
  • セキュリティ
  • メトリクス
  • ログ
  • バックアップ
  • コスト
  • ドキュメント
  • テスト

また本番レベルのインフラは、大規模であるためモジュールは小さく、組み合わせ可能かつテスト可能でバージョン管理されている必要があります。

9章:Terraformのコードをテストする

対象:

Teraformのテストについて知りたい方

テスト手法は手動テストと自動テストの二つがあります。

手動テスト

手動テストでは、(1)リソースをAWS等に作成し、(2)curlやHTTPリクエストを送信して確認を行い、(3)リソースの削除を手動で行います。(つまり各工程でコマンドを手打ちします。)

手動テストでは開発者にサンドボックス環境を準備し、定期的に削除する手法が推奨されています。

自動テスト

自動テストでは、手動テストで行っていた各工程を一つにまとめて自動化します。

本書籍では自動テストツールとして、GoのライブラリであるTerratestが紹介されており、ユニットテスト、統合テスト、E2Eテストの例について紹介されています。

注意事項やテクニックについても記載されており、ユニットのテストの並列化の際はIDをrandomにすることで重複を防ぐこと、EC2の起動失敗等の失敗に対する回復力を持たせるために既知のエラーに対してリトライされるなどが紹介されています。

並列テストについては以下の記事でわかりやすく解説されています。

その他

その他の解析として、静的解析(terraform validate、Policy of Code)やプランによる解析、サーバーテスト(InSpec、Serverspec、Goss)が紹介されています。

10章:チームでTerraformを使う

対象:

チームにTerraformを導入したい方

デプロイワークフローやデプロイ戦略など実際の運用方法について紹介されています。

デプロイ戦略については以下のサイト•記事で詳しく解説されています。

ファイルレイアウトやテスト方法など、各章で紹介されて事項が随所に出てきており、復習にも適しています。

おわりに

「詳解 Terraform 第3版」の書籍紹介&参考リンクの紹介は以上となります。

terraform初心者の自分にとっては、知識の吸収と体系化に役に立つ良書でした。

少しでも参考になれば幸いです。

18
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?