Событие S3 не запускается / не отображается в лямбда-интерфейсе;построено с помощью Serverless CLI / serverless-plugin-существующие-s3 - PullRequest
0 голосов
/ 08 мая 2019

Лямбда не запускается событиями, а созданное событие не появляется в Lambda GUI, хотя триггеры SNS и SQS делают.

Вот serverless.yml (примечание: я удалил свойARN, потому что я параноик):

service: my-service

provider:
  name: aws
  runtime: python3.7
  iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "s3:PutObject"
      Resource:
        Fn::Join:
          - ""
          - - "bucket-arn or *"

plugins:
  - serverless-plugin-existing-s3

layers:
  boto3_downgrade_layer:
    package:
      artifact: boto3_downgrade_layer.zip
    allowedAccounts:
      - '*'

functions:
  call_textract:
    handler: src/call_textract.lambda_handler
    description: "Kicks off the Textract process."
    events:
      - existings3:
          bucket: startrac-files
          event: s3:ObjectCreated:*
          rules:
            - prefix: input2/
            - suffix: .pdf
      - existings3:
          bucket: startrac-files
          event: s3:ObjectCreated:*
          rules:
            - prefix: input1/
            - suffix: .pdf
    layers:
      - arn

  get_textract_output:
    handler: src/get_textract_output.lambda_handler
    description: "Retrieves the Textracted data and writes it to a file to S3."
    events:
      - sqs: arn
    layers:
      - arn

  parse_textract_output:
    handler: src/parse_textract_output.lambda_handler
    description: "Parses the Textracted output and performs file ops in S3 based on the results."
    events:
      - sns: arn
    layers:
      - arn

Чтобы развернуть, я запускаю sls deploy -v, а затем sls s3deploy согласно документации (без ошибок), но не люблю.Я должен видеть триггер события S3 в разделе «Конфигурация Lambda» пользовательского интерфейса (как я вижу там триггеры SQS / SNS), но я не вижу.

Я вполне мог бы использовать здесь неправильное использование сервера, как я только что обнаружил сегодня.

Редактировать 1: Просто хотел указать, что моя функция с именем call_textract должна запускаться Событие S3 , событие не инициируется.

Редактировать 2: Я обновил свой код, как было предложено.Триггер события появился в моем графическом интерфейсе, за исключением того, что он справа (вызван), а не слева от функции, где мне это нужно.Похоже, я здесь неправильно использую лямбду.

1 Ответ

1 голос
/ 09 мая 2019

Вам нужно сделать отступ для ваших bucket, eventss, а не event) и rules (это свойства вашего existingS3 события), например:

functions:
  call_textract:
    handler: src/call_textract.lambda_handler
    description: "Kicks off the Textract process."
    events:
      - existingS3: # capital S
          bucket: startrac-files # defined under existingS3
          events:
            - s3:ObjectCreated:*
          rules:
            - prefix: input2/
            - suffix: .pdf

Вам также нужны правильные утверждения в iamRoleStatements (в дополнение к другим вашим утверждениям):

provider:
  name: aws
  iamRoleStatements:
    ...
    - Effect: "Allow"
      Action:
        - "s3:GetBucketNotification"
        - "s3:PutBucketNotification"
      Resource:
        Fn::Join:
          - ""
          - - "arn:aws:s3:::BUCKET_NAME or *"
...