0Pricing
DevOps Bootcamp · レッスン

Stateのドリフト管理とリコンシリエーション

障害や予期しない変更につながる前に、TerraformのStateと実際のインフラの差分であるドリフトを検出、診断、解消します。

「Stateのドリフト管理とリコンシリエーション」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。

ドリフトとは

ドリフトは、Terraformの外部で実際のインフラが変更されたときに発生します。たとえば、エンジニアがコンソールで設定を変更したり、別のツールがリソースを変更したりする場合です。するとstateと実際の状態が一致しなくなり、次回のapplyで変更が予期せず元に戻ったり上書きされたりする可能性があります。

planでドリフトを検出する

通常のterraform planはstateを更新し、差分を表示します。リソースにドリフトがあると、コードで変更していない差分がplanに報告されます。

terraform plan

Refresh-onlyプラン

設定変更を提案せずにドリフトを確認するには、refresh-onlyプランを使います。stateを実際の状態に更新し、異なる部分を表示します。

terraform plan -refresh-only

ドリフトレポートを読む

Terraformは、検出した変更とともにドリフトした属性を示します。チルダはインプレース変更を示し、マイナスとプラスの組み合わせは、Terraformの外部で値が追加または削除されたことを示します。

# aws_instance.web has changed
  ~ instance_type = "t3.micro" -> "t3.small"

調整する2つの方法

ドリフトを見つけたら、どちらの状態に合わせるかを選びます。

  • 実際の状態を受け入れる — 新しいstateに合わせてコードを更新します。
  • コードの状態に戻す — applyして、設定どおりの状態にインフラを戻します。

ドリフトをstateに取り込む

手動変更が意図したものだった場合は、apply -refresh-onlyを実行して実際の状態をstateに記録し、その後コードも一致するよう更新して、今後のplanに差分が出ないようにします。

terraform apply -refresh-only

ドリフトを元に戻す

変更が承認されていない場合は、通常のterraform applyを実行して、インフラを宣言した設定に戻し、手動変更を取り消します。

terraform apply

単一のリソースを対象にする

特定のリソースだけを修正するには、-targetで操作対象を1つのリソースに限定します。より広範なドリフトを隠してしまう可能性があるため、慎重に使用してください。

terraform apply -target=aws_instance.web

不要なドリフトを防ぐ

一部の属性はAWSや他のツールによって管理されます。ignore_changesを使うと、Terraformがそれらをめぐって競合しなくなります。

resource "aws_instance" "web" {
  lifecycle {
    ignore_changes = [tags["LastScanned"]]
  }
}

継続的なドリフト検出

CIでスケジュール実行のrefresh-onlyプランを実行し、ドリフトを早期に検出します。Terraform Cloudには、stateと実際の状態が乖離したときに通知するドリフト検出機能が組み込まれています。

on:
  schedule:
    - cron: "0 6 * * *"

ツールより文化が重要

ドリフトを最も効果的に防ぐのはプロセスです。コンソールへの書き込み権限を制限し、すべての変更をTerraform経由にして、手動変更をインシデントとして扱います。ツールはドリフトを検出しますが、規律がドリフトを防ぎます。

確認テスト

ドリフト管理に関する知識を確認しましょう。

まとめ: 正しいstateを保つ

これでドリフトに対処できるようになりました。

  • planまたはplan -refresh-onlyで検出する。
  • apply -refresh-onlyとコードの更新で受け入れる。
  • 通常のapplyで元に戻す。
  • ignore_changesとスケジュール実行のチェックで早期に対処する。

よくある質問

「Stateのドリフト管理とリコンシリエーション」レッスンは無料ですか?

はい。「Stateのドリフト管理とリコンシリエーション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。

「Stateのドリフト管理とリコンシリエーション」で何を学びますか?

障害や予期しない変更につながる前に、TerraformのStateと実際のインフラの差分であるドリフトを検出、診断、解消します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

DevOps Bootcampを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「Stateのドリフト管理とリコンシリエーション」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDevOps Bootcampレッスンでコードを書いて実行できますか?

はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Terraform 構成のデバッグ
  2. パフォーマンス最適化戦略
  3. Terraform によるディザスタリカバリ
  4. Stateのドリフト管理とリコンシリエーション
← DevOps Bootcampに戻る