写点什么

自动化部署服务——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:001207

评论

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

第3期 | 立势 万物互联、全域融通

用友BIP

项目管理

带宽优化新思路:RoCE网卡聚合实现X2增长

华为云开发者联盟

开发 华为云 宽带 网卡 华为云开发者联盟

天启科技联创郭志强:趟遍教育行业信数化沟坎,创业智能赛道重塑行业生态

科创人

35岁,互联网技术岗,何去何从?

老张

职业发展 35岁焦虑

大模型训练:文件保存类型与优化策略

百度开发者中心

大模型训练 千帆大模型平台

优化模型之“标注错误”

矩视智能

深度学习 机器视觉

2023-10-07:用go语言,给定n个二维坐标,表示在二维平面的n个点, 坐标为double类型,精度最多小数点后两位, 希望在二维平面上画一个圆,圈住其中的k个点,其他的n-k个点都要在圆外。

福大大架构师每日一题

福大大架构师每日一题

这些负载均衡都解决哪些问题?服务、网关、NGINX

王中阳Go

nginx 负载均衡 微服务 面试题 网关

这款可视化拖拽式低代码平台,真香!

树上有只程序猿

低代码平台 JNPF

LLMops:大模型时代的运维与部署之道

百度开发者中心

大模型 LLMOps 千帆大模型平台

六个讨厌 Tailwind CSS 的理由

高端章鱼哥

CSS Tailwind

新云原生项目Kmesh正式开源,华为云持续创新,加速行业智能化升级

华为云开源

开源 云原生

TDengine OSS 与 qStudio 实现无缝协同,革新数据分析和管理方式

TDengine

时序数据库 ​TDengine

华为云CodeArts Check代码检查服务用户声音反馈集锦(8)

华为云PaaS服务小智

云计算 软件开发 华为云

和鲸联合南开大学赵宏教授,共建新文科计算机交叉课程

ModelWhale

人才培养 数据科学 高等教育 新文科 双一流

对话在行人|达梦数据库:通过数智化转型推进国产替代

用友BIP

对话在行人

软件测试/测试开发丨Python模块与包 学习笔记

测试人

Python 程序员 软件测试

docker制作springboot镜像

tiandizhiguai

镜像 Docker 镜像 kubernetes 运维

搭建Llama2大模型训练环境的关键要素

百度开发者中心

大模型训练 千帆大模型平台

大语言模型黑盒被打破;Meta 元宇宙硬件亏损可能高于市场共识丨 RTE 开发者日报 Vol.60

声网

软件测试/测试开发丨Python异常处理 学习笔记

测试人

Python 程序员 软件测试 异常处理

音视频关键技术盘点!小白入行指南

X2Rtc

音视频 RTC

玻璃led显示屏与透明led显示屏有区别

Dylan

安装 维护 LED显示屏 led显示屏厂家 设备日常保养

GaussDB(DWS)实践案例丨MERGE场景下语句不下推引起的性能瓶颈问题

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟

【央企】一体化资金结算领先实践 统一集中 安全可控 实时高效

用友BIP

领先实践 央企资金管理

C4D梦幻色彩的3种表现方法

Finovy Cloud

C4D

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