💨
【Terraform】S3+DynamoDB管理のtfstateを変更する際の注意点
はじめに
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