Terraformでエラーが出た時にリトライする方法

Terraformでエラーが発生した場合、自動でリトライする機能はありません。ただし、以下のような方法で手動でリトライすることができます。

リトライ用のスクリプトを作成する

リトライ用のシェルスクリプトを作成し、terraformコマンドを再度実行します。以下は、シンプルな例です。

#!/bin/sh

max_attempts=3
attempt=1

while [ $attempt -le $max_attempts ]
do
  terraform apply -auto-approve
  if [ $? -eq 0 ]
  then
    break
  fi
  echo "Failed to apply, retrying in 10 seconds..."
  sleep 10
  attempt=$((attempt+1))
done

if [ $attempt -gt $max_attempts ]
then
  echo "Failed to apply after $max_attempts attempts, giving up"
  exit 1
fi

このスクリプトは、3回までterraform applyを試行し、成功するか最大試行回数に達するまでリトライします。

リトライ用のツールを使用する

Terraformを実行するためのサードパーティツールで、自動的にリトライする機能を提供しているものがあります。その一例が「terragrunt」というツールです。terragruntを使用する場合、以下のようなterragrunt.hclファイルを作成し、applyの前にリトライ回数などを設定します。

terraform {
  source = "./"
}

retryable_errors {
  errors = [
    "Error locking state",
    "Error applying plan",
    "Error refreshing state",
    "Error: No changes",
    "Error: Operation was cancelled",
  ]
  max_retries = 3
  retryable_min_timeout = "1m"
  retryable_max_timeout = "5m"
}

この設定では、apply時に特定のエラーが発生した場合に最大3回までリトライし、リトライの間隔は最低1分から最大5分までの間でランダムに決定されます。


以上が、Terraformでエラーが発生した場合にリトライする方法の一例です。ただし、リトライすることで問題が解決するとは限らないため、エラーが発生した原因を特定し、適切な対応を行うことが重要です。