Terraformのコードを書いていて「このリソースの◯◯の値は何ていうプロパティ名だっけ」というときに、 適用済みのリソースから確認したい場合。

terraform show

terraform showで適用済みの全リソースの情報を確認できる。

$ terraform show
# aws_iam_instance_profile.instance_profile:
resource "aws_iam_instance_profile" "instance_profile" {
    arn         = "arn:aws:iam::XXXXXXXXXXXXXX:instance-profile/test"
    create_date = "2023-10-20T13:33:06Z"
    id          = "test"
    name        = "test"
    path        = "/"
    role        = "test"
    tags_all    = {
        "Project" = "test"
    }
    unique_id   = "XXXXXXXXXXXXXXXXXXXXXXXXXX"
}

# aws_iam_policy_attachment.instance_profile_policy_attachment:
resource "aws_iam_policy_attachment" "instance_profile_policy_attachment" {
    id         = "test"
    name       = "test"
    policy_arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
    roles      = [
        "test",
    ]
}

例えば特定のEC2インスタンスのインスタンスIDの値はどうやって取ればいいのかを確認したければ、リソースaws_instanceを探し、 その中からインスタンスIDらしい値を持っているプロパティを探せばよい。

$ terraform show
# aws_instance.host:
resource "aws_instance" "host" {
    ami                                  = "ami-0000000000000"
    arn                                  = "arn:aws:ec2:ap-northeast-1:XXXXXXXXXXXXXX:instance/i-000000000000000000"
    associate_public_ip_address          = true
    availability_zone                    = "ap-northeast-1c"
    cpu_core_count                       = 1
    cpu_threads_per_core                 = 2
    disable_api_stop                     = false
    disable_api_termination              = false
    ebs_optimized                        = false
    get_password_data                    = false
    hibernation                          = false
    iam_instance_profile                 = "test"
    id                                   = "i-0000000000000" # ← ここがインスタンスID
    instance_initiated_shutdown_behavior = "stop"
    instance_state                       = "running"
    instance_type                        = "t3.large"

上記を確認すればインスタンスIDのプロパティ名はidであることが確認できる。
参照する場合はaws_instance.リソース名.idとすればよい。

terraform state show

terraform state showコマンドを使用すれば、指定したリソースだけの情報を確認できる。

$ terraform state show aws_instance.host
# aws_instance.host:
resource "aws_instance" "host" {
    ami                                  = "ami-0000000000000"
    arn                                  = "arn:aws:ec2:ap-northeast-1:XXXXXXXXXXXXXX:instance/i-000000000000000000"
    associate_public_ip_address          = true
    availability_zone                    = "ap-northeast-1c"
    cpu_core_count                       = 1
    cpu_threads_per_core                 = 2
    disable_api_stop                     = false
    disable_api_termination              = false
    ebs_optimized                        = false
    get_password_data                    = false
    hibernation                          = false
    iam_instance_profile                 = "test"
    id                                   = "i-0000000000000"
    instance_initiated_shutdown_behavior = "stop"
    instance_state                       = "running"
    instance_type                        = "t3.large"

terraform showコマンドとは異なり、指定したリソースだけの情報だけを取得している。

リソース名をうろ覚えの場合はterraform state listコマンドで確認できる。

$ terraform state list | grep aws_instance
aws_instance.host

こうして探したリソース名でterraform state showコマンドを実行すればよい。