首页 > 解决方案 > 尝试在无服务器框架中为 AWS Lambda 函数创建多个 s3 存储桶时,Yaml 文件出错

问题描述

所以我对 CloudFormation 和无服务器框架都很陌生。我一直在尝试完成一些练习(例如自动缩略图生成器),然后创建一些简单的项目,我希望这些项目可以概括用于我自己的目的。

现在我正在尝试创建一个堆栈/函数来创建两个 S3 存储桶,并让 Lambda 函数从一个 CSV 文件中获取一个 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: 中创建事件对象,但随后我得到一个糟糕的缩进错误,由于某种原因我无法协调。但是,更根本的是,我不确定为什么该项目无论如何都需要是一个数组,而且我也不清楚桶的警告。

很抱歉有一个关于这个的新手问题,但是在线运行教程/示例在尝试概括/定制这些示例时需要尝试找出很多东西。

标签: amazon-s3aws-lambdayamlamazon-cloudformationserverless-framework

解决方案


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

推荐阅读