terraform plan結果がNo changesかどうかを検知するのに便利な方法をメモします。
はじめに
こんにちは、@bioerrorlogです。
terraform apply
した直後であっても、terraform plan
で差分が発生してしまうことがあります。
実際のコードからterraform側で良しなに解釈されてapplyされる場合など、よくこのような事象が発生します。 この状態を放置してしまうと、実際のリソースには変更がないにもかかわらず常にplanで差分が発生するようになってしまい非常に厄介です。
これに対処するためには、なるべく早い段階でplan差分が発生していることを検知することが重要です。
そこで今回は、terraform plan
結果がNo changesでないときに異常終了(exit codeが0以外)させる便利な方法をメモします。
CIやCDでterraform applyした後、次のパイプラインのjobでplanを実行して結果がNo changesであることを保証する、という便利な使い方ができます。
terraform plan結果がNo changesでないときに異常終了させる
-detailed-exitcode
オプションを付けることで、No changesでないときに異常終了させることができます。
terraform plan -detailed-exitcode
-detailed-exitcode
オプションを付けると、各ケースのexit codeは次のようになります:
- exit code 0 : No changesでplanが成功
- exit code 1 : planがError
- exit code 2 : 差分ありでplanが成功
このように "No changesでplanが成功" 以外ではexit codeが異常値をとります。
なので、例えばCICDパイプラインのjobでこのコマンドを実行させれば、No changes以外の場合はjob失敗、といった検知機構の設計が可能です。
おわりに
以上、terraform plan結果がNo changesかどうかを検知するのに便利な方法を簡単にメモしました。
IaCを制するものはクラウドを制する、ということで小さな知見でも積み重ねていきたいところです。
[関連記事]