概要
バックアップ取ってないのに, tfstate消しちゃった~
どうしよう~
となった時にどうするのか書いてみます。
とはいったものの
- tfstateはしっかりバックアップをとる(弄る時は)
- S3で管理している場合はバージョニングをした方がよい
- AWS Backupでも良いかも
ということにつきます。
tfstateの挙動については下記の記事がすごく参考になります。
https://chroju.dev/blog/terraform_state_introduction
実際どうなるのか
terraformの管理下から外れるので,
手動で作成したリソースと同じになります。
この状態で terraform apply
をすると,
同じ構成のリソースができるか, 名前被りで失敗します。
terraform destroy
ももちろんできないので,
リソースを手動で削除するしかないです。
厳しいです。
戻すにはどうすればよいのか
元のtfstateの構成にもどす
か
諦めて既存リソースを手動で消して作り直す
しかないはずです。(というかこれしか思いつかなかった)
(他の方法あったら教えてください〜〜〜🙇)
消してしまったファイルと, 同じ中身を作り上げれば良いという話ですが,
正直めっちゃきついです。
諦めて既存リソースを手動で消して作り直すのもめっちゃ大変です。
消してしまったファイルと, 同じ中身を作り上げる方法はちょっと掘り下げます。
消してしまったファイルと, 同じ中身を作り上げるには
全く何もない状態から作り上げるのは正直無理だと思ってます。
中の構成をある程度知っていたとしても細かい書き方まで再現するのは非現実的だと思います。
そこで, もし消してしまった環境とは別のterraformで作成した開発環境がある場合は,
なんとかなる可能性が高いです。
方法としては、
その開発環境のtfstateファイルを元に,
ファイルの中身をチューニングして元に戻す手法です。
AWSコンソール, AWS CLIを駆使して,
各種リソースのIDなどの情報を得ながら書き換えていきます。
書き換えたら terraform plan
で差分を確認します。
No Changeになるまでやります。
他の開発環境がない場合は厳しいです。
さいごに
tfstateファイルをバックアップなしで消してしまったら絶望ですが,
なんとかなる場合もあります。
ただ, ある程度実際のリソースの構成を知っていたり,
サービスそのものの知識がないときついはずです。
まじでバックアップ取った方が良いです。