API网关的lambda的AWS SAM更新功能代码

问题描述

我正在将CloudFormation与SAM一起使用以部署包含以下内容的堆栈:

  • S3桶
  • 认知
  • AWS::Serverless::Api
  • AWS::Serverless::Function(授权者+微服务,Type: Api和API网关的端点)
  • 日志组

要部署堆栈,我首先运行aws cloudformation package打包lambda,然后运行aws cloudformation deploy部署生成的堆栈。工作正常。

我现在的目标是能够在不部署整个堆栈的情况下更新微服务(而不是构建授权者和其他微服务),类似于无服务器框架中的serverless deploy function。最好是一个使用宏或仅替换文件中文本的可重用模板。

我正面临的问题:

  • 运行aws lambda update-function-code需要重新部署lambda
  • 要重新部署lambda,我必须声明AWS::Serverless::Function。为了使该函数成为API网关的一部分,还必须声明AWS::Serverless::Api
  • 声明AWS::Serverless::Api需要定义所有其他功能,否则将从API网关中将其删除

我觉得自己被困在这里,没有找到实现目标的其他选择。

解决方法

由于您使用的是SAM,因此建议您使用sam cli commands部署和更新应用程序。

您可以运行

  • sam build
  • sam package
  • sam deploy

运行sam deploy时,它会部署您的应用程序,但是所有后续sam deploy命令将使用仅 相应的命令更新您现有的云信息堆栈需要更新的资源。

如果您选择遵循标准Cloudformation cli命令,则可以使用aws cloudformation update-stack命令,这样就不必重新部署整个新堆栈。