61-AWS CodeDeploy

Hello大家好,我们今天的课时的内容是AWS CodeDeploy。

AWS CodeDeploy在DevOps PRO认证考试中的考点比较多,在SAP认证考试您需要掌握使用CodeDeploy,将应用程序部署至EC2、ASG、ECS和Lambda的流程,这也是本课时所要讨论的内容。

AWS CodeDeploy

CodeDeploy 是一种部署服务,可以帮助如开发人员将应用程序自动化部署到实例,并根据需求更新应用程序版本

比如我们有很多EC2实例,目前都在运行应用程序的V1版本,我们可以通过部署新的版本的代码将它们更新至V2版本。

注意这些EC2实例不是通过Elasitc Beantalk来管理的,而是使用CodeDeploy Agent,通过CodeDeploy Agent部署以及更新应用程序版本。

有很多开源的工具可以在AWS上完成部署任务,如:Ansible,Terraform,Chef,Puppet以及Elasitc Beantalk等等,也同样可以使用我们这个课时讨论的CodeDeploy这个AWS的托管服务,在AWS上进行部署任务。

那使用CodeDeploy有什么优势呢?它原生就与EC2 ,Auto Scaling Group ,ECS以及 Lambda进行了很好的集成。

所以接下来让我们深入了解下CodeDeploy如何部署代码到这些计算资源。

使用CodeDeploy 部署EC2

首先是使用CodeDeploy 部署 EC2实例,可以通过一个名为AppSpec.yml文件以及部署配置,来定义如何在EC2实例上部署我们的应用程序。

部署配置可以配置是一次性部署所有实例AllAtOnce,还是对所有实例进行分批逐步部署

可以使用in-place就地部署,就地部署不会创建新的实例而是在原来的EC2实例上进行部署。

在每个部署阶段后,我们都可以在EC2上定义hooks验证部署是否有效。

除了一次性部署所有实例AllAtOnce这种方式,另外一个部署配置为HalfAtATime,也就是一次部署一半数量。我们看一下HalfAtATime这个部署流程

假设我们有4台EC2实例,运行着V1版本,HalfAtATime首先会将其中的一半也就是两台EC2实例先离线,只保留两台运行V1版本的实例提供服务,也就是保留的这两台实例需要暂时承担所有业务的负载;

然后将先离线的两台实例更新至V2版本,目前4台实例,两台实例运行V2版本,两台实例运行V1版本。然后同样,将之前未更新的两台V1版本实例离线,然后升级至V2版本。

这样就通过HalfAtATime,每次部署一半数量的实例,通过CodeDeploy将四台实例全部部署至V2版本。

好,**除此之外还有一个OneAtATime部署配置,每次只部署到一个实例,**这些都是CodeDeploy将代码部署至EC2的不同的部署配置,我们重点掌握上面的这个每次部署一半数量的实例的整个流程。

在本例中使用的是in-place也就是就地部署,运行V1版本的实例需要先离线,然后进行部署,更新至V2版本提供服务。

使用CodeDeploy 部署ASG内实例

好的,接下来讨论使用CodeDeploy 部署 Auto Scaling Group中的EC2实例。

部署ASG中的实例有两种方式,第一种是in-place也就是就地部署,直接更新当前ASG中所有的EC2实例,ASG的就地部署和上一张PPT中介绍的EC2的就地部署几乎是相同的。

另外由ASG新创建的EC2实例也会进行自动化的部署。如果在CodeDeploy部署期间,您的ASG进行了横向扩展创建了新的EC2实例,CodeDeploy也会将应用程序部署至这些新的实例。

好,这是in-place也就是就地部署

还有一种部署类型为蓝/绿部署,在这种情况下会根据之前的配置创建一个新的 Auto Scaling Group部署应用程序新版本,然后会将现有业务流量切换到新的 Auto Scaling Group内的实例。可以配置部署完成后如何处理旧的实例。蓝/绿部署必须要使用ELB。

我们来看下部署流程:这里有个ALB在提供服务,然后下面挂着一个 Auto Scaling Group。CodeDeploy可以将您的应用程序部署到ASG中的EC2实例,假设目前我们已经在ASG内启动的EC2实例上部署了应用程序为V1版本;即使当这个Auto Scaling Group扩展启动了新的EC2实例,CodeDeploy也是足够的智能,能够将应用程序部署到新启动的实例上。

假设我们现在需要使用蓝/绿部署将V2版本部署到实例并提供服务,那么CodeDeploy会创建一个新的 Auto Scaling Group及在组内根据配置启动新的实例用于部署,然后CodeDeploy会将新的ASG内的实例部署至V2版本。这时V1版本和V2版本的ASG同时存在;然后如果一切顺利的话,V2版本的ASG的EC2实例开始向ELB注册,流量开始路由到这些新的V2版本的实例。最终原始环境中的V1实例将取消注册,并根据部署配置进行处理:要么终止,要么继续运行。到现在整个蓝/绿部署完成。

好,从使用蓝/绿部署 部署ASG实例的整个流程中可以了解到,蓝/绿部署将启动新的实例,并在新的实例部署新版本的应用程序,之后在完成流量切换对外提供新版本服务;而前面的in-place也就是就地部署,是在同一个实例上进行部署,就是在原实例上先停止服务,然后在同一实例部署新版本并提供服务,至于具体使用哪种部署方式需要根据您自身的需求。

