Bil*_*ill 5 aws-cloudformation aws-lambda serverless-framework serverless aws-sam
lambda 函数大小超过 4096 个字符,因此我无法将 lambda 函数部署为 cloudformation 模板中的内联代码。
压缩文件
您的源代码最多可以包含 4096 个字符。对于 JSON,必须使用反斜杠转义引号和特殊字符,例如换行符 (\n)。
我必须先将其压缩,上传到 s3 存储桶,在 cloudformation 中设置 s3 存储桶和文件详细信息,然后部署它。
我找不到一种使用一个命令进行部署的方法。如果我更新 lambda 代码,我必须重复上述步骤
但借助 AWS SAM 或无服务器框架,他们可以部署 lambda 函数而无需内联代码。
唯一的问题是,AWS SAM 或无服务器框架默认创建 API 网关,我不需要创建它
对我有什么解决方案或建议吗?
SAM 支持在不创建 API 网关的情况下部署 lambda 函数。所以问题解决了
小智 8
如果您使用普通的 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
Run Code Online (Sandbox Code Playgroud)
您可以将其打包为以下内容:
aws cloudformation package \
--template-file input.yaml \
--s3-bucket my-packaging-bucket \
--s3-prefix my-project/ \
--output-template-file output.yaml
Run Code Online (Sandbox Code Playgroud)
这会产生output.yaml类似这样的内容:
MyLambdaFunction:
Properties:
Code:
S3Bucket: my-packaging-bucket
S3Key: my-project/0123456789abcdef0123456789abcdef
Type: AWS::Lambda::Function
Run Code Online (Sandbox Code Playgroud)
然后您可以使用output.yamlwith aws cloudformation deploy(或任何其他aws cloudformation接受模板的命令)。
要真正“使用一个命令进行部署”并确保始终一致地进行部署,您可以将这两个命令组合成一个脚本、Makefile或类似的东西。
| 归档时间: |
|
| 查看次数: |
8239 次 |
| 最近记录: |