amazon-ec2 - Terraform 快照不适用于 ebs_block_device 的动态块
问题描述
我创建了一些带有“ ResourceName -”Master-Node-1-SNAP、mount-/X01 或 XO2”等标签的 EBS 快照(标签中只有 1 个值),我想在创建 EC2 时动态使用这些快照.在我的场景中,我必须创建 6 个主节点和 2 个边缘节点。
例如,当我想创建主节点 1。我想过滤属于主节点 1 的快照,然后需要确定快照应该挂载为 /x01 还是 /x02。
我创建了与 terraform 输出一起使用的示例逻辑。但是当我将它应用于 EC2 模块时,它会给出如下错误
调用函数“元素”失败:不能将元素函数与空列表一起使用。
我的模块代码如下。
data "aws_ebs_snapshot" "ebs_volume" {
for_each = toset(local.pre_snapshot_ids)
snapshot_ids = [each.value]
}
resource "aws_instance" "this" {
count = var.instance_count
Dynamic Block,在snapshot_id中,需要找到正确的ID
dynamic "ebs_block_device" {
for_each = var.ebs_block_device
content {
delete_on_termination = lookup(ebs_block_device.value, "delete_on_termination", null)
device_name = ebs_block_device.value.device_name
encrypted = lookup(ebs_block_device.value, "encrypted", null)
iops = lookup(ebs_block_device.value, "iops", null)
kms_key_id = lookup(ebs_block_device.value, "encrypted", null) == "true" ? var.kms_key_id : null
# snapshot_id = lookup(ebs_block_device.value, "snapshot_id", null)
snapshot_id = element([
for val in data.aws_ebs_snapshot.ebs_volume : val.id
if "${val.tags["mount"]}" == tostring(lookup(ebs_block_device.value, "mount", null))
&&
tostring(element(split("-", "${val.tags["ResourceName"]}"), length(split("-", "${val.tags["ResourceName"]}"))-2)) == "${tostring(count.index + 1)}"
],0)
volume_size = lookup(ebs_block_device.value, "volume_size", null)
volume_type = lookup(ebs_block_device.value, "volume_type", null)
示例 ebs_block_device 值
master_ebs_block_device = [
{
device_name = "/dev/sdb"
encrypted = true
volume_type = "gp2"
volume_size = 100
mount = "/x01"
},
{
device_name = "/dev/sdc"
encrypted = true
volume_type = "gp2"
volume_size = 500
mount = "/x02"
},
]
解决方案
推荐阅读
- java - forEach lambda 会导致竞争条件吗?
- c# - WPF:优化具有 5000 多个元素的 Canvas 的加载时间和内存使用情况
- pandas - 在 Pandas 中获取按索引分组的单个值的计数
- angular - 从 api ionic angular 4 提取数据和解析
- cakephp - CakePHP 3:缺少翻译字符串的翻译数据顺序
- java - 如何防止HPACK解压失败?
- swift - 在 if else 错误中返回值
- haskell - 你将如何在 Haskell 中声明这些函数的类型?
- android - 势不可挡的服务不工作
- java - Spring security:身份验证管理器和全局安全配置,带有来自 xml config 的 Java 配置