terraform - 使用 Terraform 从 AMI 获取附加卷 device_name
问题描述
有一个带有附加卷的 AMI,需要获取 device_name 这个附加卷。
我的地形代码:
data "aws_ami" "example" {
owners = [270245543446]
}
output "example1" {
value = data.aws_ami.example.block_device_mappings
}
输出是:
example1 = [
{
"device_name" = "/dev/sda1"
"ebs" = {
"delete_on_termination" = "false"
"encrypted" = "false"
"iops" = "0"
"snapshot_id" = "snap-0b4eedb04c8976458"
"volume_size" = "8"
"volume_type" = "gp2"
}
"no_device" = ""
"virtual_name" = ""
},
{
"device_name" = "/dev/sde"
"ebs" = {
"delete_on_termination" = "false"
"encrypted" = "false"
"iops" = "0"
"snapshot_id" = ""
"volume_size" = "8"
"volume_type" = "gp2"
}
"no_device" = ""
"virtual_name" = ""
},
]
就我而言,我需要获得输出 - “/dev/sde”。请帮助找到解决方案。
我也尝试过
value = data.aws_ami.example.block_device_mappings["/dev/sde"].device_name
,但在这种情况下,我应该知道需要的 device_name。
无法完全理解#
这里的含义https://www.terraform.io/docs/providers/aws/d/ami.html#block_device_mappings-device_name
解决方案
我的解决方案:如果我们将动态块与 for_each 一起使用,我们可以防止向 AMI 添加额外的卷并使所有卷都加密。
dynamic "ebs_block_device" {
for_each = [
for i in data.aws_ami.example.block_device_mappings: {
device_name = i.device_name
}
if i.device_name != data.aws_ami.example.root_device_name
]
content {
device_name = ebs_block_device.value.device_name
encrypted = true
}
推荐阅读
- c# - c#: 使用 bool = !bool 出现奇怪的模式
- python - Python 熊猫 KeyError
- r - 如何使用 R 中的 Kable 在乳胶文档的单个单元格中的文本前面添加空格?
- python - 使用 pynput 获取鼠标位置
- android - Android - 无法为应用特定存储中的文件打开 FileOutputStream
- winforms - 错误:browser_gpu_channel_host_factory.cc(167)] 无法在 CefSharp 中启动 GPU 进程
- javascript - Javascript - 如何从正则表达式而不是 [Object object] 返回字符串
- makefile - make 中的 HISMAKEFILE 变量是什么
- python - 从Python中每行中具有不同数量组件的文件中读取数据
- python - 如何使用 Python 的子实例调用在子中重载的父方法