使用Terraform 1.3.6配置AWS S3存储桶生命周期规则时遭遇ARN格式错误,求可用示例
Terraform 1.3.6配置AWS S3存储桶生命周期规则时遭遇ARN格式错误,求可用示例
我明白你被ARN格式错误反复卡壳的困扰了,咱们直接来解决问题:
核心问题分析
你之前的错误根源在于**aws_s3_bucket_lifecycle_configuration资源的bucket参数只接受存储桶的名称,而非ARN或者其他格式**。不管是引用桶的arn属性,还是手动写ARN字符串,都会触发解析错误;第一次用id属性报错,大概率是Terraform AWS Provider版本的兼容性问题——部分版本中id的返回值不符合预期。
可用的完整配置示例
下面是适配Terraform 1.3.6的正确配置,细节都标注清楚了:
# 指定与Terraform 1.3.6兼容的AWS Provider版本 terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 4.0" # 这个版本和Terraform 1.3.6完全兼容 } } } # 配置AWS Provider区域 provider "aws" { region = "us-east-1" # 替换成你实际使用的AWS区域 } # 创建S3存储桶(注意:桶名必须全局唯一,不能直接用"my-bucket",建议加自定义前缀/后缀) resource "aws_s3_bucket" "my_bucket" { bucket = "my-unique-bucket-name-2024" # 替换成你自己的全局唯一桶名 } # 配置存储桶生命周期规则 resource "aws_s3_bucket_lifecycle_configuration" "my_bucket_lifecycle" { # 直接引用桶的bucket属性(即桶名),这是最可靠的方式 bucket = aws_s3_bucket.my_bucket.bucket rule { id = "expire-after-31-days" # 规则ID尽量清晰易懂 status = "Enabled" # 配置31天后自动过期的规则 expiration { days = 31 } } }
额外注意事项
- 务必确保你的S3桶名是全局唯一的,AWS不允许两个用户使用相同的桶名,直接用
my-bucket大概率会创建失败,记得改成带个人标识的唯一名称。 - 如果之前的错误配置导致Terraform状态文件有残留,可以先执行
terraform destroy清理后再重新应用新配置。
备注:内容来源于stack exchange,提问作者Haim Raman
相关产品推荐
相关产品推荐

