使用Jenkins部署AWS Lambda函数的配置逻辑疑问
问题原因解答
核心原理误解点
你不会得到16个Lambda函数的核心原因是aws lambda update-function-code命令的作用是更新已存在的Lambda函数代码,而非自动创建新的Lambda函数,你的整个部署流程从头到尾只操作了你预先定义的4个函数资源。
具体拆分说明
- 你在
functions数组里定义的4个函数名称MoviesStoreListMovies、MoviesStoreSearchMovie、MoviesStoreViewFavorites、MoviesStoreAddToFavorites,必然是你提前已经在AWS平台(控制台/CLI/CloudFormation等方式)创建好的独立Lambda资源,每个资源有唯一的函数名、独立的运行配置。 - 每个Lambda函数都有单独的处理程序(Handler) 配置项,哪怕你的zip包里包含了4份函数的全量代码,单个Lambda运行时只会执行你给它配置的指定入口文件的导出方法,其他冗余代码不会被触发,更不会自动生成新的函数。比如
MoviesStoreListMovies的Handler大概率配置的是src/movies/findAll/index.handler,即使包里还有其他3个函数的代码,它也只会执行这个指定入口的逻辑。 - 你当前部署流程的实际行为:
- Build阶段生成1份包含所有4个函数代码的zip包
- Push阶段把同一份zip包重复上传到S3桶的4个不同路径下,对应4个函数的存储路径
- Deploy阶段循环4次,分别给4个已有的Lambda函数更新代码,每次调用
update-function-code都只是更新对应函数的代码版本,不会产生新的函数资源
常见误区说明
你混淆了「代码包里的文件数量」和「AWS Lambda的资源数量」的关系:代码包只是函数运行的代码载体,一个Lambda对应一个独立的云上资源,你需要多少个Lambda,就需要先创建多少个对应的资源,仅通过更新代码的操作永远不会自动生成新的函数。
内容的提问来源于stack exchange,提问作者toto'
相关产品推荐
相关产品推荐

