AWS 的 CodeDeploy 是如何做部署教程
AWS 发布了 CodeDeploy ,从此有了 Service 的概念,对运维来说表示很惊喜,试想有了发布服务,开发自己可以搞定服务的发布,需要运维的需求进一步减小了,我感到 NOSA 的那一天就近了一步。
好吧,来看看 CodeDepoly 是如何做 部署 的,对我们自己做发布系统有什么启示,不过我最后发现自己做一套类似的系统也很简单。
先看几个关键字:
1. Application
2. Deployment Group
3. Auto Scaling Group
4. Security Group
5. Service Role
Application ,就是应用的意思,一个 Application 可以有多个 Deployment Group ,我理解 Application 是服务的集合,而下面的每一个 Deployment Group 都代表着每一个「子服务」。
一个 Deployment Group 是一组被部署的 instance ,它可以包括 由 key 来指定的数个instance,也可以是 Auto Scaling Group;
Deployment Group 里的 instance 最好在一个 Security Group ;
Service Role 则是用来控制权限,CodeDepoly 需要访问EC2 的instance,所以定义一个Service Role 来界定。
部署的 instance 事实上要满足几个条件:
1. instance 要绑定一个IMA role (就是上面说的Service Role ),而且IMA role 要有「正确」的权限。
2. instance 要由 Tag,以供 Deployment Group 使用。
3. 要在每台 instance 安装 CodeDeploy Agent 。
这几个条件具体可以参考官方文档
部署过程如下图:
灰色的部分由 CodeDeploy Agent 自动完成,比如下载包,包的地址可以选择 「 S3 」或者 「Github」 ;
黄色(是黄色吗?)则由我们自己定义,分别是 「停止应用」、「安装前准备」、「安装之后动作」、「启动应用」、「确认服务」,这些规则写在一个 APPSpec 文件里,而且名字必须为 appspec.yml ,并且它要在 「包」 的 「根目录」。
appspec.yml 文件示例:
version: 0.0 os: linux files: - source: /index.html destination: /var/www/html/ hooks: BeforeInstall: - location: scripts/install_dependencies timeout: 300 runas: root - location: scripts/start_server timeout: 300 runas: root ApplicationStop: - location: scripts/stop_server timeout: 300 runas: root |
另外 AWS 提供了 Deployment Configuration,默认有三种:
1. One at a Time ,也就是 一个一个部署,一台失败就失败;
2. Half at a Time,一次部署一半的 instance,只要超过一半成功就算成功;
3. All at Once,一次部署所有 instance,只要有一台成功就算成功。
当然,AWS 也提供自定义,你可以自定义 发布过程至少有 多少个 instance 或者 至少 百分之多少 的 instance 成功,发布就算成功。