🙆

tfstateの操作方法

2023/08/13に公開

背景

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

実行手順及び例

  1. 空のリソースを作成する
resource "aws_instance" "test" {
  
}
  1. 空のリソース名とインスタンスの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.
  1. 取り込んだリソースの詳細をチェック
$ 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"
  1. 3の結果から必要なパラメータを追加する
resource "aws_instance" "test" {
  ami = "ami-xxxxxx"
  instance_type = "t2.micro"
}

terraform 管理下のリソースを管理外にする

terraform state rm <adress>
adress:管理対象外にしたいリソース名

実行手順及び例

  1. tfファイルから対象のリソースを削除する
  2. rmコマンドでtfstateから削除する
$ terraform state rm aws_instance.test
Removed aws_instance.test
Successfully removed 1 resource instance(s).

Discussion