【问题标题】:AWS The lambda function is not triggered by S3 after an uploadAWS 上传后 S3 不会触发 lambda 函数
【发布时间】:2020-05-16 00:11:02
【问题描述】:

我对 AWS Lambda 和 S3 有疑问。

我使用 terraform 部署所有 AWS 架构。我有一个存储桶,我可以在其中上传 XML 文件,该文件触发 lambda 来处理这些文件(事件被充分告知)。

问题是,在部署我的架构之后,当我将一个 XML 文件放入我的存储桶中时,前几次什么都没有发生。好像我上传的第一个文件没有被考虑在内,S3 也没有向 Lambda 发送通知。

有时我必须在开始考虑之前将几个文件发送到 S3,或者我使用 GUI 修改 S3 控制台中的通知,而不进行任何更改,只需单击“保存”即可。我不知道如何调查这个问题。

你能告诉我是否有人遇到过类似的情况吗? 另外,您是否知道是否可以查看 S3 存储桶上发生的所有事情的历史记录(上传的文件、发送的事件……)来调查我的问题?

提前致谢。

【问题讨论】:

  • 您是否为 Lambda 启用了 Cloudwatch? S3 存储桶上的 PutObject 触发器到 Lambda 应该在每个事件上触发,因此在 Cloudwatch 中跟踪这些事件发生的情况将是我首先要看的事情
  • 你怎么知道 lambda 没有被触发?是因为 lambda 应该执行的操作尚未执行,还是因为您检查了 lambda cloudwatch 日志并且可以看到 lambda 尚未被调用?两者之间有天壤之别。我怀疑是前者,这将是由于该 lambda 代码中的问题,并且可以解释它间歇性失败。
  • 能分享一下bucket的配置吗?当您启用对 Lambda 的通知时。关注:Bucket > Properties > Events 最好的问候。
  • 您好,感谢您的回答。我说当我上传第一个对象时不会触发 lambda,因为当我查看 lambda 的 CloudWatch 日志时,没有日志,我们可以看到没有调用 lambda。
  • 我的bucket事件是在上传/扩展名为“.xml”的文件夹上创建的每个对象上,触发lambda

标签: amazon-web-services amazon-s3 aws-lambda terraform-provider-aws eventtrigger


【解决方案1】:

您所经历的关键是它发生在您创建存储桶和触发器之后。许多 AWS 系统都有最终一致性模型。在 S3 的情况下,对象和存储桶在 3 个可用区之间具有最终一致性。

简而言之,您是在 S3 实例上的事件触发之前将对象放入其中一个 S3 实例。

【讨论】:

  • 您好,感谢您的回答。我不确定我是否理解,我部署的所有架构都只在 AWS 的一个区域中。在实际触发第一个事件之前是否存在某种延迟?
  • 简而言之,是的,期望配置更改生效。
猜你喜欢
  • 2021-08-27
  • 2021-06-24
  • 2020-02-09
  • 1970-01-01
  • 2018-12-02
  • 2022-06-10
  • 1970-01-01
  • 2021-10-10
  • 2019-09-05
相关资源
最近更新 更多