aws-lambda - 如何在没有内联代码的情况下使用 lambda 函数部署 cloudformation?
问题描述
lambda 函数大小超过 4096 个字符,因此我无法将 lambda 函数部署为 cloudformation 模板中的内联代码。
压缩文件
您的源代码最多可以包含 4096 个字符。对于 JSON,您必须使用反斜杠转义引号和特殊字符,例如换行符 (\n)。
我必须先压缩它,上传到一个 s3 存储桶,在 cloudformation 中设置 s3 存储桶和文件详细信息,然后部署它。
我找不到使用一个命令进行部署的方法。如果我更新 lambda 代码,我必须重复上述步骤
但是使用 AWS SAM 或无服务器框架,他们可以部署 lambda 函数而无需内联代码。
唯一的问题是,AWS SAM 或无服务器框架默认创建 API 网关,我不需要创建它
对我有什么解决方案或建议吗?
解决方案
如果您使用普通的 CloudFormation 和命令行界面来管理您的部署,您可以使用生成“打包”模板进行部署aws
相对轻松地处理这个问题。aws cloudformation package
aws cloudformation package
接受可以使用本地路径写入某些属性的模板,从本地文件系统压缩内容,上传到指定的 S3 存储桶,然后输出一个新模板,其中重写了这些属性以引用 S3 上的位置而不是本地文件系统。Code
在您的情况下,它可以将该点的属性重写为AWS::Lambda::Function
本地目录,但请参阅aws cloudformation package help
支持属性的完整列表。您确实需要提前设置一个 S3 存储桶来存储您的资产,但您可以在多个 CloudFormation 项目中重复使用同一个存储桶。
所以,假设你有一个类似的input.yaml
东西:
MyLambdaFunction:
Type: AWS::Lambda::Function
Properties:
Code: my-function-directory
您可以将其打包为:
aws cloudformation package \
--template-file input.yaml \
--s3-bucket my-packaging-bucket \
--s3-prefix my-project/ \
--output-template-file output.yaml
这会产生output.yaml
类似这样的东西:
MyLambdaFunction:
Properties:
Code:
S3Bucket: my-packaging-bucket
S3Key: my-project/0123456789abcdef0123456789abcdef
Type: AWS::Lambda::Function
然后您可以使用output.yaml
with aws cloudformation deploy
(或任何其他aws cloudformation
接受模板的命令)。
要真正“使用一个命令进行部署”并确保始终始终如一地进行部署,您可以将这两个命令组合成一个脚本Makefile
,或类似的东西。
推荐阅读
- c# - 单元测试崩溃,因为它不知道我的数据库表
- python - bs4 - BeautifulSoup,TypeError:“NoneType”对象不可调用
- sql - 在 SQL Server 的列中搜索值
- python - DataFrame pop 函数在 Nest Dictionary 中删除想要的值
- arrays - 我非常坚持这个 Kata ...需要返回一个由偶数和奇数组成的数组,分成两部分
- gatsby - 在 Gatsby 源插件中更新数据
- javascript - 基本身份验证 axios - klarna 结帐
- php - 根据 Laravel 中的数据库值动态更改 SAAS 变量
- excel - 将文本拆分为列错误 VBA 1004 错误
- python - 使用__dict__时如何只获取没有父类的类内容