我已经使用AWS一段时间了,但是想知道如何使用Lambda进行开发。我非常喜欢具有无服务器功能,让Amazon处理维护工作,并且已经使用了一段时间。我的问题:是否存在建议的版本控制和开发工作流程?
我知道可以在Lambda中发布新版本。而且,您可以指向调用它的服务中的特定版本,例如API Gateway。我看到API网关还具有一些很好的功能来划分谁调用哪个版本。即拥有测试API,并缓慢滚动更新以说占生产API调用的10%,然后缓慢扩展。
但是,对于实际的版本控制系统来说,这有点笨拙。也许功能是在本地编码并使用AWS CLI上载的,然后通过第三方版本控制系统(Github,Bitbucket等)来管理所有内容?我可以通过这种方式部署到该功能的新版本或现有版本吗?这样,我就可以保持测试功能和生产功能的分离。
通过Lambda中的编辑器,开发也感觉不那么好。更不用说使用自定义包需要反正上传。似乎本地开发是更好的解决方案。试图了解其他工作流程,以便改进我的工作。
根据您的经验,您如何处理此问题?
答案 0 :(得分:0)
您可以使用aws CodeCommit在lambda上进行版本控制(比起使用外部git存储库系统要简单得多,尽管您可以执行任何一种操作)。这是用于为提交/构建/部署阶段设置CodePipeline的教程:https://docs.aws.amazon.com/codepipeline/latest/userguide/tutorials-simple-codecommit.html
此示例部署了一个EC2实例,因此对于lambda的部署部分see here
如果设置管道,则可以有一个初始提交阶段,然后是一个运行单元测试并打包代码的构建阶段,然后是一个部署阶段(如果需要,可能还有更多阶段)。这是部署lambda更改的一种非常有条理的方法。
答案 1 :(得分:0)
我编写了大约十二个lambda函数,这些函数基于S3文件的写入事件或时间触发,并对HTTP请求一个HTTP请求以启动数据处理作业。
我认为没有任何黄金标准。根据我的研究,这里有各种方法和框架。我决定不想依赖诸如Serverless或Apex之类的任何框架,因为我不想在学习Lambda的基础上学习如何使用这些东西。相反,我在开发功能时会根据自己的需求有机地进行改进。
要回答您的问题,这是我的工作流程。
答案 2 :(得分:0)
我建议您看看SAM。 SAM是一个命令行工具和框架,可帮助您开发无服务器应用程序。使用SAM,您可以在将应用程序上载到云之前对其进行本地测试。它也支持从github自动启动的蓝/绿部署和CI / CD工作流。
答案 3 :(得分:0)
我认为Serverless Framework +标准的Git工作流程是您最好的选择。每个Git分支都绑定到一个完全独立的环境(或阶段)。它们也可以是in different AWS accounts as well。
您的团队在功能部门工作或使用基于PR的工作流,并且您的部署与Git提交相关联。这省去了处理Lambda版本的麻烦。
因此,您可能会在本地部署到一组特定的分支机构。对于登台和生产环境,您可能希望通过CI流程将它们连接起来。
我们在此处详细介绍了有关Git工作流程的内容-https://seed.run/blog/git-workflow-for-serverless-apps