如何通过Terraform获取现有EC2实例的实例ID/ARN?

5

我正在使用Terraform进行一些基础设施部署:

data "aws_instance" "ec2_my_admin_instance" {
  filter {
    name = "tag:TfServerType"
    values = ["myAdmin"]
  }
}


output "theId" {
  value = "${data.aws_instance.ec2_my_admin_instance.instance_id}"
}
output "type" {
  value = "${data.aws_instance.ec2_my_admin_instance.instance_type}"
}
output "placement_group" {
  value = "${data.aws_instance.ec2_my_admin_instance.placement_group}"
}
output "availability_zone" {
  value = "${data.aws_instance.ec2_my_admin_instance.availability_zone}"
}
output "arn" {
  value = "${data.aws_instance.ec2_my_admin_instance.arn}"
}

然而,最重要的值(id、arn)没有显示:

Outputs:

availability_zone = ap-southeast-2b
type = m4.large

我有遗漏什么吗?
2个回答

6

@jdurkin回答了这个问题,但没有告诉你如何获取你所需要的内容。

terraform文档并不总是更新所有属性(我称之为可用输出变量)。在你的情况下,你无法从在线文档中找到正确的属性来使用。像jdurkin的答案一样猜测可能是有可能的,但并不总是正确的。

因此,你需要自己找到它们并找到正确的属性。

(你可以用你喜欢的区域更改区域)

provider "aws" {
  region = "ap-southeast-2"
}

data "aws_instance" "ec2_my_admin_instance" {
  filter {
    name = "tag:TfServerType"
    values = ["myAdmin"]
  }
}

terraform apply 应用变更(它是数据源,不会创建任何资源,所以您可以放心运行

terraform init
terraform plan
terraform apply

当你成功运行以上命令后,你应该会得到一个本地文件terraform.tfstate

查看文件,在attributes的部分,你应该能够看到所有属性及其名称和值,id在属性列表中,但现在你无法确认是否存在arn属性。你应该有信心选择正确的属性并将其放入你的输出代码中。

"modules": [
        {
            "path": [
                "root"
            ],
            "outputs": {},
            "resources": {
                "data.aws_instance.ec2_my_admin_instance": {
                    "type": "aws_instance",
                    "depends_on": [],
                    "primary": {
                        "id": "i-xxxx",
                        "attributes": {
                            "ami": "ami-xxxx",
                            ....
                            "id": "i-xxxx",
                            "instance_state": "running",
                            ....
                        },
                        "meta": {},
                        "tainted": false
                    },
                    "deposed": [],
                    "provider": ""
                }
            },
            "depends_on": []
        }
    ]

2
ARN已经在今天的terraform aws提供程序发布中可用。这可能需要更新。 - Jakub Kania

2

我已经在 GitHub 上创建了一个问题,以添加 ARN 作为属性,因为我来到这里是想看看是否有其他人遇到了同样的问题!(链接:https://github.com/terraform-providers/terraform-provider-aws/issues/5425) - Tim Malone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接