如何通过terraform获取现有ec2实例的实例id / arn?

时间:2017-10-02 01:43:09

标签: 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}"
}

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

Outputs:

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

我错过了什么吗?

2 个答案:

答案 0 :(得分: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"]
  }
}

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

terraform init
terraform plan
terraform apply

成功运行上述命令后,您应该获得本地文件terraform.tfstate

Cat文件,部分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": []
        }
    ]

答案 1 :(得分:2)

为id。属性将是

output "theId" {
    value = "${data.aws_instance.ec2_my_admin_instance.id}"
}

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