尝试在用于AWS Lambda函数的无服务器框架中创建多个s3存储桶时Yaml文件中的错误

问题描述

因此,我对CloudFormation和无服务器框架来说还是很新的。我一直在尝试完成一些练习(例如自动缩略图生成器),然后创建一些简单的项目,希望可以针对自己的目的进行概括。

现在,我正在尝试创建一个堆栈/函数,该堆栈/函数创建两个S3存储桶,并使Lambda函数采用一个CSV文件格式,执行一些简单的转换,然后将其放置在另一个接收存储桶中。

在尝试完成我已完成的练习时,我使用以下代码创建了Yaml文件

provider:
  name: aws
  runtime: python3.8
  region: us-east-1
  profile: serverless-admin
  timeout: 10
  memorySize: 128
  iamRoleStatements:
   - Effect: "Allow"
     Action:
       - "s3:*"
     Resource: "*"


custom:
  assets:
    targets:
    - bucket1: csvbucket1-08-16-2020
      pythonRequirements:
      dockerizePip: true
    - bucket2: csvbucket2-08-16-2020
      pythonRequirements:
      dockerizePip: true

functions:
  protomodel-readcsv:
    handler: handler.readindata
    events:
      s3:
      - bucket: ${self:custom.bucket1}
        event: s3:ObjectCreated:*
        suffix: .csv
      - bucket: ${self:custom.bucket2}
        

     

plugins:
  - serverless-python-requirements
  - serverless-s3-deploy

但是,当我从命令提示符下进行无服务器部署时,我得到:

 Serverless Warning --------------------------------------

  A valid service attribute to satisfy the declaration 'self:custom.bucket1' Could not be found.


 Serverless Warning --------------------------------------

  A valid service attribute to satisfy the declaration 'self:custom.bucket2' Could not be found.


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

  Events for "protomodel-readcsv" must be an array,not an object

我试图通过添加-使事件对象在protohandler-readcsv:中,但是由于某种原因,我收到一个严重的缩进错误,由于某种原因我无法调和。但是,更根本地讲,我不确定该为什么为什么该项目仍然需要一个数组,而且我也不清楚存储桶中的警告。

对于这个问题,我们深表歉意,但是在线运行教程/示例会使我们在尝试归纳/自定义这些示例时有很多尝试。

解决方法

custom:
  assets:
    targets:
    - bucket1

我想您需要self:custom.assets.targets.bucket1,不确定此嵌套资产是否可以工作。

请检查下面的示例是否可行。

service: MyService
custom:
  deploymentBucket: s3_my_bucket

provider:
  name: aws
  deploymentBucket: ${self:custom.deploymentBucket}
  stage: dev