使用CodeDeploy 部署Lambda

好的,接下来讨论使用CodeDeploy 部署 Lambda。

CodeDeploy支持用来部署Lambda函数,部署Lambda函数时支持Traffic Shifting ,即流量转移功能,可以通过配置Lambda的别名指定两个不同的Lambda函数版本,并可以配置两个函数路由流量的比例。

同样可以定义hooks,通过配置一个函数用于在部署Lambda函数时,在流量转移前及流量转移后的验证和测试。

您可以设置一个CloudWatch Alarms,可非常容易的实现自动回滚动作。

最后,如果您使用的是AWS Serverless Application   ,SAM,那么您通过SAM部署新的Lambda版本时,SAM原生使用CodeDeploy来进行部署,要记住这一点。

我们看一下具体的流程:

目前有一个Lambda别名,运行着V1版本的Lambda函数;然后假设我们的CI/CD系统触发了CodeDeploy,CodeDeploy在同一Lambda别名部署Lambda函数的V2版本,注意在目前的阶段Lambda函数的V2版本还没有流量。

然后,如果我们配置了流量转移前的hook,CodeDeploy就会先运行它,这个hook是配置的另外的一个Lambda函数,作用是测试V2的Lambda函数是否运行正常,也被称为Pre-Traffic Hook。

如果V2函数能够正常工作并通过测试,那么CodeDeploy将使用Lambda别名的Traffic Shifting ,流量转移功能,开始在V1和V2版本的函数之间转移流量,然后从现在开始V2版本函数开始接收流量。

您也可以配置一个CloudWatch Alarms来监控您的Lambda函数的各种指标,可以实现如果触发CloudWatch Alarms,然后CodeDeploy自动回滚之前的部署,将环境回滚至Lambda函数的V1版本。

最后,如果Traffic  Shifting流量转移完成,流量全部转移至V2版本的函数后,还会运行一个Post-Traffic的Hook,也就是流量转移后的Hook,是您定义的另外的一个Lambda函数,它的作用是当流量转移至V2函数后,做一些测试确认。

如果一切顺利,V1版本的函数就完成使命了,Lambda别名中V2的Lambda函数接收流量提供服务。

好的,这就是使用CodeDeploy 部署 Lambda的一些关键的知识点,我们要了解Lambda别名的Traffic Shifting 流量转移功能 ,以及Pre-Traffic Hook 和 Post-Traffice Hook,这两个用于在部署Lambda函数的  流量转移前 及 流量转移后 测试部署的Lambda函数。

使用CodeDeploy 部署ECS

最后,使用CodeDeploy 部署 ECS。

对于ECS和Fargate,同样支持蓝/绿部署,要注意这些相关的配置是在ECS服务进行配置,而不是在CodeDeploy的控制台。

部署方式大致和前面介绍的服务是一样的,先创建一个新的任务集,然后将流量路由至新任务集。

在部署完成后,CodeDeploy将检查在一定的时间内新部署是否稳定。然后如果一切顺利,旧的任务集将会被终止。就是说如果您需要,可以预留一些时间观察/发现问题。

同样,我们看下整个的流程:

前端会配置一个应用程序负载均衡器,ECS服务挂在ALB下面。

ECS服务启动了一个ECS任务—ECS任务定义1,然后 CodeDeploy开始蓝/绿部署,也将会使用流量转移功能,ECS服务会启动过一个新的任务集,任务定义2,并挂到ALB下。然后CodeDeploy开始进行流量转移,下面的这个截图是CodeDeploy的截图,可以看到流量转移正在进行,原始的实例目前有60%的流量,而替换的实例有40%的流量,随着时间的推移流量转移将会逐渐完成。然后CodeDeploy将检查在一定的时间内新部署是否稳定,如果一切顺利,旧的任务集、ECS任务定义1将会被终止,CodeDeploy成功部署了ECS,整个流程结束。

好的,通过以上内容,可以了解到通过CodeDeploy来对几个计算资源进行部署时,他们的大致的流程基本是一样的。只是每个服务有各自的一些功能特性,而CodeDeploy也是利用这些服务的特性来完成部署以及切换流量等任务。对于参加SAP认证考试,将这4种资源的部署流程搞清楚基本就差不多了。

好的,以上就是CodeDeploy所有的内容,希望本课时能够给大家带来帮助。

希望此系列教程能为您通过 AWS解决方案架构师认证 Professional 认证考试带来帮助,如您有任何疑问,请联系我们:

  • 如果您想获取本课程全部课时,请扫PPT的二维码加入。
  • AWS爱好者的网址是www.iloveaws.cn,认证视频课程,免费的认证考试仿真题以及认证课程文章,都可以在网站找得到
  • 可以通过扫码加入【AWS爱好者】微信公众号,查看原创的AWS知识点相关文章。
  • 加入【AWS爱好者】微信群,和其他同学一起备考,以及探讨交流AWS相关知识。

我们今天的视频课程就到这里,感谢大家的观看,我们下一课程再见。

2022年7月31日

0 responses on "61-AWS CodeDeploy"

Leave a Message

Setup Menus in Admin Panel

error: Content is protected !!