AWS Lambda 开发工作流程

Posted

技术标签:

【中文标题】AWS Lambda 开发工作流程【英文标题】:AWS Lambda Dev Workflow 【发布时间】:2019-07-08 22:25:48 【问题描述】:

我已经使用 AWS 一段时间了,但我想知道如何使用 Lambda 进行开发。我非常喜欢拥有无服务器功能并让亚马逊处理维护并且已经使用了一段时间。我的问题:是否有推荐的版本控制和开发工作流程?

我了解可以在 Lambda 中发布新版本。并且您可以指向调用它的服务中的特定版本,例如 API 网关。我看到 API Gateway 也有一些很好的能力来划分谁调用哪个版本。即拥有一个测试 API 并且缓慢滚动更新到 10% 的生产 API 调用并缓慢扩展。

但是,对于实际的版本控制系统来说,这感觉有点笨拙。也许这些函数是在本地编码并使用 AWS CLI 上传的,然后一切都通过第三方版本控制系统(Github、Bitbucket 等)进行管理?我可以通过这种方式部署到该功能的新版本或现有版本吗?这样我就可以保持测试和生产功能的分离。

通过 Lambda 中的编辑器进行开发也感觉不太好。更不用说使用自定义包需要上传。似乎本地开发是更好的解决方案。尝试了解其他工作流程,以便改进我的工作流程。

根据您的经验,您是如何解决这个问题的?

【问题讨论】:

【参考方案1】:

我建议你看看 SAM。 SAM 是一个命令行工具和框架,可帮助您开发无服务器应用程序。使用 SAM,您可以在将应用程序上传到云之前在本地测试它们。它还支持蓝/绿部署和 CI/CD 工作流,从 github 自动启动。

https://github.com/awslabs/aws-sam-cli

【讨论】:

【参考方案2】:

您可以使用 aws CodeCommit 对您的 lambda 进行版本控制(比使用外部 git 存储库系统简单得多,尽管您也可以这样做)。这是为提交/构建/部署阶段设置 CodePipeline 的教程:https://docs.aws.amazon.com/codepipeline/latest/userguide/tutorials-simple-codecommit.html

此示例部署一个 EC2 实例,因此对于 lambda 的部署部分,see here

如果您设置了一个管道,您可以有一个初始提交阶段,然后是一个运行单元测试和打包代码的构建阶段,然后是一个部署阶段(如果需要,可能还有更多阶段)。这是部署 lambda 更改的一种非常有条理的方式。

【讨论】:

【参考方案3】:

我编写了大约十几个基于 S3 文件写入事件或时间触发的 lambda 函数,并向 API 发出 HTTP 请求以启动数据处理作业。

我认为没有任何黄金标准。根据我的研究,有各种方法和框架。我决定我不想依赖任何类型的框架,比如 Serverless 或 Apex,因为我不想在学习 Lambda 的基础上学习如何使用这些东西。相反,我在开发功能时根据自己的需求有机地进行了改进。

为了回答您的问题,这是我的工作流程。

    在本地开发并 git 提交更改。 使用 mocha 和 chai 模拟测试数据和本地测试。 运行一个 bash 脚本,该脚本创建一个 zip 文件来压缩要部署到 AWS lambda 的文件。 将 zip 文件上传到 AWS lambda。

【讨论】:

现在已经过去了一段时间,您是否更新了工作流程?

以上是关于AWS Lambda 开发工作流程的主要内容,如果未能解决你的问题,请参考以下文章

AWS的Serverless(Lambda)实践

AWS lambda 函数在超时错误后停止工作

无法让phantomjs在aws lambda上工作

我如何设置在流程开始后24小时触发一次AWS Lambda?

无服务器框架 + AWS + Lambda + DynamoDB + GraphQL + Apollo Server = 无法使 POST 请求工作

旧的AWS Lambda图层是否会自动删除?如果没有,如何删除它们?