You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform S3生命周期规则失效:替换try为lookup后配置不生效

解决Terraform S3生命周期规则中止未完成分段上传不生效问题

问题概述

需要通过S3生命周期规则在指定天数后中止未完成的分段上传,要求使用lookup替代try函数,但调用自定义Terraform模块时,配置的中止规则未生效——执行terraform plan未生成预期的abort_incomplete_multipart_upload块,实际输出与预期不符。

问题原因

  1. 字段名不匹配:模块代码中动态块abort_incomplete_multipart_upload从规则对象的abort_incomplete_multipart_upload字段读取配置,但调用模块时传入的字段名是abort_incomplete_multipart_upload_days,导致模块无法识别该配置。
  2. try函数未替换:原模块使用try处理生命周期规则的JSON解码逻辑,未满足用lookup替代的要求。

修复方案

1. 修改自定义模块代码

替换try为lookup逻辑处理规则输入,同时确保动态块读取正确的字段:

resource "aws_s3_bucket_lifecycle_configuration" "default" {
  count  = length(var.lifecycle_rule) != 0 ? 1 : 0
  bucket = aws_s3_bucket.bucket.bucket

  dynamic "rule" {
    # 用lookup结合类型判断替代try,处理字符串/列表两种输入格式
    for_each = lookup({
      string = jsondecode(var.lifecycle_rule)
      list   = var.lifecycle_rule
    }, type(var.lifecycle_rule), var.lifecycle_rule)

    content {
      id     = lookup(rule.value, "id", "default")
      status = lookup(rule.value, "status", "Enabled")

      dynamic "abort_incomplete_multipart_upload" {
        # 检查规则对象中是否存在abort_incomplete_multipart_upload字段
        for_each = lookup(rule.value, "abort_incomplete_multipart_upload", null) != null ? [rule.value.abort_incomplete_multipart_upload] : []
        content {
          days_after_initiation = abort_incomplete_multipart_upload.value.days_after_initiation
        }
      }
    }
  }
}

2. 修改模块调用代码

调整生命周期规则的字段名,与模块预期的abort_incomplete_multipart_upload匹配:

module "test" {
  source = "./s3"

  bucket_name = "test"
  lifecycle_rule = [
    {
      expiration = {
        days = 7
      }
    },
    {
      id = "abort-incomplete-multipart-upload-lifecyle-rule"
      # 修正字段名为模块预期的abort_incomplete_multipart_upload
      abort_incomplete_multipart_upload = {
        days_after_initiation = 6
      }
    }
  ]
}

验证结果

修改后执行terraform plan,将生成预期的配置块:

+ rule {
    + id     = "abort-incomplete-multipart-upload-lifecyle-rule"
    + status = "Enabled"

    + abort_incomplete_multipart_upload {
        + days_after_initiation = 6
      }

    + filter {
      }
  }

内容的提问来源于stack exchange,提问作者cloudbud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 12:24:24