如何通过AWS SAM强制重新部署Lambda函数(无代码变更场景)
实现Lambda函数强制重新部署的方法
一、通过AWS SAM实现强制部署
- 利用元数据触发变更:在Lambda函数的SAM资源定义中添加
Metadata字段,自定义一个可手动更新的标识(如版本号、时间戳)。每次部署前修改该标识的值,CloudFormation会识别为资源元数据变更,从而触发函数重新部署。示例:
Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: CodeUri: ./src/ Handler: index.handler Runtime: python3.11 Metadata: ForceDeployVersion: "202405201430" # 每次部署前更新该值
- 使用SAM CLI强制上传参数:执行部署命令时添加
--force-upload参数,该参数会强制上传函数代码包,即便代码无变更,也会触发重新部署:
sam deploy --template-file template.yaml --stack-name my-stack --force-upload
二、CloudFormation原生解决方案
- 自定义参数触发变更:在模板中定义一个
ForceDeployToken参数,每次部署时传入不同值(如时间戳),并将其作为Lambda函数的环境变量。CloudFormation检测到环境变量变更后,会重新部署函数。示例:
Parameters: ForceDeployToken: Type: String Default: !Sub "${AWS::StackName}-${AWS::Timestamp}" Resources: MyLambdaFunction: Type: AWS::Lambda::Function Properties: Code: S3Bucket: my-code-bucket S3Key: lambda-package.zip Handler: index.handler Runtime: python3.11 Environment: Variables: FORCE_DEPLOY_TRIGGER: !Ref ForceDeployToken
- 更新函数描述字段:每次部署时修改Lambda函数的
Description属性(比如加入当前时间戳),CloudFormation会识别为资源属性变更,执行重新部署。
三、AWS CLI直接操作
若无需通过基础设施即代码工具,可直接调用Lambda API强制更新函数:
aws lambda update-function-code --function-name MyLambdaFunction --s3-bucket my-code-bucket --s3-key lambda-package.zip --publish
该命令会强制发布函数新版本,即使代码包与现有版本一致。
内容的提问来源于stack exchange,提问作者Wind Rise
相关产品推荐
相关产品推荐

