如何自动打包和部署AWS Python Lambda函数
我创建了一个AWS的Python Lambda,使用了一些模块,比如kafka、numpy和boto3等。
Boto3是AWS环境自带的。对于Numpy,我使用的是AWS预定义的层。
在把它打包成一个包含kafka和其他模块的.zip
文件后,文件大小大约是14 MB
,AWS的界面不显示代码,并提示:
你的Lambda函数“ABC”的部署包太大,无法进行在线代码编辑。不过,你仍然可以调用这个函数。
每次我做任何更改时,都会按照以下步骤进行:
- 导入需要的新模块
- 在包含
.py
文件的目录中使用pip安装这个模块 - 将这个目录打包成zip文件
- 把zip文件上传到S3
- 让Lambda指向这个最新的zip文件
我觉得这个过程太繁琐了,应该有更简单、更好的方法,这样其他开发者也能更方便地进行改进。
我也在尝试理解如何把这个提交到git,是不是只需要提交.py
文件?如果是的话,我是否也应该提交requirements.txt
,这样其他人就能在他们的环境中轻松开始测试?
我需要创建任何管道来使整个过程自动化,让本地测试对开发者更友好吗?
有没有什么工具可以让这个过程变得更简单?请给我一些指导。
1 个回答
0
关于git的部分:我建议你只提交你的主要Python文件和相关的requirements.txt文件。
我用过的两种更简单的Lambda部署方式是Serverless和Terraform。我会简单介绍一下这两种方法(还有亚马逊的CDK,但我对它不太熟悉)。
- Serverless基本上是亚马逊的基础设施代码工具(CloudFormation)的一个封装;它使用一组JSON或YAML文件来定义你的Lambda和相关资源。这里有一个不错的示例,也就是一个被git跟踪的
handler.py
文件,一个requirements.txt
文件和一个serverless.yml
文件,用于部署Lambda。 - Terraform则是一个更通用的基础设施代码工具,它为每个主要的云服务提供商都有插件。我找到的最好的例子是一个简化的代码库。
Terraform的主要优势在于以更通用的方式跟踪变化,但如果你对这两者都不太熟悉,我觉得Serverless更简单。(Serverless使用CloudFormation堆栈来跟踪变化,这比Terraform的状态管理要复杂一些)。
理想情况下,你希望这些操作在合并时在一个管道中运行,这样在代码审查和合并到git仓库后,你的Lambda就会更新为新的代码更改。这个过程可能看起来像这样:
- 有人向你的Git仓库提交一个拉取请求
- 请求被审查/合并
- 在合并之前,运行一些测试来验证代码
- 你运行serverless/terraform部署来更新Lambda
- 对新的部署进行一些最终的端到端验证
如果你需要我解释任何内容,请告诉我!