我正在使用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
我错过了什么吗?
答案 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