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

whe*_*ere 4 amazon-ec2 terraform

我正在使用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}"
}
Run Code Online (Sandbox Code Playgroud)

但是,未显示最重要的值(id,arn):

Outputs:

availability_zone = ap-southeast-2b
type = m4.large
Run Code Online (Sandbox Code Playgroud)

我有想念吗?

BMW*_*BMW 5

@jdurkin回答了问题,但没有告诉您如何获得它,这是您要的。

terraform文档并不总是使用所有属性进行更新(我称它们为available output variables)。在您的情况下,您无法从在线文档中找到要使用的正确属性。猜测可能是jdurkin的答案,但并不总是正确的。

因此,您需要自己找出它们并找到合适的一个。

(您可以使用自己喜欢的区域更改区域)

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

data "aws_instance" "ec2_my_admin_instance" {
  filter {
    name = "tag:TfServerType"
    values = ["myAdmin"]
  }
}
Run Code Online (Sandbox Code Playgroud)

terraform apply更改(它是数据源,不会创建任何资源,因此可以安全运行

terraform init
terraform plan
terraform apply
Run Code Online (Sandbox Code Playgroud)

成功运行上述命令后,应获取本地文件 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": []
        }
    ]
Run Code Online (Sandbox Code Playgroud)

  • ARN 自今天的 terraform aws 提供商版本起可用。这可能需要更新。 (2认同)

小智 2

对于 ID。该属性将是

output "theId" {
    value = "${data.aws_instance.ec2_my_admin_instance.id}"
}
Run Code Online (Sandbox Code Playgroud)

根据这些文档,该数据源看起来没有 arn 属性。https://www.terraform.io/docs/providers/aws/d/instance.html