BioErrorLog Tech Blog

試行錯誤の記録

terraform plan結果がNo changesでないときに異常終了させる方法

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を制するものはクラウドを制する、ということで小さな知見でも積み重ねていきたいところです。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

参考

Command: plan | Terraform by HashiCorp