AWS SNS 对 lambda 的订阅不会使用 Java API 自动创建事件源

AWS SNS subsription to lambda doesn't automatically create event source using Java APIs

以下是使用 AWS Java API 进行重现的步骤: 1.创建一个Nodejs Lambda函数 2.创建一个SNS主题 3. 将 SNS 主题订阅到使用其 ARN

创建的 lambda 函数

现在,如果我们转到 Lambda 函数并查看“事件源”选项卡,我们不会看到 SNS 主题被列为事件源。所以 SNS 根本不会触发 Lambda 函数。在我看来像是 AWS 问题。

P.S:用于重现上述问题的 AWS 用户密钥附加了全面访问权限(管理策略)。所以它看起来不像是权限问题。如果我通过 AWS 控制台重复上述步骤,事件源将正确添加到 Lambda 函数中。

有没有人遇到过这个问题?如何解决这个问题?或者任何解决方法。

您需要为 SNS 添加权限才能调用 Lambda。您可以通过调用 AddPermission Function 来完成此操作。

背景:Lambda SNS使用推送模型调用Lambda。这意味着 SNS 直接调用您的 lambda 函数(类似于您从 Java SDK 调用 invokeFunction)。 lambda IAM 权限模型要求明确允许每个调用者调用该函数。

这与 Lambda Kinesis 事件源不同,后者使用 Pull 模型(lambda 函数运行,然后从 Kinesis Stream 中拉取记录)。