在 Terraform for Cloud 运行 中创建动态秘密变量块
Creating a dynamic secret variable block within Terraform for Cloud Run
我正在尝试根据字符串列表动态创建以下块
env {
name = "SECRET_ENV_VAR"
value_from {
secret_key_ref {
name = google_secret_manager_secret.secret.secret_id
key = "1"
}
}
}
我想动态添加Secrets,并定义了以下动态块:
dynamic "env" {
for_each = toset(var.secrets)
content {
name = each.value
value_from {
secret_key_ref {
name = each.value
key = "1"
}
}
}
}
其中secrets
是list(string)类型的变量
但是,这会引发错误:Blocks of type "value_from" are not expected here.
我不确定我遗漏了什么,或者我在哪里错误地指定了 value_from 块。
有人可以指出正确的方向来解决这个问题吗?
更新;
我还尝试按照此 post 评论中的建议将此变量实现为地图。 (https://www.terraform.io/docs/language/expressions/dynamic-blocks.html#multi-level-nested-block-structures)
dynamic "env" {
for_each = var.secrets
content {
name = each.key
dynamic "value_from" {
for_each = env.value.name
secret_key_ref {
name = value_from.value.name
key = value_from.value.version
}
}
}
}
但是,这也给出了同样的错误。 Blocks of type "value_from" are not expected here.
在此示例中,secrets 变量被定义为具有此值的列表(任意):
secrets = [
{
name = "SECRET"
version = "1"
}
]
您必须升级您的 gcp 提供程序。在 v3.67.0 中添加了对 google_cloud_run_service
中的秘密的支持。当前版本是 v4.1.0
,这意味着您必须使用非常旧的 gcp 提供程序。
最后,我通过将变量类型更改为 map(any) 解决了这个问题:
secrets = {
"SECRET" = "1"
}
这使我能够创建“动态”env 块,而无需实现嵌套动态块。
我正在尝试根据字符串列表动态创建以下块
env {
name = "SECRET_ENV_VAR"
value_from {
secret_key_ref {
name = google_secret_manager_secret.secret.secret_id
key = "1"
}
}
}
我想动态添加Secrets,并定义了以下动态块:
dynamic "env" {
for_each = toset(var.secrets)
content {
name = each.value
value_from {
secret_key_ref {
name = each.value
key = "1"
}
}
}
}
其中secrets
是list(string)类型的变量
但是,这会引发错误:Blocks of type "value_from" are not expected here.
我不确定我遗漏了什么,或者我在哪里错误地指定了 value_from 块。
有人可以指出正确的方向来解决这个问题吗?
更新; 我还尝试按照此 post 评论中的建议将此变量实现为地图。 (https://www.terraform.io/docs/language/expressions/dynamic-blocks.html#multi-level-nested-block-structures)
dynamic "env" {
for_each = var.secrets
content {
name = each.key
dynamic "value_from" {
for_each = env.value.name
secret_key_ref {
name = value_from.value.name
key = value_from.value.version
}
}
}
}
但是,这也给出了同样的错误。 Blocks of type "value_from" are not expected here.
在此示例中,secrets 变量被定义为具有此值的列表(任意):
secrets = [
{
name = "SECRET"
version = "1"
}
]
您必须升级您的 gcp 提供程序。在 v3.67.0 中添加了对 google_cloud_run_service
中的秘密的支持。当前版本是 v4.1.0
,这意味着您必须使用非常旧的 gcp 提供程序。
最后,我通过将变量类型更改为 map(any) 解决了这个问题:
secrets = {
"SECRET" = "1"
}
这使我能够创建“动态”env 块,而无需实现嵌套动态块。