如何在SAM模板中指定现有FunctionName以更新AWS Lambda函数?
解决SAM部署更新现有Lambda函数的问题
我之前也碰到过这个情况,确实AWS文档里说得很清楚:FunctionName参数只在创建新Lambda函数时生效,没法用来更新已经存在的、不在当前SAM栈管理下的函数。给你几个实用的解决办法:
1. 用sam sync快速同步(推荐)
这是SAM专门为本地代码同步到云端资源设计的命令,完美适配更新现有Lambda的场景,不需要修改你的template.yaml。只需要在终端运行:
sam sync --function 你的现有Lambda函数名称
它会自动把本地构建好的代码包上传到指定的Lambda函数,全程不需要创建新资源,直接更新现有函数的代码和配置(如果有改动的话)。
2. 将现有Lambda导入SAM栈管理
如果想把这个现有Lambda纳入SAM栈的统一管理,后续用sam deploy正常更新,可以用CloudFormation的资源导入功能:
- 第一步:修改你的
template.yaml,移除FunctionName字段,确保模板里Lambda的其他属性(比如Runtime、Handler、Role等)和现有函数完全一致; - 第二步:执行导入命令,把现有函数绑定到你的SAM栈:
aws cloudformation import-resources --stack-name 你的SAM栈名称 --resources '[{"ResourceType": "AWS::Lambda::Function", "LogicalResourceId": "模板里的Lambda逻辑ID", "ResourceIdentifier": {"FunctionName": "你的现有Lambda函数名称"}}]' - 导入完成后,后续再运行
sam deploy就可以正常更新这个函数了,CloudFormation会识别它是已导入的资源,执行更新操作而非创建新函数。
3. 结合SAM构建+CLI手动更新(适合简单场景)
如果只是临时更新代码,也可以先通过SAM构建代码包,再用AWS CLI命令上传:
# 先构建代码包 sam build # 上传到现有Lambda aws lambda update-function-code --function-name 你的现有Lambda函数名称 --zip-file fileb://.aws-sam/build/你的Lambda逻辑ID/你的Lambda代码包.zip
这个方式比较直接,适合不需要纳入栈管理的一次性更新场景。
内容的提问来源于stack exchange,提问作者Tamajin
相关产品推荐
相关产品推荐

