tfstate
概要
実際に立ち上がったクラウドの情報が記載されている
tfstateは基本、一元管理して全ユーザーを同じtfstateファイルを参照するように運用していく
S3バケットで管理する方法もある
tfstateを一元管理する際は、誤って操作させないように、terraform管理対象とtfstateは別アカウントで管理する
S3バケット上にtfstatteをアップロードするアカウントは別にしておく
コマンド
terraform state list
tfstateで管理しているリソース一覧を確認する
terraform state show <リソース名>
tfstateで管理しているリソースの設定を変更する
terraform state mv <変更したいリソース> <実際に変更したい内容>
リソース名を変更する
1. terraform state mv {変えたいリソース} {変更後のリソース} を実行して、S3のtfstateファイルを更新する
2. この状態でterraform plan を押すと、コードとtfstateに差分が表示されるようになる
3. この差分をなくすために、コードを変更していく
4. 変更後に再度terraform planを実行して、差分がなくなればOK
terraform import <取り込みたいリソース名> <取り組みたいリソースID>
terraformで管理していないすでに稼働中のリソースをtfstateに取り組む時に使用
手動で作成したEC2をterraformファイルとtfstateに反映するなどで使用する
1. AWSマネコンで作成したEC2のインスタンスIDを取得する
2. terraformコードに空のリソースを作成する
code:main.tf
resource "aws_instance" "test" {
}
3. tfstateを更新するコマンドを実行する
code:sh
terraform import aws_instance.test {手動で作成してEC2のインスタンスID}
terraform state rm <削除したいリソース>
tfstateで管理しているリソースを削除する
実際にリソースを削除する時には、tfstateだけではなくterraformファイル側にも反映しないといない
1. terraformコード上でリソースを削除する
2. tfstateをコマンドを使って更新する
code:main.tf
terraform state rm aws_instance.test
terraform refresh
最新のリソース状態をtfstateに反映する
AWSマネコンを手動で修正して、terraform refreshしてtfstateが更新されると、terraformコードと差分発生するようになる
tfstateをGit管理しない理由
ロックがないので、terraform applyした環境毎でファイルが更新されてそれぞれの環境でtfstateが作成されてしまう
リソースIDなどが格納されるので、機密情報が格納されている
参考