SNS 订阅不适用于无服务器。

4
我有一个无服务器项目,需要部署一个队列,并将此队列订阅到现有主题以及一个lambda来处理队列中的消息。以下是我的yaml文件:
``` 我有一个无服务器项目,需要部署一个队列,并将此队列订阅到现有主题以及一个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命令,一切都部署成功了,除了订阅。主题在另一个账户中,但我能够通过控制台手动创建队列并进行订阅。我做错了什么?

最初的回答:

1个回答

6

我有一个类似的问题(在我的情况下,我使用了SAM-无服务器应用程序模型,所以我的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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接