Безсерверный слушатель событий s3 - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть следующий serverless.yml

service: sl-hliq-cognitive-trigger
custom: ${file(env.yml)}
plugins:
  serverless-plugin-existing-s3
provider:
  name: aws
  runtime: python3.6
  stage: ${self:custom.environment}
  deploymentBucket:
    name: ${self:custom.deploymentBucket}
    serverSideEncryption: AES256 
  role:
    Fn::GetAtt: [ ServiceRole, Arn ]
  region: ${self:custom.region}

functions:
    lambda_trigger:
        name: ${self:service}-${self:custom.environment}
        description: Test lambda lambda_trigger 
        handler: handler.lambda_handler
        tags:
            project: "hliq-cognitive-srv"
            owner: "hliq-cognitive-srv-state"
            environment: ${self:custom.environment}
        events:
            - existingS3: 
                bucket: ${self:custom.listen_bucket_name}
                event: s3:ObjectCreated:*
                rules:
                    - prefix: ${self:custom.listen_prefix_name}

package:
  artifact: package.zip

resources:
  Resources:
     ServiceRole:
       Type: AWS::IAM::Role
       Properties:
         RoleName: ${self:service}-${self:custom.environment}
         AssumeRolePolicyDocument:
           Version: '2012-10-17'
           Statement:
             - Effect: Allow
               Principal:
                 Service:
                   - lambda.amazonaws.com
               Action: sts:AssumeRole
         Policies:
           - PolicyName: ${self:service}-${self:custom.environment}
             PolicyDocument:
               Version: '2012-10-17'
               Statement:
                 - Effect: Allow
                   Action:
                     - ec2:CreateNetworkInterface
                     - ec2:DescribeNetworkInterfaces
                     - ec2:DetachNetworkInterface
                     - ec2:DeleteNetworkInterface
                   Resource: "*"
                 - Sid: "BucketAccess"
                   Effect: "Allow"
                   Action:
                    - "s3:Get*"
                    - "s3:List*"
                   Resource:
                    - "arn:aws:s3:::${self:custom.listen_bucket_name}"
                    - "arn:aws:s3:::${self:custom.listen_bucket_name}/${self:custom.listen_prefix_name}*"

Короче говоря, это просто лямбда-событие, когда объект создается в корзине.Я пошел в ведро s3 и получил следующую ошибку:

Unable to validate the following destination configurations. Not authorized to invoke function

Это заставляет меня поверить, что мне нужно что-то настроить на стороне ведра s3, чтобы разрешить вызов моеголямбда.Есть ли способ сделать это без сервера?

1 Ответ

0 голосов
/ 10 октября 2018

попробуйте добавить разрешение "s3:PutBucketNotification".

Приветствия,

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