Serverless Framework не настраивает должным образом Lambda подписку на тему SNS - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь реализовать эту простую архитектуру с помощью Serverless Framework:

Загрузка файла в S3 Bucket -> Тема SNS -> 2 лямбда-функции

На самом деле я просто тестируютолько с 1 лямбда-функцией, и вот мой код:

service: MyImageLibrary

provider:
  name: aws
  runtime: python3.6
  stage: dev
  region: us-west-2

package:
  individually: true

functions:
    handler: index.lambda_handler

resources:
  Resources:

ImageUploadedTopic:
  Type: AWS::SNS::Topic
  Properties:
    TopicName: SNSTopicImageUploadedTopic

ImageUploadedTopicSubscription:
  Type: AWS::SNS::Subscription
  Properties:
    Endpoint:
      Fn::GetAtt: [ TestLambdaFunction , "Arn" ]
    Protocol: lambda
    TopicArn:
      arn:aws:sns:us-west-2:xxxxxxxxxxx:SNSTopicImageUploadedTopic

ImageUploadedTopicPolicy:
  Type: AWS::SNS::TopicPolicy
  Properties:
    PolicyDocument:
      Version: '2012-10-17'
      Statement:
      - Sid: AllowBucketToPushNotificationEffect
        Effect: Allow
        Principal:
          Service: s3.amazonaws.com
        Action: sns:Publish
        Resource: "*"
    Topics:
      - arn:aws:sns:us-west-2:xxxxxxxxxxx:SNSTopicImageUploadedTopic

MyImagesBucket:
  Type: AWS::S3::Bucket
  DependsOn: ImageUploadedTopicPolicy
  Properties:
    BucketName: ${self:custom.bucketName}
    NotificationConfiguration:
      TopicConfigurations:
        - Event: s3:ObjectCreated:*
          Topic: 
            arn:aws:sns:us-west-2:xxxxxxxxxxxx:SNSTopicImageUploadedTopic
    CorsConfiguration:
      CorsRules:
      - AllowedMethods:
        - GET
        - PUT
        - POST
        - HEAD
        AllowedOrigins:
        - "*"
        AllowedHeaders:
        - "*"

В консоли я вижу, что лямбда-функция подписана на тему:

sns1

Но в лямбда-функции тема SNS не установлена ​​в разделе «Триггер»:

sns2

Я что-то упустил?

1 Ответ

0 голосов
/ 21 декабря 2018

Хорошо, я получил это!

Мне пришлось добавить еще одно разрешение, чтобы функция Lambda могла запускаться SNS. Тема:

TestLambdaFunctionPermission: 
  Type: AWS::Lambda::Permission
  Properties:
    Action: lambda:InvokeFunction
    Principal: sns.amazonaws.com 
    SourceArn:
      Ref: ImageUploadedTopic
    FunctionName:
      Fn::GetAtt: [ TestLambdaFunction, "Arn" ]

И теперь в консоли я могуSNS как триггер для моей лямбда-функции:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...