terraform 输出多个 aws ebs_volumes
terraform output multiple aws ebs_volumes
$ terraform --version
Terraform v0.11.7
+ provider.aws v1.28.0
我想知道是否可以从 AWS 实例输出所有 ebs 卷。
我有一个 main.tf 以下内容:
data "aws_instance" "kafka_nodes" {
filter {
name = "tag:Name"
values = ["mykas00*"]
}
}
output "block_devs" {
value = "${data.aws_instance.kafka_nodes.ebs_block_device}"
}
以上仅打印一卷,但我已通过 AWS CLI
验证该实例有多个卷
它只打印一卷,因为你在数据源中只设置了一卷。如果您检查状态文件,您可能会看到它只列出了 1 个设备,即使连接了多个设备。
您需要为每个卷设置一个数据源。但是,这意味着您已经知道卷的数量。所以,这可能不是要走的路。
获取附加到任何给定实例的所有卷的列表的一种方法是使用实例资源以及实例 ID、ami 和实例类型。使用 terraform import 将实例导入状态。然后使用 terraform refresh 显示附加到实例的所有卷。
改变
data "aws_instance" "kafka_nodes" {
filter {
name = "tag:Name"
values = ["mykas00*"]
}
}
output "block_devs" {
value = "${data.aws_instance.kafka_nodes.ebs_block_device}"
}
至
resource "aws_instance" "kafka_nodes" {
ami = "<INSTANCE_AMI>"
instance_type = "<INSTANCE_TYPE>"
tags {
Name = "mykas00"
}
}
output "block_devs" {
value = ["${aws_instance.kafka_nodes.ebs_block_device}"]
}
如果您还想列出根设备,请添加以下内容
output "root_dev" {
value = ["${aws_instance.kafka_nodes.root_block_device}"]
}
然后做
terraform import aws_instance.kafka_nodes [instance_id]
terraform refresh
您应该会看到连接到实例的所有设备的列表,类似于:
block_instance_devs = [
{
delete_on_termination = 0,
device_name = /dev/sdc,
encrypted = 0,
iops = 100,
snapshot_id = ,
volume_id = vol-0ceea4f464a24d86a,
volume_size = 8,
volume_type = gp2
},
{
delete_on_termination = 0,
device_name = /dev/sdb,
encrypted = 0,
iops = 100,
snapshot_id = ,
volume_id = vol-0c0608cf0126f0b2b,
volume_size = 8,
volume_type = gp2
},
{
delete_on_termination = 0,
device_name = /dev/sdd,
encrypted = 0,
iops = 100,
snapshot_id = ,
volume_id = vol-0fe3c4c67bedf0e9e,
volume_size = 8,
volume_type = gp2
}
]
如果您为其添加了部分,甚至是根设备。
root_dev = [
{
delete_on_termination = 1,
iops = 100,
volume_id = vol-0197cdd29d212c642,
volume_size = 8,
volume_type = gp2
}
]
$ terraform --version
Terraform v0.11.7
+ provider.aws v1.28.0
我想知道是否可以从 AWS 实例输出所有 ebs 卷。
我有一个 main.tf 以下内容:
data "aws_instance" "kafka_nodes" {
filter {
name = "tag:Name"
values = ["mykas00*"]
}
}
output "block_devs" {
value = "${data.aws_instance.kafka_nodes.ebs_block_device}"
}
以上仅打印一卷,但我已通过 AWS CLI
验证该实例有多个卷
它只打印一卷,因为你在数据源中只设置了一卷。如果您检查状态文件,您可能会看到它只列出了 1 个设备,即使连接了多个设备。
您需要为每个卷设置一个数据源。但是,这意味着您已经知道卷的数量。所以,这可能不是要走的路。
获取附加到任何给定实例的所有卷的列表的一种方法是使用实例资源以及实例 ID、ami 和实例类型。使用 terraform import 将实例导入状态。然后使用 terraform refresh 显示附加到实例的所有卷。
改变
data "aws_instance" "kafka_nodes" {
filter {
name = "tag:Name"
values = ["mykas00*"]
}
}
output "block_devs" {
value = "${data.aws_instance.kafka_nodes.ebs_block_device}"
}
至
resource "aws_instance" "kafka_nodes" {
ami = "<INSTANCE_AMI>"
instance_type = "<INSTANCE_TYPE>"
tags {
Name = "mykas00"
}
}
output "block_devs" {
value = ["${aws_instance.kafka_nodes.ebs_block_device}"]
}
如果您还想列出根设备,请添加以下内容
output "root_dev" {
value = ["${aws_instance.kafka_nodes.root_block_device}"]
}
然后做
terraform import aws_instance.kafka_nodes [instance_id]
terraform refresh
您应该会看到连接到实例的所有设备的列表,类似于:
block_instance_devs = [
{
delete_on_termination = 0,
device_name = /dev/sdc,
encrypted = 0,
iops = 100,
snapshot_id = ,
volume_id = vol-0ceea4f464a24d86a,
volume_size = 8,
volume_type = gp2
},
{
delete_on_termination = 0,
device_name = /dev/sdb,
encrypted = 0,
iops = 100,
snapshot_id = ,
volume_id = vol-0c0608cf0126f0b2b,
volume_size = 8,
volume_type = gp2
},
{
delete_on_termination = 0,
device_name = /dev/sdd,
encrypted = 0,
iops = 100,
snapshot_id = ,
volume_id = vol-0fe3c4c67bedf0e9e,
volume_size = 8,
volume_type = gp2
}
]
如果您为其添加了部分,甚至是根设备。
root_dev = [
{
delete_on_termination = 1,
iops = 100,
volume_id = vol-0197cdd29d212c642,
volume_size = 8,
volume_type = gp2
}
]