我有以下 SSM 资源:
resource aws_ssm_parameter private_key {
name = var.name
type = "SecureString"
value = var.key
overwrite = true
tags = var.tags
}
我无法控制提供的 var.key
的值,并且每次 terraform 运行时它都会更改。但是我需要能够根据某些条件(例如 bool 变量 var.overwrite_old_value
)阻止值更新。
我不能使用 overwrite =
属性,因为如果它设置为 false
terraform 将抛出异常试图覆盖该值
我不能使用 lifecycle { ignore_chanes = [...] }
,因为它需要静态属性值并且不接受变量、函数等。
有没有办法做到这一点?
答案 0 :(得分:1)
这不是 terraform 的工作方式,但您可以直接使用 aws api 实现此行为。
在这种情况下,每次运行计划时,您都应该输入 var.key
和 var.overwrite
,它们是 bool 变量,它告诉 terraform 是否需要执行更新密钥的脚本。>
resource "null_resource" "update_private_key" {
count = var.overwrite ? 1 : 0
provisioner "local-exec" {
command = "aws ssm put-parameter --name \"mykey\" --type \"SecureString\" --value ${var.key} --overwrite"
}
}
答案 1 :(得分:0)
好的,我找到了方法
data aws_ssm_parameter private_key {
name = var.name
}
resource aws_ssm_parameter private_key {
name = var.name
type = "SecureString"
value = var.overwrite_old_values? var.key : data.aws_ssm_parameter.private_key.value
overwrite = true
tags = var.tags
}
如果标志设置为覆盖 - 我正在分配新值,否则来自 SSM 参数本身的值,将其用作数据源(必须添加一些额外的检查,以便在创建参数之前不使用数据源,但它有效)。