我有一个带有AWS :: Lambda :: Function资源的CloudFormation模板,并且我试图将本地zip文件作为代码上传,但是没有上传。 Lambda函数是在没有代码文件的情况下创建的。
Resources:
mastertestingLambdaDataDigestor:
Properties:
Code:
ZipFile: fileb:///home/dariobenitez/Proyectos/dataflow/templates/lambda_template.zip
FunctionName: mastertesting_Kinesis2DynamoDB_Datapipeline
Handler: handler.kinesis_to_dynamodb
Role: SOMEROLE
Runtime: python3.6
Type: AWS::Lambda::Function
当我尝试使用CLI部署相同功能时,zip文件路径参数有效。有想法吗?
非常感谢!
答案 0 :(得分:3)
您不能在此处指定文件路径。您必须输入功能代码本身。限制为4096个字节。如果您的代码较大,则需要先将其上传到S3并使用S3Bucket
和S3Key
。
示例:
mastertestingLambdaDataDigestor:
Properties:
Code:
ZipFile: >
def handler(event, context):
pass
FunctionName: mastertesting_Kinesis2DynamoDB_Datapipeline
Handler: handler.kinesis_to_dynamodb
Role: SOMEROLE
Runtime: python3.6
Type: AWS::Lambda::Function
另一个选择是使用aws cloudformation package
。它将为您上传zip文件,并将模板转换为具有正确路径的模板。为此,您必须将zip文件路径直接放在Code
中。例如:
Resources:
mastertestingLambdaDataDigestor:
Properties:
Code: /home/dariobenitez/Proyectos/dataflow/templates/lambda_template.zip
FunctionName: mastertesting_Kinesis2DynamoDB_Datapipeline
Handler: handler.kinesis_to_dynamodb
Role: SOMEROLE
Runtime: python3.6
Type: AWS::Lambda::Function
然后运行:
aws cloudformation package --template-file my-template.yaml --s3-bucket my-bucket
它应该输出如下内容:
Resources:
mastertestingLambdaDataDigestor:
Properties:
Code:
S3Bucket: my-bucket
S3Key: fjklsdu903490f349034g
FunctionName: mastertesting_Kinesis2DynamoDB_Datapipeline
Handler: handler.kinesis_to_dynamodb
Role: SOMEROLE
Runtime: python3.6
Type: AWS::Lambda::Function
然后您应该使用此模板来部署堆栈。
答案 1 :(得分:0)
以下模式对我有用:
在lambda定义中放入一些伪代码
Properties:
Code:
ZipFile: >
def handler(event, context):
pass
使用Cloudformation进行打包
$ aws cloudformation package --template-file\
/src/apigateway/cf.yml --s3-bucket <SOME_BUCKET>\
--output-template-file packaged-template.json
更新lambda代码
aws lambda update-function-code \
--function-name my-function \
--zip-file fileb://my-function.zip
如果我们只想上传lambda代码,并使用上传的参考信息更新Cloudformation,则可以使用Cloudformation
包命令。
在Cloudformation中放入类似的内容
Properties:
Code:
然后运行
$ aws cloudformation package --template-file\
/src/apigateway/cf.yml --s3-bucket <SOME_BUCKET>\
--output-template-file packaged-template.json
这将更新Cloudformaion
$ grep S3 packaged-template.json -B 2
Properties:
Code:
S3Bucket: <SOME_BUCKET>
S3Key: 77807d1ae2c2e590e0b928ac579c3aee