每次更新都需要更改AWS Lambda部署软件包的分钟代码

时间:2019-03-26 08:29:10

标签: python pandas amazon-web-services aws-lambda python-3.6

我已经用pandas,numpy等构建了一个部署程序包,以便运行示例代码。大小约为46 MB。令人怀疑的是,我是否必须每次都压缩我的代码更新,然后再次将整个部署程序包更新到AWS S3来进行简单的代码更新?

还有其他方法可以避免每次S3上载45 MB的费用,而只需上载几KB的代码吗?

2 个答案:

答案 0 :(得分:1)

我建议在AWS lambda中创建一个层。

首先,您需要创建一个Amazon Linux实例(使用https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html中指定的AMI-此时(2019年3月26日)它是amzn-ami-hvm-2017.03.1.20170812-x86_64-gp2)或与Lambda执行环境具有相同环境的Docker容器。

我个人是用docker做的。

例如,要为Python 3.6创建一个层,我将运行

sudo docker run --rm -it -v "$PWD":/var/task lambci/lambda:build-python3.6 bash

然后,我将在docker容器的/ var / task中创建一个文件夹python / lib / python3.6 / site-packages(这样以后就可以在我启动docker的主机上的目录中访问它了) / p>

pip3 install <your packages here> -t python/lib/python3.6/site-packages

压缩python文件夹并将其上传为图层,然后在我的AWS lambda函数中使用它。

注意!压缩文件中的路径应类似于“ python / lib / python3.6 / site-packages / {您的软件包名称}”

现在,沉重的依赖关系位于单独的层中,您不必在每次更新功能时都重新上传它们,只需更新代码

答案 1 :(得分:0)

将应用程序分为两部分。第一部分是仅包含您的应用程序代码的lambda函数。下一部分是lambda层。 lambda层将包括onky依赖项,并被上传一次。

可以上传lambda图层并将其附加到lambda函数。调用您的函数时,AWS将把lambda函数与lambda层结合在一起,然后执行整个程序包。

更新代码时,只需更新lambda函数。由于该软件包要小得多,因此您可以使用Web编辑器对其进行编辑,也可以使用cli工具将其压缩并直接上传到lambda。

示例:aws lambda update-function-code --function-name Yourfunctionname --zip文件fileb://Lambda_package.zip

这里是有关创建依赖项的lambda层的视频说明和示例。它演示了如何使用pymsql库,但您可以在其中安装任何库。

https://geektopia.tech/post.php?blogpost=Create_Lambda_Layer_Python