🙆
tfstateの操作方法
背景
terraformを利用する中でクラウドに保存しているtfstateの参照や手動で作成したリソースをtfstateの管理下に置きたい場合などがあった。よって、以下にtfstateの取得、編集について調査したことを備忘録として残す。
tfstateファイルで管理しているリソースの一覧を確認
terraform state list
tfstateファイルで管理しているリソースの詳細情報を確認
terraform state show <address>
adress:詳細情報を確認したいリソース名
実行例
$ terraform state show aws_instance.app_server
# aws_instance.app_server:
resource "aws_instance" "app_server" {
ami = "ami-xxxxxxxxxxx"
arn = "xxxxxxxxxxxxxxxxx"
associate_public_ip_address = true
availability_zone = "ap-xxxxxx-xxxx"
cpu_core_count = 1
cpu_threads_per_core = 1
..........
tfstateファイルで管理しているリソースの名前を変更
terraform state mv <source> <destination>
source:移動元リソース
destination:移動先リソース
実行例
$ terraform state mv aws_instance.app_server aws_instance.app_server2
#実行結果
Move "aws_instance.app_server" to "aws_instance.app_server2"
Successfully moved 1 object(s).
terraform importによるコンソール上で作成したリソースの取り込み
terraform import <adress> <id>
adress:取り込み先のリソース名
id:取り込みたい稼働中のリソースID
実行手順及び例
- 空のリソースを作成する
resource "aws_instance" "test" {
}
- 空のリソース名とインスタンスのIDをいれてtfstateにコンソールで作ったインスタンスを取り込み
$ terraform import aws_instance.test i-03896c476be017f98
#実行結果
aws_instance.test: Importing from ID "i-03896c476be017f98"...
aws_instance.test: Import prepared!
Prepared aws_instance for import
aws_instance.test: Refreshing state... [id=i-03896c476be017f98]
Import successful!
The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.
- 取り込んだリソースの詳細をチェック
$ terraform state show aws_instance.test
#実行結果
# aws_instance.test:
resource "aws_instance" "test" {
ami = "ami-xxxxxx"
arn = "arn:aws:ec2:xxxxxxxxxxxxx"
associate_public_ip_address = true
availability_zone = "ap-xxxxxx-xx"
- 3の結果から必要なパラメータを追加する
resource "aws_instance" "test" {
ami = "ami-xxxxxx"
instance_type = "t2.micro"
}
terraform 管理下のリソースを管理外にする
terraform state rm <adress>
adress:管理対象外にしたいリソース名
実行手順及び例
- tfファイルから対象のリソースを削除する
- rmコマンドでtfstateから削除する
$ terraform state rm aws_instance.test
Removed aws_instance.test
Successfully removed 1 resource instance(s).
Discussion