会員登録すると
学習することができます。
会員登録する(無料)
登録済みの方はこちら
ログイン

ドリフトと state の操作 ― Terraform の外での変更を見つけ、名前の変更を作り直さずに反映する

目安学習時間 25分

課題

全問正解でレクチャー完了です。

【問題1】

同僚が管理画面でタグを1つ書き足しました。実物は変えずに、その変更を state にだけ取り込むコマンドはどれですか。

[選択肢]

【問題2】

設定の aws_instance.web を aws_instance.app という名前に変えたいが、実物は作り直したくありません。設定に書いて解決する方法として正しいものはどれですか。

[選択肢]
会員登録すると
学習することができます。
会員登録する(無料)

学ぶ目的

ドリフトとは

クラウドの管理画面などで、Terraform を通さずに実物を変えると、設定・state・実物の間にずれができます。これをドリフトと呼びます。plan は、実物の今の状態を読み直して(refresh)から差を出すので、ドリフトがあると「設定どおりに戻す変更」が plan に出ます。

-refresh-only

  • terraform plan -refresh-only … 実物と state の差だけを確かめる
  • terraform apply -refresh-only … 実物は変えずに、state だけを実物に合わせる
  • 管理画面での変更を正としたいなら、設定のほうも同じ値に直す。直さないと、次の plan でまた元に戻す変更が出る

state を CLI で調べる

terraform state list で管理しているもののアドレスの一覧を、terraform state show にアドレスを付けて1つの詳細を見ます。terraform show は state 全体や、保存した plan のファイルを人が読める形で出します。state のファイルを手で書き換えてはいけません。

作り直させずに直す

  • moved ブロック … from と to にアドレスを書く。名前を変えたり、モジュールへ移したりしても、作り直さずに済む。設定に残るのでチーム全員に効く
  • terraform state mv … 同じことをコマンドで行う
  • removed ブロック … 管理から外す。lifecycle の destroy = false なら実物は残る(既定は実物も削除)
  • terraform state rm … state から外す。実物は残る
  • -replace=アドレス … plan や apply に付けて、1つを作り直す。以前の taint の代わり

このレクチャーで学ぶこと

  • ドリフトの意味と、plan での見え方
  • -refresh-only で state だけを実物に合わせる方法
  • state list・state show・show で state を調べる方法
  • moved・removed・state mv・state rm・-replace の使い分け

質問

まだ質問は投稿されていません。

質問投稿

ログイン後に質問の投稿ができます。