💨

【Terraform】S3+DynamoDB管理のtfstateを変更する際の注意点

2024/10/08に公開

はじめに

Terraformでリソースを削除する際に依存関係の順番で、
tfstate内と現実のリソース間で差分が発生することありますよね。

ローカル環境ではtfstateを編集→terraform planで差分を消すことができますが、
S3+DynamoDB管理ではLockIDがしっかり働いてくれて実行不可能になる場合があります。

S3+DynamoDB管理でtfstateを直接直したらTerraformが動かなくなった・・・
みたいなときに見てもらえると幸いです。

解決策

下記の順序で切り戻し、差分の解消をします。

  • 編集前のtfstateをS3に再度アップロード
  • terraform planが実行可能か確認
    • 差分でエラーが発生している状態に戻す
  • terraform state listでtfstateから消したい管理リソースidを取得する
  • terraform state rm <リソースid>でtfstateから管理リソースを削除
  • terraform planが実行可能か確認

エラーの原因

S3にあるtfstateファイルをVSCode・Vim等で直接編集するとDynamoDBのLockIDで差分が発生するため。
terraform state経由で削除をするとDynamoDBのLockIDも更新されてエラーが発生しなくなる。

所感

  • APIを使ってtfstateは操作しよう。下手に触れるからとムチャをしてはいけない。
  • S3のバージョン管理は必ずOnにしときましょう。
    • 差分エラーが発生しているファイルをロストすると切り戻しができず、、いよいよ戦いが始まるため・・・

Discussion