AWS Spot数据馈送订阅已激活但S3存储桶始终为空
AWS Spot数据馈送激活后S3存储桶无数据的排查方案
问题背景
已成功配置AWS Spot数据馈送订阅,执行aws ec2 describe-spot-datafeed-subscription返回如下结果(存储桶及OwnerID已修改):
{ "SpotDatafeedSubscription": { "Bucket": "my-bucket", "OwnerId": "000000000000", "Prefix": "datafeed", "State": "Active" } }
配置运行近一个月,存储桶内始终无数据生成。已设置存储桶为Bucket owner preferred,且按文档要求在ACL中添加了AWS外部账户,存储桶仍为空。
排查步骤
确认Spot实例活动情况
Spot数据馈送仅在Spot实例发生中断、终止、价格调整等事件时才会生成数据。如果这段时间你的账户没有运行任何Spot实例,或未触发上述事件,自然不会有数据写入。可通过以下命令验证:# 查看Spot实例请求状态 aws ec2 describe-spot-instance-requests # 查看当前运行的Spot实例 aws ec2 describe-instances --filters "Name=instance-lifecycle,Values=spot"核对存储桶权限细节
- 检查ACL中添加的AWS外部账户是否具备
s3:PutObject权限,且无Bucket Policy覆盖该权限。可通过命令查看Bucket Policy:
若存在拒绝策略,需确保其未阻止Spot数据馈送账户的写入操作。aws s3api get-bucket-policy --bucket my-bucket - 确认
Bucket owner preferred设置未引发所有权冲突,但该配置仅影响对象归属,不直接阻止数据写入。
- 检查ACL中添加的AWS外部账户是否具备
检查前缀路径是否正确
配置中的Prefix为datafeed,数据会写入s3://my-bucket/datafeed/路径下,需进入该子目录查看,而非存储桶根目录。可通过命令验证:aws s3 ls s3://my-bucket/datafeed/验证区域一致性
Spot数据馈送是区域级配置,需确保订阅创建的区域与Spot实例运行的区域完全一致。可通过命令确认订阅区域:aws ec2 describe-spot-datafeed-subscription --region <你的订阅区域>对比Spot实例所在区域,若不匹配,数据不会写入目标存储桶。
通过CloudTrail排查写入尝试
启用CloudTrail追踪目标存储桶的s3:PutObject操作,搜索源账户为Spot数据馈送官方账户的记录,查看是否存在写入失败(如权限拒绝)的情况,以此定位具体问题。
内容的提问来源于stack exchange,提问作者Mark Webster
相关产品推荐
相关产品推荐

