it-swarm.com.ru

Как добавить событие триггера S3 в функцию AWS Lambda с помощью Serverless Framework?

Я хочу добавить триггерное событие для лямбда-функции в уже существующее ведро и для этого я использую следующую конфигурацию: 

 events:
      - s3:
          bucket: serverlesstest
          event: s3:ObjectCreated:*
          rules:
            - prefix: uploads/
            - suffix: .pdf

где ведро serverlesstest уже существует на S3. 

Эта конфигурация выдает ошибку: 

Произошла ошибка при подготовке вашего стека: S3BucketServerlesstest - serverlesstest уже существует. 

Как я могу устранить эту ошибку, используя Serverless Framework?

6
Ronit kadwane

В настоящее время это невозможно в базовой структуре из-за поведения CloudFormation. может быть.

Но вы можете использовать этот плагин.

https://github.com/matt-filion/serverless-external-s3-event

После установки serverless-plugin-существующие-s3 с помощью npm install serverless-plugin-existing-s3.

И добавить плагины к serverless.yml

plugins:
  serverless-plugin-existing-s3

Дайте разрешение на развертывание для доступа к корзине.

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

И используйте событие existingS3, это не просто s3.

functions:
  someFunction:
    handler: index.handler
    events:
      - existingS3:
          bucket: BUCKET_NAME
          events:
            - s3:ObjectCreated:*
          rules:
            - prefix: images/
            - suffix: .jpg

После команды sls deploy, Вы можете прикрепить событие с помощью команды sls s3deploy.

Особенность предложения

это будет добавлено когда-нибудь в будущем.

https://github.com/serverless/serverless/issues/4241

9
yabaiwebyasan

К сожалению, вы не можете указать существующую корзину S3 для запуска функции Lambda, потому что Serverless Framework * не может изменить существующую инфраструктуру с помощью Cloud Formation. Эта конфигурация требует, чтобы вы создали new корзину.

Вы можете прочитать больше в следующих выпусках, которые были открыты на GitHub:

* Я бы попытался настроить этот триггер, используя Консоль AWS или SDK вместо Serverelss Framework.

4
Zanon

Если корзина была создана с использованием Serverless в другом месте стека, вы можете использовать - s3: Bucket: { Ref: serverlesstest } В противном случае вам придется создать имя или ARN самостоятельно.

1
Trent Bartlem