我已经用pandas,numpy等构建了一个部署程序包,以便运行示例代码。大小约为46 MB。令人怀疑的是,我是否必须每次都压缩我的代码更新,然后再次将整个部署程序包更新到AWS S3来进行简单的代码更新?
还有其他方法可以避免每次S3上载45 MB的费用,而只需上载几KB的代码吗?
答案 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