代码之家  ›  专栏  ›  技术社区  ›  Lev Kuznetsov

sns订阅不是用无服务器创建的

  •  0
  • Lev Kuznetsov  · 技术社区  · 5 年前

    我有一个无服务器项目,它应该部署一个队列,将此队列订阅到一个现有主题,并使用lambda处理队列外的消息。这是我的山药:

    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 返回fine,除订阅外,所有内容都已部署。主题是在不同的帐户,但我能够创建一个队列,并通过控制台手动订阅它。我做错什么了?

    0 回复  |  直到 5 年前
        1
  •  0
  •   BAD_SEED    5 年前

    我有类似的问题(在我的例子中,我使用的是山姆-无服务器的应用程序模型,所以我的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