Terraform Stateとリモートバックエンドの管理
Terraform Stateを理解し、安全なリモートバックエンドを設定し、Stateロックを扱い、共同IaCパイプラインでStateの破損を防ぐ方法を学びます。
「Terraform Stateとリモートバックエンドの管理」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
Terraform Stateとは
Terraformは、作成したリソースをstateファイル(terraform.tfstate)に記録します。このファイルによって、設定と実際のクラウドリソースが対応付けられます。
Stateがなければ、Terraformはどのリソースがすでに存在するのか把握できず、重複したリソースを作成したり、更新に失敗したりします。
ローカルStateではチーム運用に失敗する理由
デフォルトでは、Stateはローカルディスクに保存されます。チーム運用やCIでは、これでは問題が生じます。
- 他のメンバーがStateを確認できません
- 同時実行によってファイルが壊れる可能性があります
- ファイルにはシークレットが平文で含まれるため、誤ってコミットする可能性があります
この問題はリモートバックエンドで解決できます。
リモートバックエンド
リモートバックエンドは、S3バケット、Azure Blob、GCS、Terraform Cloudなどの共有された耐久性のある場所にStateを保存します。
これにより、すべてのパイプライン実行で、現在のインフラストラクチャに対する単一の信頼できる情報源を利用できます。
terraform {
backend "s3" {
bucket = "my-tf-state"
key = "prod/terraform.tfstate"
region = "us-east-1"
}
}Stateのロック
2つのパイプライン実行が同時にapplyすると、Stateが壊れる可能性があります。Stateのロックは、一度に1つの書き込みだけを許可することで、これを防ぎます。
S3バックエンドでは、DynamoDBテーブルがロックを提供します。Terraform Cloudでは自動的にロックされます。
backend "s3" {
bucket = "my-tf-state"
key = "prod/terraform.tfstate"
dynamodb_table = "tf-locks"
}Stateの暗号化
Stateファイルには、パスワードやキーなどの機密情報が含まれることがよくあります。Stateは必ず保存時に暗号化してください。
S3バックエンドでは、バケットの暗号化を有効にし、バックエンド設定でencrypt = trueを指定します。
backend "s3" {
bucket = "my-tf-state"
key = "prod/terraform.tfstate"
encrypt = true
}環境ごとのワークスペース
Terraformのワークスペースを使うと、1つの設定で環境ごとに1つずつ、複数のStateファイルを管理できます。
ワークスペースを切り替えることで、ステージングと本番が同じStateを共有しないようにできます。
terraform workspace new staging
terraform workspace select productionCIでのPlanとApply
パイプラインでは、terraform planを実行して変更内容を確認します(通常はPRで実行します)。そして、terraform applyで変更を適用します(mainへのマージ時に実行します)。
Planをファイルに保存しておくと、Applyでレビュー済みの内容をそのまま使用できます。
terraform plan -out=tfplan
terraform apply -auto-approve tfplanStateの確認
Stateを照会して、Terraformが追跡している内容を確認できます。
terraform state list— 管理対象のリソースを一覧表示しますterraform state show <addr>— 1つのリソースの詳細を表示します
Stateを手作業で編集することは避け、代わりにコマンドを使用してください。
terraform state list
terraform state show aws_instance.web既存リソースのインポート
Terraform以外で作成されたリソースは、再作成するのではなく、terraform importで管理対象に取り込めます。
これにより、既存インフラストラクチャにIaCを導入する際の破壊的な重複を避けられます。
terraform import aws_s3_bucket.logs my-existing-bucketドリフトへの対処
ドリフトは、誰かがインフラストラクチャを手動で変更し、実際の状態とStateが一致しなくなったときに発生します。
定期的にterraform planを実行してドリフトを検出し、再適用して元に戻すか、設定を実際の状態に合わせて更新します。
Stateを決してコミットしない
リモートバックエンドを使用している場合でも、ローカルのStateファイルとPlanファイルがgitの追跡対象外になるようにしてください。これらにはシークレットが含まれています。
適切な.gitignoreによって、誤った情報漏えいを防げます。
# .gitignore
*.tfstate
*.tfstate.*
tfplan
.terraform/理解度チェック
Terraform Stateの理解度を確認しましょう。
まとめ
Terraform Stateを安全に管理する方法を学びました。
- Stateは設定と実際のリソースを対応付けます。手作業で編集してはいけません
- リモートバックエンドによって、チームとCIでStateを共有できます
- ロックと暗号化によって、破損や情報漏えいを防ぎます
- ワークスペースで環境を分離し、
planでドリフトを検出します
堅牢なState管理は、信頼性の高いIaCパイプラインの基盤です。
よくある質問
「Terraform Stateとリモートバックエンドの管理」レッスンは無料ですか?
はい。「Terraform Stateとリモートバックエンドの管理」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「Terraform Stateとリモートバックエンドの管理」で何を学びますか?
Terraform Stateを理解し、安全なリモートバックエンドを設定し、Stateロックを扱い、共同IaCパイプラインでStateの破損を防ぐ方法を学びます。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「Terraform Stateとリモートバックエンドの管理」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Terraform と GitHub Actions による IaC
- クラウドリソースの管理
- インフラストラクチャ更新の自動化
- Terraform Stateとリモートバックエンドの管理