AWS Terraform操作aws_cur_report_definition时长期挂起求助
排查Terraform创建/读取AWS CUR报告定义长期挂起的问题
问题现象
执行terraform apply创建aws_cur_report_definition资源时长期无响应,读取已有该数据源时同样持续挂起超过9分钟,日志重复输出Still reading...。
排查步骤
1. 修正AWS Provider区域配置
AWS Cost and Usage Reports(CUR)是全局服务,仅支持在us-east-1区域调用API,即使你的S3桶或其他资源在其他区域。当前provider配置为eu-west-1,会导致API请求无法正确路由到CUR服务,引发超时。
修改provider区域为us-east-1:
provider "aws" { profile = "xxxxxxxxx" region = "us-east-1" # CUR服务仅支持该区域 }
2. 验证S3桶的权限配置
CUR服务需要特定权限才能写入目标S3桶,检查以下两点:
- 桶策略:添加允许AWS CUR服务访问桶的策略,示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cur.amazonaws.com" }, "Action": [ "s3:GetBucketAcl", "s3:GetBucketPolicy" ], "Resource": "arn:aws:s3:::cur-grafana-test" }, { "Effect": "Allow", "Principal": { "Service": "cur.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::cur-grafana-test/*" } ] } - IAM权限:确保Terraform使用的IAM用户/角色拥有
cur:PutReportDefinition和cur:DescribeReportDefinitions权限。
3. 用AWS CLI直接测试
跳过Terraform,用AWS CLI手动创建报告,验证问题根源是AWS服务端/权限还是Terraform Provider:
# 切换到us-east-1区域 aws configure set region us-east-1 # 手动创建报告定义 aws cur create-report-definition --report-definition '{ "ReportName": "my_cost_and_usage_report_test", "TimeUnit": "HOURLY", "Format": "Parquet", "Compression": "Parquet", "AdditionalSchemaElements": ["RESOURCES"], "S3Bucket": "cur-grafana-test", "S3Region": "us-east-1", "AdditionalArtifacts": ["ATHENA"], "S3Prefix": "/test", "ReportVersioning": "OVERWRITE_REPORT" }'
如果CLI也卡住或报错,直接排查AWS账户或服务问题;如果CLI成功,说明是Terraform Provider的问题。
4. 调整Terraform AWS Provider版本
当前使用的5.42.0版本可能存在CUR资源的已知bug,尝试升级到最新稳定版或降级到验证过的版本:
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 5.50.0" # 替换为最新稳定版 } } }
5. 检查AWS控制台的CUR状态
登录AWS Billing控制台,查看是否存在同名报告定义处于异常(pending/failed)状态,这类残留资源可能导致新请求卡住。如果有,手动删除后再重新执行Terraform。
6. 排查网络连接问题
确保Terraform运行环境能正常访问us-east-1的AWS API端点,检查防火墙、代理或VPC端点是否限制了请求。可以通过curl测试连通性:
curl https://cur.us-east-1.amazonaws.com
内容的提问来源于stack exchange,提问作者Olfa2
相关产品推荐
相关产品推荐

