Terraform配置aws_s3_bucket_lifecycle_configuration遇MalformedXML错误求助
S3生命周期配置MalformedXML错误排查
使用hashicorp/aws v4.38.0版本通过Terraform配置aws_s3_bucket_lifecycle_configuration时,触发以下错误:
MalformedXML: The XML you provided was not well-formed
错误配置示例
resource "aws_s3_bucket_lifecycle_configuration" "my-bucket-lifecycle-configuration" { depends_on = [aws_s3_bucket_versioning.my-bucket-versioning] bucket = aws_s3_bucket.my_bucket.id rule { id = "my_prefix_current_version_config" filter { and { prefix = "my_prefix/" object_size_greater_than = 0 } } expiration { days = 365 } status = "Enabled" } }
可正常应用的配置示例(移除and块后)
resource "aws_s3_bucket_lifecycle_configuration" "my-bucket-lifecycle-configuration" { depends_on = [aws_s3_bucket_versioning.my-bucket-versioning] bucket = aws_s3_bucket.my_bucket.id rule { id = "my_prefix_current_version_config" filter { prefix = "my_prefix/" } expiration { days = 365 } status = "Enabled" } }
问题原因及修正方法
错误出在and块的语法使用上:根据Terraform AWS Provider的规范,and块用于组合多个过滤条件时,每个条件必须以独立的嵌套块形式声明,而非直接作为and的键值属性。
原配置中直接在and下写prefix = "my_prefix/"和object_size_greater_than = 0的写法不符合语法要求,导致Terraform生成的XML结构不符合S3的格式规范,触发MalformedXML错误。
正确的配置写法应为:
resource "aws_s3_bucket_lifecycle_configuration" "my-bucket-lifecycle-configuration" { depends_on = [aws_s3_bucket_versioning.my-bucket-versioning] bucket = aws_s3_bucket.my_bucket.id rule { id = "my_prefix_current_version_config" filter { and { prefix { value = "my_prefix/" } object_size_greater_than { value = 0 } } } expiration { days = 365 } status = "Enabled" } }
这里将prefix和object_size_greater_than分别作为and块内的嵌套子块,每个子块通过value字段设置具体值,这样Terraform就能生成符合S3要求的XML配置,解决格式错误问题。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

