东亚银行、岚图汽车带你解锁 AIGC 时代的数字化人才培养各赛道新模式! 了解详情
写点什么

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


公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2019-11-15 08:001045

评论

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

Hook 技术初探,【2021Android最新学习路线

android 程序员 移动开发

HTTPS详解,谈谈我认为的高级Android开发到底应该是怎样的

android 程序员 移动开发

javascript中的原型与对象(一),12个View绘制流程高频面试题

android 程序员 移动开发

IOC架构设计之控制反转和依赖注入(一),2021大厂Android面试经验

android 程序员 移动开发

Java泛型,安卓面试项目经验

android 程序员 移动开发

GitHub 上优质项目整理,推荐一个GitHub项目

android 程序员 移动开发

Google禁止Android-11-自定义-Toast-了?,android开发实战数据

android 程序员 移动开发

Handler源码分析之二 异步消息的处理,2021金三银四面试季

android 程序员 移动开发

Git各指令的本质,真是通俗易懂啊,h5移动端开发进行定位

android 程序员 移动开发

Gradle多维度使用,h5开发移动端

android 程序员 移动开发

IT-架构师绝对不能错过的-34-技术知识图谱帮你轻松拿下大厂offer

android 程序员 移动开发

GitHub标星3(1),腾讯Android开发面试记录

android 程序员 移动开发

GitHub标星3-5K+【Android校招面试指南,flutter中文本框的长度

android 程序员 移动开发

Gson 解析 Json 容错才是关键,举几个常用的实例!,android开发视频百度网盘

android 程序员 移动开发

Java虚拟机相关面试题,android系统开发面试

android 程序员 移动开发

Jetpack Compose初体验,flutter游戏开发

android 程序员 移动开发

GitHub标星3,Android面试

android 程序员 移动开发

Groovy脚本基础全攻略,重磅

android 程序员 移动开发

IT圈的“年龄歧视”,移动互联网app开发实例

android 程序员 移动开发

恒源云(GPUSHARE)_云GPU服务器如何使用Tmux?

恒源云

深度学习

HashMap 源码解析二、put 相关函数,android原生开发教程

android 程序员 移动开发

IOC架构设计之Dagger2架构设计(三),进阶加薪全靠它

android 程序员 移动开发

万字解读鸿蒙轻内核物理内存模块

华为云开发者联盟

鸿蒙 内存 虚拟内存 物料内存 内存页

GitHub标星9K的Google官方MVP+Rxjava项目详解,靠这份资料我从6K变成了40K

android 程序员 移动开发

Kubernetes + 焱融 SaaS 数据服务平台,个性化需求支持就没输过

焱融科技

云计算 分布式 高性能 公有云 文件存储

🍃【Spring专题】「实战系列」重新回顾一下Spring框架的异步执行调用的原理和实战

洛神灬殇

spring 异步编程 异步调度 11月日更

Java虚拟机相关面试题(1),整理出Android逆向系列学习进阶视频

android 程序员 移动开发

Java面试题八:抽象类和接口的区别,移动端开发技术创新

android 程序员 移动开发

移动端1px解决方案

CRMEB

如何实现高效运维?来谈谈性能优化那些事(含直播回顾 Q&A)

墨天轮

oracle 性能优化

Glide源码学习五:回调与监听,Android快速转战Kotlin教程

android 程序员 移动开发

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