产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

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

评论

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

元宇宙成本高吗?构建元宇宙需要多少钱?

3DCAT实时渲染

元宇宙 元宇宙开发 元宇宙成本

软件测试/测试开发 | Appium环境安装与架构介绍

测试人

软件测试 自动化测试 测试开发 appium

智慧公安!3DCAT实时云渲染助力某公安机关打造数字孪生可视化系统

3DCAT实时渲染

智慧城市 数字孪生 云渲染 实时云渲染

深圳大数据编程培训机构哪家比较靠谱

小谷哥

极光笔记 | 十分钟搞懂手机号码一键登录

极光JIGUANG

前端 接口 sdk 一键登录

工赋开发者社区 | 工业5.0为何是下一个10年的制造业关键性变革方向?

工赋开发者社区

NLP知识图谱项目合集(信息抽取、文本分类、图神经网络、性能优化等)

汀丶人工智能

人工智能 自然语言处理 深度学习 知识图谱

高并发环境下3种方式优化Tomcat性能

华为云开发者联盟

Java 开发 华为云 企业号 1 月 PK 榜

学习大数据怎么选择培训机构?

小谷哥

计算机网络到底应该怎么学?

Java永远的神

程序员 面试 计算机网络 计算机 tcpip

【网络安全】记一次红队渗透实战项目

网络安全学海

网络安全 信息安全 计算机 渗透测试 漏洞挖掘

【必看知识】PCB设计中焊盘的设计标准

华秋PCB

工具 PCB PCB设计

市场上常见的5种LED异形屏

Dylan

LED LED显示屏 led显示屏厂家

汽车虚拟仿真,实时云渲染至关重要!

3DCAT实时渲染

云渲染 虚拟仿真 实时渲染 汽车仿真

如何通过C#/VB.NET在 Excel 中对形状进行分组或取消分组

在下毛毛雨

C# .net Excel

为什么 Go 不支持 []T 转换为 []interface

AlwaysBeta

Go golang 源码 slice interface

Object中的wait和notify方法详解

threedayman

面试 并发编程 java;

上海前端培训学习好就业吗

小谷哥

java课程学习难度怎么样

小谷哥

云上的米开朗基罗:在不确定时代,寻找建筑般的确定性

华为云开发者联盟

云计算 后端 华为云 企业号 1 月 PK 榜

API 网关策略二三事

API7.ai 技术团队

APISIX 网关设计

工赋开发者社区 | 事件驱动架构要避开的 5 个陷阱

工赋开发者社区

直播预告 | 2月2日,腾讯Light与你一同用AI,让美好变更好

腾源会

公益

Lattice在提高低代码平台高可扩展性的实战

原力在线

低代码 轻代码

大数据培训课程后如何找到工作

小谷哥

《鹅鸭杀》爆火,一文带你了解如何实现顶流社交游戏

声网

游戏开发 RTC 应用架构

关于 JavaScript 定时器

devpoint

JavaScript 定时器 setTimeout setInterval

从 JVM 中深入探究 Synchronized

小小怪下士

Java 程序员 JVM synchronize

3DCAT实时云渲染助力VR虚拟现实迈向成熟

3DCAT实时渲染

vr 云渲染 虚拟现实 元宇宙

不看后悔,一文带你入门Go云原生微服务

王中阳Go

golang 高效工作 学习方法 微服务 云原生

云图说 | 华为云主机安全服务(新版)来啦!

华为云开发者联盟

云计算 后端 华为云 云图说 企业号 1 月 PK 榜

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