动态更改 terraform 资源的参数
Dynamically change the argument for the terraform resource
我有两组不同的帐户,其中创建了 kms 密钥。
kms 密钥创建是通过 ci pipeline 处理的,两组帐户都有不同的管道,
现在想将这两个管道合并为一个,因此所有资源创建都将来自单个 terraform 管道。
一组帐户在创建 kms 密钥时使用 name
,而其他帐户使用 name_prefix
。
resource "aws_kms_alias" "backup_alias" {
count = var.create == true ? 1 : 0
name = "alias/backup-key"
name_prefix = "alias/${var.target_infra}-backup-key-"
target_key_id = aws_kms_key.backup.0.key_id
}
resource "aws_kms_alias" "backup_alias" {
count = var.create == true ? 1 : 0
name = "alias/backup-key-"
target_key_id = aws_kms_key.backup.0.key_id
}
我想为两个帐户保留相同的代码,因此考虑使用动态块,但它无济于事,因为它是块级别,而不是变量级别。
尝试如下操作:
resource "aws_kms_alias" "backup_alias" {
count = var.create == true ? 1 : 0
#name = var.is_lz == "enabled" ? "alias/${var.target_infra}-backup-key-" : "alias/backup-key"
dynamic "name" {
for_each = var.is_lz == "enabled" ? 0 : 1
content {
name = "alias/backup-key"
}
}
dynamic "name_prefix" {
for_each = var.is_lz == "enabled" ? 1 : 0
content {
name_prefix = "alias/${var.target_infra}-backup-key-"
}
}
target_key_id = aws_kms_key.backup.0.key_id
}
但它不起作用。
有什么办法可以让两者都在同一个资源中吗?
您正在使用 0
和 1
,就像您使用 count
一样。当您使用 for_each
时,您应该使用包含 0 或 1 个元素的列表。
resource "aws_kms_alias" "backup_alias" {
count = var.create == true ? ["1"] : []
#name = var.is_lz == "enabled" ? "alias/${var.target_infra}-backup-key-" : "alias/backup-key"
dynamic "name" {
for_each = var.is_lz == "enabled" ? [] : ["1"]
content {
name = "alias/backup-key"
}
}
dynamic "name_prefix" {
for_each = var.is_lz == "enabled" ? 1 : 0
content {
name_prefix = "alias/${var.target_infra}-backup-key-"
}
}
target_key_id = aws_kms_key.backup.0.key_id
}
我有两组不同的帐户,其中创建了 kms 密钥。 kms 密钥创建是通过 ci pipeline 处理的,两组帐户都有不同的管道, 现在想将这两个管道合并为一个,因此所有资源创建都将来自单个 terraform 管道。
一组帐户在创建 kms 密钥时使用 name
,而其他帐户使用 name_prefix
。
resource "aws_kms_alias" "backup_alias" {
count = var.create == true ? 1 : 0
name = "alias/backup-key"
name_prefix = "alias/${var.target_infra}-backup-key-"
target_key_id = aws_kms_key.backup.0.key_id
}
resource "aws_kms_alias" "backup_alias" {
count = var.create == true ? 1 : 0
name = "alias/backup-key-"
target_key_id = aws_kms_key.backup.0.key_id
}
我想为两个帐户保留相同的代码,因此考虑使用动态块,但它无济于事,因为它是块级别,而不是变量级别。
尝试如下操作:
resource "aws_kms_alias" "backup_alias" {
count = var.create == true ? 1 : 0
#name = var.is_lz == "enabled" ? "alias/${var.target_infra}-backup-key-" : "alias/backup-key"
dynamic "name" {
for_each = var.is_lz == "enabled" ? 0 : 1
content {
name = "alias/backup-key"
}
}
dynamic "name_prefix" {
for_each = var.is_lz == "enabled" ? 1 : 0
content {
name_prefix = "alias/${var.target_infra}-backup-key-"
}
}
target_key_id = aws_kms_key.backup.0.key_id
}
但它不起作用。 有什么办法可以让两者都在同一个资源中吗?
您正在使用 0
和 1
,就像您使用 count
一样。当您使用 for_each
时,您应该使用包含 0 或 1 个元素的列表。
resource "aws_kms_alias" "backup_alias" {
count = var.create == true ? ["1"] : []
#name = var.is_lz == "enabled" ? "alias/${var.target_infra}-backup-key-" : "alias/backup-key"
dynamic "name" {
for_each = var.is_lz == "enabled" ? [] : ["1"]
content {
name = "alias/backup-key"
}
}
dynamic "name_prefix" {
for_each = var.is_lz == "enabled" ? 1 : 0
content {
name_prefix = "alias/${var.target_infra}-backup-key-"
}
}
target_key_id = aws_kms_key.backup.0.key_id
}