Terraform配置aws_cloudfront_cache_policy传递多个cookie至cookies_config报错
问题原因
报错的核心是dynamic "cookies"块的for_each逻辑错误:cookies_config嵌套结构下最多仅允许存在1个cookies块,你直接将cookies_to_forward列表作为for_each的遍历对象,当列表长度为2时,Terraform会生成2个cookies块,自然触发「属性最多支持1个项,但声明了2个」的报错。你传入单个cookie时恰好只生成1个cookies块,所以能正常运行,但本质逻辑仍然存在问题。
官方文档中提到的items支持列表,是指单个cookies块内的items字段可以传入多值列表,而非允许声明多个cookies块,你的用法混淆了dynamic块的遍历对象和items字段的取值范围。
解决方法
调整cookies、headers、query_strings三个dynamic块的for_each逻辑:仅当需要转发的配置列表不为空时,生成1个对应块,而非遍历列表生成多个块。
修改后的配置示例如下:
resource "aws_cloudfront_cache_policy" "this" { name = lookup(local.cache_policy, local.cache_policy.name, local.cache_policy_name) comment = local.cache_policy.comment default_ttl = local.cache_policy.default_ttl max_ttl = local.cache_policy.max_ttl min_ttl = local.cache_policy.min_ttl parameters_in_cache_key_and_forwarded_to_origin { cookies_config { cookie_behavior = local.cache_policy.cookie_behavior dynamic "cookies" { # 列表不为空时仅生成1个cookies块 for_each = length(local.cache_policy.cookies_to_forward) > 0 ? [1] : [] content { items = local.cache_policy.cookies_to_forward } } } headers_config { header_behavior = local.cache_policy.header_behavior dynamic "headers" { for_each = length(local.cache_policy.headers_to_forward) > 0 ? [1] : [] content { items = local.cache_policy.headers_to_forward } } } query_strings_config { query_string_behavior = local.cache_policy.query_string_behavior dynamic "query_strings" { for_each = length(local.cache_policy.query_strings_to_forward) > 0 ? [1] : [] content { items = local.cache_policy.query_strings_to_forward } } } } }
内容的提问来源于stack exchange,提问作者yossarian2004
相关产品推荐
相关产品推荐

