写点什么

自动化部署服务——AWS CodeDeploy 快速入门

  • 2019-11-15
  • 本文字数:3091 字

    阅读完需:约 10 分钟

自动化部署服务——AWS CodeDeploy 快速入门

作为 DevOps 和微服务的深入践行者,Amazon 在内部积累了许多持续集成、交付和部署的自动化工具和平台。其中, Apollo 作为代码部署的自动化平台,每年进行超过 5000 万次部署。


为了能够让广大开发者和企业用户使用到功能丰富且久经考验的代码部署平台,在 Apollo 的经验基础上,AWS 发布了自动化部署服务——CodeDeploy。

平台介绍

AWS CodeDeploy 旨在帮助用户完成应用的快速部署,按照用户指定的策略将代码部署在一组 EC2 服务器上。用户策略可以包括集群部署速度、部署事件通知、警报处理策略等。此外,CodeDeploy 还可以和弹性负载均衡(Elastic Load Balancer)、自动扩展组(Auto Scaling Group)等服务结合,完成无缝升级和动态部署。


为方便有效地组织部署任务,CodeDeploy 设立了三个概念:应用(Application)、部署(Deployment),以及部署配置(Deployment Configuration)。



1)应用程序(Application)



应用程序是部署的核心,由部署组(Deployment Group)和代码修订(Revisions)组成。一个应用可以包含多个部署组,一个部署组又可以包含多台 EC2 服务器。同时,一个服务器也可以属于多个部署组,因为一个服务器可能同时运行多个应用。


1.1)部署组



创建或修改部署组时,如果添加 EC2 服务器,可以通过标签(Tag)对已有的 EC2 服务器进行筛选。所以,在创建 EC2 时一定要打上标签(Tag),便于在创建应用的部署组时找到对应业务的服务器。


此外,部署组还可以添加自动扩展组(Auto Scaling Group),以及用户自己机房的主机(On-Premise Instance)。


1.2)代码修订


代码修订保存了当前应用涉及到得所有代码,代码的存放位置可以在 S3 或 Github。


如果用户自建代码托管,当需要部署时,可以在工作机上同步代码到本地,然后使用 AWS 命令行进行打包上传。


aws deploy push --application-name <MyAppName> \


--s3-location s3://<MyBucketName>/<MyNewAppBundleName> \


--source <PathToMyBundle>


上面的命令可以将运行目录下得代码打包上传到 S3,同时显示在关联应用的代码修订一栏中。


2)部署(Deployment)



每一次部署都有唯一的 ID 标记,并保存所有信息,如代码来源、部署时间、目标服务器、部署结果等。并且针对每一台服务器,都可以详细查看部署过程中的事件(如下载程序、安装前检查、 程序启动、安装后检查等 7 个事件),以便追踪部署的各个步骤。当部署出错时,可以快速定位和排查。



3)部署配置(Deployment Configuration)


部署配置存放了一次部署的服务器台数或百分比,在发起部署时需要指定所需配置。CodeDeploy 默认提供了三种配置:一次部署一台、一次部署一半数量的服务器,以及一次完成全部部署。部署发起后,CodeDeploy 会按照上述策略进行工作,指导完成部署组内全部服务器的更新。



如果用户要自定义部署策略,建议使用命令行完成。比如下面的例子创建的配置就是一次完成 20%的服务器部署。


aws deploy **create**-deployment-config --deployment-config-name ThreeQuartersHealthy --minimum-healthy-hosts type=FLEET_PERCENT,value=20


此外,CodeDeploy 还可以管理物理主机(或第三方主机)。只要在物理主机上安装和配置 CodeDeploy Agent,Agent 向 CodeDeploy 注册完成后,CodeDeploy 就可以像管理 EC2 服务器一样在物理服务器上部署应用。

服务器配置

CodeDeploy 是通过与部署在服务器上的 Agent 通信,实现代码部署的。


1)服务器角色


