参考资料
- https://docs.amazonaws.cn/codedeploy/latest/userguide/reference-appspec-file-structure-hooks.html
- https://docs.amazonaws.cn/zh_cn/codedeploy/latest/userguide/applications.html
- 为 EC2/本地蓝/绿部署创建部署组(控制台)
部署ec2比较简单,只需要创建EC2/On-premises类型的codedeploy应用,之后在应用中创建部署组
-
部署组可以选择
-
在参考中可以找到示例程序,https://docs.amazonaws.cn/codedeploy/latest/userguide/resource-kit.html
下面主要内容为部署过程中的注意事项
启动4台ec2实例
但凡是蓝绿部署,就必然要提供两组资源,下面的配置使用部署中的实例替换部署组中的实例
创建部署组,在部署组中指定green实例
在部署中指定blue实例
创建部署,由于我们提供了blue组,因此创建资源的步骤直接被跳过
可以查看具体实例的部署事件
使用asg模板的额外权限问题
已经为codedeploy服务角色附加了AWSCodeDeployRole
托管策略,但是仍旧出现以下没有权限的错误
在cloudtrail中同样能够看到错误的调用记录(CreateAutoScalingGroup
和RunInstances
),检查文档后发现
如果创建具有启动模板的 Auto Scaling 组,则必须添加以下权限:
ec2:RunInstances
ec2:CreateTags
iam:PassRole
部署位置已经存在
需要手动修改部署的覆盖配置
部署过程
asg会创建额外数量的实例来完成部署
每个具体的部署都可以视为一个ec2实例的部署,我们在之前的文章中已经讨论过常见的单一实例部署错误的排查
蓝绿部署生命周期
ec2进行蓝绿部署的生命周期示意图如下
替代实例的生命周期
C:\Users\ASUS\Nutstore\1\embedded\每日任务\assets\image-20230331004846505.png
旧实例的生命周期
之后需要手动进行旧实例的terminate操作
注意到原来的asg被删除,创建了新的asg作为替代,此时不要手动terminate实例,否则会导致asg删除失败