如何自动打包和部署AWS Python Lambda函数

0 投票
1 回答
35 浏览
提问于 2025-04-14 16:11

我创建了一个AWS的Python Lambda,使用了一些模块,比如kafkanumpyboto3等。

Boto3是AWS环境自带的。对于Numpy,我使用的是AWS预定义的层。

在把它打包成一个包含kafka和其他模块的.zip文件后,文件大小大约是14 MB,AWS的界面不显示代码,并提示:

你的Lambda函数“ABC”的部署包太大,无法进行在线代码编辑。不过,你仍然可以调用这个函数。

每次我做任何更改时,都会按照以下步骤进行:

  1. 导入需要的新模块
  2. 在包含.py文件的目录中使用pip安装这个模块
  3. 将这个目录打包成zip文件
  4. 把zip文件上传到S3
  5. 让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就会更新为新的代码更改。这个过程可能看起来像这样:

  1. 有人向你的Git仓库提交一个拉取请求
  2. 请求被审查/合并
  3. 在合并之前,运行一些测试来验证代码
  4. 你运行serverless/terraform部署来更新Lambda
  5. 对新的部署进行一些最终的端到端验证

如果你需要我解释任何内容,请告诉我!

撰写回答