Создание лямбда-функции в качестве обработчика событий для корзины S3 - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь сделать что-то довольно простое.Я хочу создать лямбда-функцию, сегмент S3, и сделать лямбда-функцию обработчиком событий для сегмента S3, используя безсерверный фреймворк.Вот мой файл определения:

service:                      test-project

provider:
  name:                       aws
  stage:                      ${opt:stage, 'dev'}
  runtime:                    nodejs8.10
  endpointType:               REGIONAL
  role:                       arn:aws:iam::xxxxx:role/lambda_role

functions:
  MyEventHandler:
    name:                     fn
    handler:                  src/fn.handler
    events:
      - s3: container

resources:
  Resources:
    S3BucketContainer:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: the-container-bucket

Но когда я запускаю:

$ sls deploy  --region us-east-1  --stage dev

Я получаю:

Serverless: Operation failed!

  Serverless Error ---------------------------------------

  An error occurred: S3BucketContainer - Unable to validate the following destination configurations (Service: Amazon S3; Status Code: 400; Error Code: InvalidArgument; Request ID: xxxxx; S3 Extended Request ID: xxxxx).

  Get Support --------------------------------------------
     Docs:          docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues
     Issues:        forum.serverless.com

  Your Environment Information -----------------------------
     OS:                     linux
     Node Version:           8.10.0
     Serverless Version:     1.34.1

Кто-нибудь знает, что не так?

1 Ответ

0 голосов
/ 13 февраля 2019

Сообщение об ошибке ужасно, но верно.

Ведро пытается создать конфиг с помощью отправки уведомлений на вашу лямбду.На этом этапе развертывания лямбда-оператор не дал разрешений на создание сегмента, поэтому создание сегмента завершается неудачей.

Если вы не указали пользовательский ресурс сегмента (для изменения имени сегмента), serverless добавил бы эту зависимость автоматически .

Все это говорит о том, что вы не первый, и документы были обновлены , чтобы отразить эту проблему.

Добавьте этот дополнительный ресурс и, по-видимому (см. Ниже), он должен работать:

resources:
  Resources:
    MyEventHandlerLambdaPermissionContainerS3:
      Type: AWS::Lambda::Permission
      Properties:
        FunctionName:
          "Fn::GetAtt":
            - MyEventHandlerLambda
            - Arn
        Principal: "s3.amazonaws.com"
        Action: "lambda:InvokeFunction"
        SourceAccount:
          Ref: AWS::AccountId
        SourceArn: "arn:aws:s3:::the-container-bucket"

Я говорю, очевидно, потому что я решил это по-другому ( см. Здесь ), используя DependsOn для управлениязаказ в CloudFormation.

...