我使用CloudFormation和SAM来部署一个包含以下内容的堆栈:
- S3铲斗
- Cognito
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命令部署和更新应用程序。
你可以运行
sam build
sam package
sam deploy
当您运行sam deploy
时,它会部署您的应用程序,但所有后续的sam deploy
命令将仅使用需要更新的适当资源来更新您现有的云信息堆栈。
如果选择使用标准的Cloudformation cli命令,则可以使用aws cloudformation update-stack
命令,这样就不会重新部署整个新堆栈。