问题描述
因此,我对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