AWS Lambda和从S3上传zip文件

8

这个功能对于我来说不太清楚它的好处(我没有找到任何好的文档):

  1. 如果您在多个Lambda函数中重复使用相同的zip文件,那么它只是更快,因为您只需要上传一次,然后给每个Lambda函数提供S3链接URL吗?
  2. 如果您使用S3链接,那么当您重新上传zip文件时,所有Lambda函数是否都会自动更新最新代码,这意味着S3上的zip文件是每次调用Lambda函数时使用的“参考”吗?

谢谢。

编辑:
有人问我:“为什么要为多个Lambda函数使用相同的代码?” 因为我将AWS Lambda与AWS API Gateway一起使用,所以我有一个项目,其中包含所有处理程序,它们实际上是我的RESTful API的“端点”。

编辑#2: 我确认在S3上上传修改后的zip文件不会改变现有的lambda函数结果。

如果AWS的人看到这条消息,那就太好了,可以有一种批量更新功能,可以通过1次单击使用S3上的1个zip文件更新一组选定的lambda函数 (甚至还有一种“自动更新”功能,可以检测文件何时已更新;-))。假设您有50个处理程序在1个项目中,因此您修改了一些全局内容,影响所有处理程序,当前您必须逐个访问所有Lambda函数并手动更新zip文件...


当上传文件时,可以在S3存储桶上使用触发器来自动更新一组Lambda函数。 - Adrian Wragg
@AdrianWragg 好建议,我已经在其他方面使用事件功能了,但这意味着您要使用另一个 Lambda 函数来更新其他函数的代码,对吗?在我的情况下,我使用 Java,并使用 Maven 发布到 S3 存储桶中,因此我正在考虑使用本地脚本调用 AWS 命令行界面(update-function-code)。 - Maxime Laval
没错,是的 - 我在下面的回答中提供了更多详细信息,还包括一个可以根据你的需求进行调整的脚本链接。 - Adrian Wragg
4个回答

5

将代码从zip导入Lambda。这与通过Lambda控制台或API上传zip文件完全相同。然而,如果您的Lambda函数很大(他们说> 10MB),则建议先上传到S3,然后使用S3导入功能,因为这比直接从Lambda页面上传更稳定。除此之外,没有其他好处。

所以对于问题1:不行。反正您为什么要为多个Lambda函数编写相同的代码呢?

问题2:如果您覆盖zip文件,则不会更新Lambda函数代码。


1
我认为你也可以使用一个Lambda函数和API Gateway映射模板来解决这个问题。我使用一个Lambda函数处理多个端点,在每个端点的映射模板中,我指定了一个额外的值(对于每个端点都是唯一的),该值进入单个Lambda函数的“event”中以区分不同的端点请求。 - Luc Hendriks
好的,谢谢你的建议。所以我猜你有一个处理程序,根据输入或上下文中的某些变量充当调度程序? - Maxime Laval
没错!而且变量在映射模板中是硬编码的(每个端点都不同)。 - Luc Hendriks
顺便说一下,我猜这意味着您需要使用一个“全局”类来处理输入,该类包含所有可能的变量,以供您的所有端点接收? - Maxime Laval

4
为了增加其他人的用例,拥有从S3更新Lambda函数的能力在自动化部署/CI过程中非常有用。
AWS Lambda新部署选项下的说明包括一个简单的Lambda函数,可用于将ZIP文件从S3复制到Lambda本身,并提供触发器的执行说明,当上传新文件时触发它的执行。
这个例子展示了开发和部署是多么容易:
1. 我在本地机器上更新我的Node lambda应用程序,并将其git commit到远程存储库。 2. Jenkins实例获取提交内容,下载适当的文件,将它们添加到ZIP文件并将其上传到S3 bucket。 3. LambdaDeployment函数然后自动为我部署这个新版本, 我甚至不需要离开我的开发环境。

但是您仍然可以在没有S3的情况下自动化管道。您可以使用文件路径而不是S3 Bucket和Key。 - LP13

3
为了回答你问题的本质,AWS允许你使用S3作为Lambda zip文件的来源,因为有时通过浏览器上传大文件可能会超时。此外,将代码存储在S3上可以使您集中存储它,而不是存储在您的计算机上,我相信那里也有CodeCommit的联系。
使用S3上传代码到Lambda还允许您上传更大的文件(通过Web浏览器上传时,AWS有10MB的限制)。

1
昨天我能够从浏览器上传一个35MB的文件;-) - Maxime Laval
目前,Lambda 包未解压内容的限制为 262 MB(262 144 000 字节)。 - Attila Tanyi

0
#!/bin/bash
cd /your/workspace

#zips up the new code
zip -FSr yourzipfile.zip . -x *.git* *bin/\* *.zip

#Updates function code of lambda and pushes new zip file to s3bucket for cloudformation lambda:codeuri source
aws lambda update-function-code --function-name  arn:aws:lambda:us-west-2:YOURID:function:YOURFUNCTIONNAME --zip-file file://yourzipfile.zip

需要安装aws-cli并设置aws配置文件

aws --profile yourProfileName configure

1
我之前使用了aws lambda update-function-code命令,它上传了一个zip文件。所以,这不是在重复上传吗?第一次是使用aws lambda,然后又用aws s3 cp上传一遍? - cesarpachon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接