AWS的自动部署工具codedeploy概述和主要组件

codedeploy概述:

codedeploy是aws上面的一个自动部署服务,能够自动的将应用程序部署到EC2实例、本地实例(任意的线上或线下本身的一台机器)、无实例的lamda函数、ECS上面。git

能够部署的应用程序包括:代码、无服务器的lamda函数、web和配置、可执行文件、包、脚本、多媒体文件。github

能够部署到一个或数千个实例。web

CodeDeploy提供了两种部署类型选项:

1)就地部署:中止部署组中每一个实例上的应用程序,安装最新的应用程序修订版,并启动并验证新版本的应用程序。您可使用负载平衡器,以便在部署期间取消注册每一个实例,而后在部署完成后恢复为服务。只有使用EC2 / On-Premises计算平台的部署才能使用就地部署。json

工做原理:建立可部署的内容,添加应用程序规范文件 (AppSpec文件:定义了CodeDeploy执行的部署操做),将可部署内容和AppSpec文件捆绑到存档文件中,而后上传到s3或github中,此时的归档文件称为应用程序修订版  -->  告诉codedeploy新代码或部署内容在哪,codedeploy调用一组EC2  -->  每台EC2上面的EC2实例轮询codedeploy,肯定在哪得到新的内容和时间  -->  每一个实例上的CodeDeploy代理从S3或GitHub上提取新代码,并使用AppSpec文件中的指令将内容部署到实例。服务器

2)蓝绿部署:蓝/绿部署将应用程序原始环境中的流量从新路由到替换环境,环境取决于codedeploy应用程序的计算平台app

AWS Lambda:流量从 Lambda 函数的一个版本转移到同一 Lambda 函数的新版本。负载均衡

Amazon ECS:流量从 Amazon ECS 服务中的任务集转移到同一 Amazon ECS 服务中更新的替换任务集。函数

EC2/本地:流量从原始环境中的一组实例转移到一组替换实例。测试

全部 AWS Lambda 和 Amazon ECS 部署都是蓝/绿部署。EC2/本地部署能够是就地部署或蓝/绿部署。蓝绿部署相比较就地部署的优点:spa

1)能够在新的替换环境中安装和测试应用程序,在部署的时候只须要从新路由流量就能够应用到生产环境中;

2)若是是EC2或本地实例,切换回最新的程序版本将更快,更可靠。这是由于只要原始实例没有被终止,流量就能够路由回原始实例,而在就地部署中,必须从新部署上一个版本的应用程序来进行回滚;

3)若是生产环境使用的是EC2或本地实例,则会为蓝绿部署预置新的实例,而且新实例是最新的服务器配置,能够避免生产实例长时间运行出现的问题;

4)若是使用的是lambda计算平台,则须要控制流量如何从原始地lambda函数版本转移到新的lambda函数版本。

例:在EC2或本地实例上作蓝绿部署:

(使用蓝绿部署必须使用AWS的EC2实例,不但是本地实例);若是使用EC2或本地计算平台必须有一个或多个带有标识的EC2标签或EC2 Auto Scaling 组的 EC2 实例(这些实例必须知足:每一个EC2实例必须附加有正确的IAM实例配置文件,而且在每台实例上安装运行codedeploy代理);一般,您还会有一个在原始环境中的实例上运行的应用程序修订,但这对蓝/绿部署来讲不是必需的。

当建立使用蓝绿部署的部署组的时候,能够选择如何指定替换环境:{

复制现有 Amazon EC2 Auto Scaling 组:在蓝绿部署中,codedeploy将在部署期间为替换环境建立实例,CodeDeploy 将使用指定的 Amazon EC2 Auto Scaling 组做为替换环境的模板,其中包括相同数量的正在运行的实例和许多其余配置选项。

手动选择实例:使用 Amazon EC2 实例标签或 Amazon EC2 Auto Scaling 组名称指定要计为替换项的实例,选择了此项,在部署前无需指定替换环境的实例。

操做方式:

1)已有充当原始环境的一些实例或一个 Amazon EC2 Auto Scaling 组。首次运行蓝/绿部署时,您一般使用已在就地部署中使用的实例;

2)在codedeploy中建立一个蓝绿部署,在其中除了就地部署所需的选项以外,还要指定如下内容:

在蓝/绿部署过程期间,将流量从您原始环境路由到替换环境的负载均衡器。

当即将流量从新路由到替换环境仍是等待您手动路由。

流量路由到替换实例的速率。

被替换的实例是终止仍是继续运行。

3)为此部署建立了一个部署将会发生如下状况:

若是选择复制 Amazon EC2 Auto Scaling 组,则将为您的替换环境预置实例;

指定部署的应用程序将安装在替换环境上;

若是在部署组中设置了等待时间,部署将暂停,这是是对替换环境测试和验证的时间,若是未在等待以前进行手动路由流量,部署将中止;

替换环境中的实例向 Elastic Load Balancing 负载均衡器注册,流量开始路由到这些实例;

原始环境中的实例将取消注册,并根据部署组中的规范进行处理,要么终止,要么继续运行。

 

codedeploy的主要组件:

应用:惟一标识要部署的应用程序的名称。代码部署使用此名称 (用做容器), 以确保在部署过程当中引用修订、部署配置和部署组的正确组合。

计算平台:codedeploy部署应用程序的平台。EC2/本地:能够做为 Amazon EC2 云实例或本地服务器的物理服务器实例。使用 EC2或本地计算平台建立的应用程序能够包括可执行文件、配置文件和映像等。使用 EC2/本地 计算平台的部署经过使用就地部署或蓝/绿部署类型,管理流量定向到实例的方式。

部署配置:codedeploy在部署期间使用的一组部署规则、部署成功条件、失败条件。若是部署采用的是EC2或本地实例,能够为部署指定最少数量的运行正常实例。

部署组:一组单独的实例。部署组包含单独标记的实例或 Amazon EC2 Auto Scaling 组中的 Amazon EC2 实例

部署类型:用于在部署组中的实例上,提供最新的的应用程序修订的方法。

IAM实例配置文件:一种附加到EC2实例的IAM角色。此配置文件包含了访问S3和github的访问权限。

修订:lambda部署修订是一种yaml格式或json格式的文件,指定有关要部署的lambda函数的信息。EC2本地部署修订是一个存档文件,包含源内容(源代码、网页、可执行文件和部署脚本)以及 application specification file (AppSpec file)。AWS Lambda 修订可存储在 Amazon S3 中。EC2/本地 修订存储在 Amazon S3 或 GitHub 中。

服务角色:一组用于向aws服务授予权限即可以访问aws服务资源的IAM角色,在codedeploy中,服务角色用于:

读取应用于实例的标记与实例关联的EC2 auto scaling 组名,这使codedeploy可以标识它,可将应用程序部署到实例;(使codedeploy对实例有部署的权限,)

对实例、EC2 auto scaling 组和elastic load balancing负载均衡器执行操做;(有执行操做的权利)

将信息发布到aws SNS主题,以便在发生指定的部署或实例事件时发送通知;(使codedeploy有发送信息到SNS的权利)

检索cloudwatch警报信息,设置部署的警报监视。

目标版本:将要部署的目标版本