问题描述
我正在将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
命令,这样就不必重新部署整个新堆栈。