【问题标题】:AWS SNS is not invoking lambda function when both are created using Cloudformation template使用 Cloudformation 模板创建两者时,AWS SNS 未调用 lambda 函数
【发布时间】:2019-06-29 09:56:50
【问题描述】:

我使用 cloudformation 创建了 lambda 和 SNS。这里第一个 lambda 调用一个订阅了另一个 lambda 的 SNS。这里 SNS 应该调用 lambda 的别名。在 SNS 主题中,lambda ARN 显示为订阅者,但在 lambda 中未添加为触发器。没有从 SNS 调用的 lambda 的单个调用日志。那么这个问题是关于某种许可还是其他问题?需要帮助...

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-cloudformation amazon-sns


    【解决方案1】:

    是的,这是权限问题。您需要为 lambda 函数添​​加权限,以允许 SNS 调用它。

    使用 AWS::Lambda::Permission 资源添加权限以允许 SNS 调用 lambda 函数。

    【讨论】:

    • 如果您正在使用 SAM 转换,如果使用普通 Cloudformation,则不会创建权限。
    • 所以这意味着我必须添加对 SNS 的权限,对吧?还是我必须为 lambda 函数添​​加权限?我的 lambda 可以完全访问所有必要的服务。
    • 如果您在此处发布当前的 CloudFormation 模板,我们或许可以进一步帮助您;-) 如果您使用的是无服务器应用程序模型 (SAM),那么您可以轻松地将 SNS 主题设置为事件源是这样的:github.com/awslabs/serverless-application-model/blob/master/… 然后会在后台为你创建权限等。
    【解决方案2】:

    我和一个人玩得很开心。我最初将我的 lambda 函数设置为查找“aws:s3”的事件源。为了从 s3 事件中获取事件源,我使用了“event.Records[0].eventSource”。当我测试 event.Records[0].eventSource == "aws:sns" 以检查我的 SNS 触发器是否已触发时,它不起作用。直到我找到示例 SNS 事件 JSON 后,我才注意到 SNS 事件的事件源节点为“EventSource”。这是大写。我将测试更改为

    event.Records[0].EventSource == "aws:sns" 
    

    它奏效了。事件消息格式的一致性非常重要。

    【讨论】:

      猜你喜欢
      • 2021-07-20
      • 1970-01-01
      • 2015-12-04
      • 2018-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      相关资源
      最近更新 更多