amazon-web-services - 使用 AWS::SNS::Subscription 后是否还需要添加触发器?

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

我有一个 SNS 主题,定义如下

  SlmExceedenceTopic:
    Type: AWS::SNS::Topic
    Properties:
      TopicName:
        Fn::Sub: ${AWS::StackName}-slm-exceedence-topic
      Tags:
        - Key: Environment
          Value: !Ref Environment

我希望在 SNS 中收到通知后执行 lambda 函数 ExceedenceProcessor。因此我添加了以下订阅

ExceedenceProcessorSubscription:
    Type: AWS::SNS::Subscription
    Properties:
      Endpoint:
        Fn::GetAtt: ExceedenceProcessor.Arn
      Protocol: lambda
      TopicArn: !Ref SlmExceedenceTopic

这正确地添加了订阅,我什至可以从 SNS 订阅中看到它。但是,我的函数从未被执行。只有当我手动向针对 SNS 的 Lambda 函数添​​加触发器时,我才能让它执行。 仅添加订阅还不够吗?

最佳答案

“用户”不调用 Lambda 函数。相反,Amazon SNS 服务调用 Lambda 函数。这就是为什么错误显示 User: sns.amazonaws.com is notauthorized

您应该在 Lambda 函数中添加权限以允许 Amazon SNS 调用它:

Amazon Lambda permissions

如果您的 CloudFormation 模板正在创建 AWS Lambda 函数,它可以使用 AWS::Lambda::Permission - AWS CloudFormation 添加这些权限。 .

关于amazon-web-services - 使用 AWS::SNS::Subscription 后是否还需要添加触发器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76166845/

相关文章:

python - 版本控制的 s3fs 本地文件缓存

mongodb - 从 AMI 创建实例会将 mongodb 日志大小增加到 3GB

amazon-web-services - 无法生成新的 lambda 实例时触发器是否丢失?

amazon-web-services - 如何在 Cloudformation 模板/CDK 中添加 AWS IoT 预置模板

amazon-web-services - AWS CloudHSM PKCS#11 与 PKCS11Interop 为 Wrap 操作 CKR_ARGUMENTS_BAD 提供错误

amazon-web-services - 将 POST 请求从 CloudFront 路由到 Lambda

django - 无服务器 AWS Lambda/Django/Zappa 的异步任务队列

aws-lambda - 使用 Cloud9 部署 Lambda

amazon-web-services - 如何在模板中指定没有像 Web 界面之类的首选项的子网?

amazon-web-services - 如何使用 AWS CDK 跨多个区域部署相同的堆栈