Amazon web services AWS Lambda和zip从S3上传

Amazon web services AWS Lambda和zip从S3上传,amazon-web-services,aws-lambda,Amazon Web Services,Aws Lambda,我不清楚此功能的好处(我没有找到任何好的文档): 对于许多lambda函数重复使用同一个zip,因为您只上传了1次,并且只为每个lambda函数提供了S3链接URL,这样会更快吗 如果您使用S3链接,当您重新上传zip文件时,是否会自动用最新代码更新所有lambda函数,这意味着S3上的zip文件是每次调用lambda函数时使用的“参考”文件 多谢各位 编辑: 有人问我:“为什么要为多个Lambda函数使用相同的代码?” 因为我将AWS Lambda与AWS API网关一起使用,所以我有一个包含

我不清楚此功能的好处(我没有找到任何好的文档):

  • 对于许多lambda函数重复使用同一个zip,因为您只上传了1次,并且只为每个lambda函数提供了S3链接URL,这样会更快吗
  • 如果您使用S3链接,当您重新上传zip文件时,是否会自动用最新代码更新所有lambda函数,这意味着S3上的zip文件是每次调用lambda函数时使用的“参考”文件 多谢各位

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

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

    如果AWS人员阅读了此消息,最好有一种批量更新功能,可以在S3上用一个zip文件在一次单击中更新一组选定的lambda函数(或者甚至有一种“自动更新”功能,可以检测文件何时被更新;-)

    假设您在一个项目中有50个处理程序,然后您修改了影响所有处理程序的全局处理程序,当前您必须完成所有lambda函数并手动更新zip文件…

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

    所以对于问题1:不。为什么你希望多个Lambda函数使用相同的代码呢


    问题2:如果覆盖zip,您将不会更新Lambda功能代码。

    为了回答我认为是您问题的本质,AWS允许您使用S3作为Lambda zip文件的来源,因为有时通过浏览器上载大文件可能会超时。此外,将代码存储在S3上可以让您集中存储代码,而不是存储在计算机上,而且我相信这里也有一个CodeCommit接口


    使用S3方法将代码上载到Lambda还允许您上载更大的文件(AWS在通过web浏览器上载时有10MB的限制)。

    要添加到其他人的用例中,从S3更新Lambda函数的能力在自动化部署/CI过程中非常有用

    下面的说明包括一个简单的Lambda函数,可用于将ZIP文件从S3复制到Lambda本身,以及在上载新文件时触发其执行的说明

    作为开发和部署的一个示例,我当前的工作流程是:

  • 我在本地机器上更新我的节点lambda应用程序,并
    git commit
    将其提交到远程存储库

  • 一个Jenkins实例获取提交,提取适当的文件,将它们添加到ZIP文件中,并将其上传到S3存储桶中

  • LambdaDeployment函数会自动为我部署这个新版本,而我甚至不需要离开我的开发环境

  • 取决于aws cli安装和aws配置文件设置

    aws --profile yourProfileName configure
    

    昨天我从浏览器上传了一个35MB的文件;-)目前,Lambda包的解压缩内容有262MB(262144000字节)的限制。我认为您还可以使用1个Lambda函数和API网关映射模板来解决这个问题。我对多个端点使用一个Lambda函数,并在每个端点的映射模板中指定一个额外值(每个端点都是唯一的),该值进入单个Lambda函数的
    事件
    ,以区分不同的端点请求。好的,谢谢您的建议。所以我猜你有一个处理程序,它根据输入或上下文中的某个变量充当调度器?没错!变量在映射模板中硬编码(每个端点不同)。顺便说一句,我想这意味着您需要使用“全局”类进行输入,包含所有端点可以接收的所有可能变量?您可以使用S3存储桶上的触发器在上载文件时自动更新一组lambda函数。@AdrianWragg很好的建议,我已经在其他方面使用了事件功能,但这意味着你使用另一个Lambda函数来更新其他函数的代码,对吗?在我的例子中,我使用Java并将Maven发布到S3存储桶中,因此我考虑使用一个本地脚本调用AWS命令行界面(更新函数代码)。你是对的,是的-我在下面的回答中给出了更多细节,它还包括一个指向脚本的链接,您可以根据自己的需求进行调整。我使用了aws lambda更新函数代码,它上载了zip文件。那么,你不是上传了两次吗?第一个是aws lambda,第二个是aws s3 cp?
    aws --profile yourProfileName configure