gpt4 book ai didi

json - 在 Terraform 变量中使用 JSON 格式的字符串

转载 作者:行者123 更新时间:2023-12-04 07:22:51 26 4
gpt4 key购买 nike

我正在 Terraform 版本 0.14.15 上使用 for_each 方法创建一些资源。该资源有一个属性,input_parameters,它接受一个 JSON 格式的字符串作为它的值。我在使用单独对象的 map 变量中定义此值。我指定为 JSON 格式的字符串的值,执行时出现错误,我需要声明一个字符串。任何有关修复此错误的见解都会有所帮助。下面是我声明资源和变量的方式。

资源

resource "aws_config_config_rule" "managed_rules" {
for_each = var.managed_rules
name = each.value.name
description = each.value.description
input_parameters = each.value.input_parameters

source {
owner = each.value.owner
source_identifier = each.value.source_identifier
}

depends_on = [aws_config_configuration_recorder.config_recorder]
}

可变

variable "managed_rules" {
type = map(object({
name = string
description = string
owner = string
source_identifier = string
# Is there a variable for strings in JSON format?
input_parameters = string
}))
default = {
"1" = {
name = "alb-http-to-https-redirection-check"
description = "Checks whether HTTP to HTTPS redirection is configured on all HTTP listeners of Application Load Balancers. The rule is NON_COMPLIANT if one or more HTTP listeners of Application Load Balancer do not have HTTP to HTTPS redirection configured."
owner = "AWS"
source_identifier = "ALB_HTTP_TO_HTTPS_REDIRECTION_CHECK"
input_parameters = {
"MaximumExecutionFrequency" : "TwentyFour_Hours",
}
}

错误

This default value is not compatible with the variable's type constraint:
element "2": attribute "input_parameters": string required.

在使用 jsonencode 函数更新代码并将 input_parameters 更改为 any 后,这是错误:

    This default value is not compatible with the variable's type constraint:
collection elements cannot be unified.

最佳答案

这里发生了一些事情:

  1. 资源要求input_parameters是JSON编码的字符串
  2. 你的变量类型是字符串
  3. 您将一个对象类型传递给只接受字符串类型的变量

所以 (2) 和 (3) 是矛盾的。在某些时候,您必须将对象转换为 JSON 字符串。您可以在将其作为输入变量传递之前执行此操作,或者更改您的输入变量以接受对象并在将对象提供给资源时将其转换为 JSON。

我会选择第二个选项,因为将对象而不是字符串传递到模块中更直观。所以,试试这个:

resource "aws_config_config_rule" "managed_rules" {
for_each = var.managed_rules
name = each.value.name
description = each.value.description
input_parameters = jsonencode(each.value.input_parameters)

source {
owner = each.value.owner
source_identifier = each.value.source_identifier
}

depends_on = [aws_config_configuration_recorder.config_recorder]
}


variable "managed_rules" {
type = map(object({
name = string
description = string
owner = string
source_identifier = string
# Is there a variable for strings in JSON format?
input_parameters = any
}))
default = {
"1" = {
name = "alb-http-to-https-redirection-check"
description = "Checks whether HTTP to HTTPS redirection is configured on all HTTP listeners of Application Load Balancers. The rule is NON_COMPLIANT if one or more HTTP listeners of Application Load Balancer do not have HTTP to HTTPS redirection configured."
owner = "AWS"
source_identifier = "ALB_HTTP_TO_HTTPS_REDIRECTION_CHECK"
input_parameters = {
"MaximumExecutionFrequency" : "TwentyFour_Hours",
}
}

请注意,我在资源的 input_parameters 中使用了 jsonencode 并将该字段的变量类型更改为 any(因此它会接受任何结构的对象)。

关于json - 在 Terraform 变量中使用 JSON 格式的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68386312/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com