https://docs.aws.amazon.com/zh_cn/codedeploy/latest/userguide/reference-appspec-file.html
https://docs.aws.amazon.com/zh_cn/lambda/latest/dg/with-s3-example.html
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.rolling-version-deploy.html
部署策略
- 一次部署全部(All at once): Elastic Beanstalk 将环境的 Amazon EC2 实例拆分为各个批,并将新版本的应用程序一次部署到一个批中。运行旧版应用程序的环境中的其余实例将会保留。在滚动部署期间,一些实例通过旧版本的应用程序处理请求,而已完成批次中的实例通过新版本处理其他请求。
- 滚动部署(Rolling):Elastic Beanstalk 将环境的 Amazon EC2 实例拆分为各个批,并将新版本的应用程序一次部署到一个批中。运行旧版应用程序的环境中的其余实例将会保留。在滚动部署期间,一些实例通过旧版本的应用程序处理请求,而已完成批次中的实例通过新版本处理其他请求。
- 额外批量滚动(Rolling with additional batch):要在部署期间保持完整容量,可以配置环境以启动新的实例批次,然后再禁用任何实例。
- 不可变的(Immutable): 启动在单独的 Auto Scaling 组中运行新版本应用程序的一组完整的新实例,以及运行旧版本的实例。不可变的部署会阻止由部分完成的滚动部署导致的问题。如果新实例未通过运行状况检查,则 Elastic Beanstalk 将终止这些实例,并使原始实例保持不变。
- 流量拆分(Traffic splitting):允许您在应用程序部署过程中执行 Canary 测试。在流量拆分部署中,Elastic Beanstalk 启动一整套新实例,就像在不可变部署期间一样。然后,它在指定的评估期内将指定百分比的传入客户端流量转发到新的应用程序版本。如果新实例保持正常状态,则 Elastic Beanstalk 会将所有流量转发给它们并终止旧实例。如果新实例未通过运行状况检查,或者您选择中止部署,则 Elastic Beanstalk 会将流量移回旧实例并终止新实例。从不会有任何服务中断。