aws-lambda - SNS 订阅不是使用无服务器创建的
问题描述
我有一个无服务器项目,应该部署一个队列,将此队列订阅到现有主题和 lambda 以处理队列外的消息。这是我的yaml:
service: "ssul-${opt:branch}"
provider:
name: aws
runtime: nodejs8.10
region: eu-west-1
functions:
update:
reservedConcurrency: 10
handler: index.update
events:
- sqs:
arn: {Fn::GetAtt: [Queue, Arn]}
batchSize: 1
resources:
Resources:
Queue:
Type: "AWS::SQS::Queue"
Properties:
MessageRetentionPeriod: 10800
VisibilityTimeout: 900
QueueName: "updates-${opt:branch}"
Subscription:
Type: "AWS::SNS::Subscription"
Properties:
TopicArn: "${env:TOPIC_ARN}"
Protocol: sqs
Endpoint:
Fn::GetAtt: [Queue, Arn]
我运行sls deploy --branch master
返回正常,并且除了订阅之外的所有内容都已部署。该主题位于不同的帐户中,但我能够创建一个队列并通过控制台手动订阅它。我究竟做错了什么?
解决方案
我遇到了类似的问题(在我的情况下,我使用的是 SAM - Serverless Application Model,所以我的 yml 不同,但问题应该是相同的)。有时控制台会在幕后创建一些对象。就我而言,问题是主题策略资源:
TopicPolicy:
Type: "AWS::SNS::TopicPolicy"
Properties:
PolicyDocument:
Version: "2012-10-17"
Id: MyTopicPolicy
Statement:
-
Effect: "Allow"
Principal:
Service: "events.amazonaws.com"
Action:
- "sns:Publish"
Resource: "*"
Topics:
- !Ref PipelineNotificationsTopic
推荐阅读
- c++ - ArrayFire GFOR 循环意外错误
- apache-spark - 如何在写入数据时使用“Salt”进行火花重新分区
- python - 如何将xml xpath解析为list python
- javafx - 如何将 javaFx 中的按钮链接到 rpi 上的 gpio 引脚
- c# - 如何使用 oData 查询从 azure graph API 过滤结果
- angular - img标签内的Angular ngStyle没有动态更新
- google-sheets - 在 Excel 或 Google 表格中删除重复项时求和值和平均值
- apple-push-notifications - iOS 13 杀死应用程序,因为它在收到 PushKit VoIP 回调后从未向系统发布来电
- python - Pymysql 重复键更新
- sql - 如果表 2 中存在数据(id)但如果表 2 为空,如何从表 1 中删除数据,则删除表 1 中的所有数据?