由于 Agent 需要访问 S3 下载代码,所以 EC2 服务器需要配置角色(Role)以保证 Agent 对 S3 的读取权限。创建一个 IAM Policy 包含如下内容,在创建所需的角色关联这个 Policy。然后,在创建 EC2 服务器时,关联此角色。


{


"Version": "2012-10-17",


"Statement": [


{


"Action": [


"s3:Get*",


"s3:List*"


],


"Effect": "Allow",


"Resource": "\*"


}


]


}


2)Agent 安装


Agent 可以在创建 EC2 时通过 User Data 安装,也可以登录到服务器上安装。


如果使用 User Data 安装,模板如下:


#!/bin/bash


yum -y update


yum install -y ruby


yum install -y aws-cli


cd /home/ec2-user


aws s3 cp s3://bucket-name/latest/install . --region region-name


chmod +x ./install


./install auto


其中,关于 bucket-name 和 region-name,请查阅下面链接,找到对应 Region 的替换名称。


https://docs.aws.amazon.com/codedeploy/latest/userguide/how-to-set-up-new-instance.html


例如,北京 Region 的 User Data 是:


#!/bin/bash


yum -y update


yum install -y ruby


yum install -y aws-cli


cd /home/ec2-user


aws s3 cp s3://aws-codedeploy-cn-north-1/latest/install . --region cn-north-1


chmod +x ./install


./install auto


如果是选择先创建 EC2 服务器,再安装 Agent,请注意使用 sudo 以 root 权限安装。详情请见:


https://docs.aws.amazon.com/codedeploy/latest/userguide/how-to-run-agent-install.html


部署完成后,使用如下命令检验 Agent 是否工作正常。


sudo service codedeploy-agent status


用户端配置


