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

如何实现S3新文件自动下载到EC2?Lambda+SSM方案报错排查

方案选择建议

对于你的场景(高频上传、低延迟要求、EC2常驻处理),最简单、延迟最低的方案是 S3事件触发 + SQS标准队列 + EC2常驻消费进程,比你当前使用的Lambda+SSM方案稳定性高、延迟更低,并发场景下也不会受SSM配额限制。
S3上传新文件后会直接推送事件到SQS队列,EC2上只需要跑一个简单的常驻脚本轮询队列,收到事件就直接下载S3文件处理,端到端延迟可以控制在百毫秒级,也不会出现事件丢失的问题。

第一个问题:Lambda超时原因

你遇到的3秒超时问题是两个原因共同导致的:

  • Lambda默认超时时间为3秒,你的代码中调用ssm.send_command后还要等待3秒再调用ssm.get_command_invocation,整体执行时间已经超过默认的超时阈值。
  • Lambda执行角色缺少SSM相关权限(ssm:SendCommand、ssm:GetCommandInvocation)时,SSM API调用会卡住直到超时,你删除SSM相关代码后函数正常运行,也验证了问题出在SSM调用环节。

修复方式:

  • 把Lambda的超时时间调整到15秒以上
  • 给Lambda执行角色添加SSM相关操作权限
第二个问题:SSM命令执行后找不到文件原因

代码运行正常但EC2上找不到hi.txt,是SSM执行的默认配置导致的:

  • SSM Agent执行AWS-RunShellScript文档时,默认运行用户是root,默认工作目录为/root/,你生成的hi.txt实际存放在root用户的主目录下,而非你登录时用的普通用户(ec2-user/ubuntu等)的主目录。
  • 如果你需要把文件生成到指定普通用户的主目录,要写绝对路径,比如要写到ec2-user的主目录,命令要写成 touch /home/ec2-user/hi.txt,或者切换用户执行:runuser -l ec2-user -c 'touch hi.txt'。

另外还要确认EC2实例满足SSM运行的前提条件:

  • EC2实例已经安装SSM Agent
  • EC2实例绑定的IAM角色包含AmazonSSMManagedInstanceCore权限
  • EC2和SSM服务网络连通(有公网IP,或者VPC内配置了SSM接口端点)
  • 你之前写的S3下载命令存在错误,漏了S3路径前缀和桶名,正确的写法应该是 aws s3 cp s3://{bucketname}/{filename} 目标路径,否则就算命令执行也会下载失败。
优化建议

如果继续使用Lambda+SSM方案,需要做以下修改:

  • 调整Lambda超时时间为10~30秒,内存调到256MB加快执行速度
  • 补全S3下载命令的桶名和S3协议前缀
  • SSM命令中所有路径写绝对路径,避免默认工作目录不符的问题
  • 确认EC2实例满足SSM运行的所有前提条件

如果切换到SQS方案,会省去SSM的各种配置成本,也不会有Lambda冷启动、调用配额的问题,更适合高频上传的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:45:11