建议 AWS 命令行工具(https://aws.amazon.com/cn/cli/),作为开发流程工具,CodeDeploy 的功能可以通过命令行快速完成,而不必使用图形界面。安装完成后的配置方法请参考:https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html


如前文所述,用户可以通过 aws deploy push 命令来完成代码打包上传。但打包内容除了应用程序代码外,还包含了一个 AppSpec.yml 文件和一些用于处理安装中一个或多个事件的脚本。



AppSpec.yml 脚本不仅定义了代码部署的路径,而且指定了部署过程中相关事件的处理脚本。部署事件有 7 个,可以按需选择指定。



用户把代码、AppSpec.yml、事件脚本通过 aws deploy push 命令打包上传后,用户就可以通过 CodeDeploy 图形化平台选择对应的代码修订(Revision)进行部署了。当然,继续使用命令行进行部署,更是高效的方法。


此外,CodeDeploy 还可以和常见的持续集成工具协同工作,如 Jenkins、Travis CI 等。

案例分享

GILT 是一家专注服饰的电商平台,成立于 2007 年,总部位于纽约,员工超过 1000 人。 2016 年 1 月,GILT 以 2 亿 5 千万美金的价格被收购。


GILT 的特色业务之一就是促销,并且是在每天中午开售。为了能够灵活、快速地应对业务压力,GILT 的 DevOps 团队基于微服务来设计和部署平台,并采用了 Docker 提高平台的弹性。其部署平台经历过数次演化,目前是第五代平台 NOVA(代码已开源)。CodeDeploy 在最新一代的平台中,结合 Cloudformation 完成核心部署工作,NOVA 通过 AWS API/SDK 完成对 CodeDeploy 和 Cloudformation 的调用。



扩展阅读


The Story of Apollo – Amazon’s Deployment Engine


http://www.allthingsdistributed.com/2014/11/apollo-amazon-deployment-engine.html


AWS Codedeploy plugin for Jenkins


https://wiki.jenkins-ci.org/display/JENKINS/AWS+Codedeploy+plugin


AWS CodeDeploy for Travis CI


https://docs.travis-ci.com/user/deployment/codedeploy


GILT NOVA


https://github.com/gilt/nova


作者介绍



代闻


AWS 解决方案架构师,负责基于 AWS 的云计算方案架构的咨询和设计,同时致力于 AWS 云服务在国内的应用和推广,在大规模后台架构、物联网应用、媒体行业转型、企业混合 IT 和自动化运维等方面有着广泛的设计和实践经验。在加入 AWS 之前,在思科中国担任系统工程师,负责方案咨询和架构设计,在企业私有云和基础网络方面有丰富经验。曾任 IBM 中国软件开发中心软件工程师,从事企业软件和移动平台的开发工作。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/getting-started-with-codedeploy/


2019-11-15 08:001295

评论

发布
暂无评论
发现更多内容

二十年,三条路:国产CPU的“饱和式救援”

脑极体

cpu

AntDB数据库助力中国移动结算中心建设

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库

Datawhale学习笔记【阿里云天池 金融风控-贷款违约预测】Task2 数据分析

一颗小树

tomcat8和tomcat7性能比较

五毛

tomcat 压测分析

2022大数据产业年度“国产化优秀代表厂商”榜单发布,亚信科技AntDB数据库位列其中

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库

2022最新MySQL高频面试题汇总

程序员大彬

MySQL 数据库 计算机

“祝福海报”小程序走红,AIGC走进“千家万户”

科技热闻

QEMU与KVM架构介绍

Linux内核拾遗

Linux 虚拟化 qemu kvm

湖仓一体电商项目(十七):业务实现之编写写入DIM层业务代码

Lansonli

湖仓一体电商项目

【最佳实践】TiDB 同步&迁移实战 (从 MySQL/Oracle/PostgreSQL/MongoDB 到 TiDB )

TiDB 社区干货传送门

全球化商家平台技术探索与演进

阿里技术

全球化 架构演进

设计文档概述

五毛

设计原则

“信”创未来 | AntDB数据库2022年度总结,请查收!

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库

模块二作业 (架构实战训练营)

Justin

架构实战营

KaiwuDB 数据服务平台 1.0 产品详解

KaiwuDB

时序数据库 多模数据库 数据服务平台

C#/VB.NET 在 Word 表格中插入或提取图像

在下毛毛雨

C# .net 提取图像 word表格 添加图片

亚信科技AntDB数据库荣获2022年度技术卓越奖

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库

深入浅出学习透析Nginx服务器的架构分析及原理分析「底层技术原理+运作架构机制」

码界西柚

nginx 负载均衡 反向代理 优化架构

从管事到管人

石云升

极客时间 1月月更 技术领导力实战笔记

TiDB PPT玩家快速点评 V6.5 新特性

TiDB 社区干货传送门

版本测评

Java高手速成 | 多态性实战

TiAmo

编程语言 多态 Java 开发

英特尔2022技术创新和产品发布盘点:深耕硬核创新,助推数字未来

科技热闻

2022下半年盘点:20+主流数据库重大更新及技术要点汇总

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库

开源SPL强化MangoDB计算

石臻臻的杂货铺

开源 SPL

正式起航!用友23大行业客户与解决方案事业部全面亮相

用友BIP

用友BIP

有什么方法从 PostgreSQL 数据迁移到 TiDB ?

TiDB 社区干货传送门

迁移 实践案例 管理与运维

TiDB CDC v6.5.0 新特性实践

TiDB 社区干货传送门

实践案例 新版本/特性发布 6.x 实践

中原银行对金融行业实时数仓的现状与发展趋势思考

Apache Flink

大数据 flink 实时计算

赛意信息张成康:在行业场景驱动下为企业创造数字化价值

科技热闻

视觉模型 ConvNeXt V2,结合纯卷积与MAE

Zilliz

计算机视觉

TiCDC 源码解读(4)-- TiCDC Scheduler 工作原理解析

TiDB 社区干货传送门

TiCDC 源码解读

自动化部署服务——AWS CodeDeploy 快速入门_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章