<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>AWS CodeDeploy &#8211; 顶云课程</title>
	<atom:link href="https://www.iloveaws.cn/tag/aws-codedeploy/feed" rel="self" type="application/rss+xml" />
	<link>https://www.iloveaws.cn</link>
	<description>AWS认证、DevOps与AI工程中文课程</description>
	<lastBuildDate>Sun, 31 Jul 2022 11:01:41 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://www.iloveaws.cn/wp-content/uploads/2019/06/cropped-uugai.com_1560993984449-32x32.png</url>
	<title>AWS CodeDeploy &#8211; 顶云课程</title>
	<link>https://www.iloveaws.cn</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>61-AWS CodeDeploy</title>
		<link>https://www.iloveaws.cn/4397.html</link>
					<comments>https://www.iloveaws.cn/4397.html#respond</comments>
		
		<dc:creator><![CDATA[沉默恶魔]]></dc:creator>
		<pubDate>Wed, 27 Jul 2022 02:19:04 +0000</pubDate>
				<category><![CDATA[11-部署与实例管理]]></category>
		<category><![CDATA[通过AWS SAP认证]]></category>
		<category><![CDATA[AWS CodeDeploy]]></category>
		<guid isPermaLink="false">https://www.iloveaws.cn/?p=4397</guid>

					<description><![CDATA[Hello大家好，我们今天的课时的内容是AWS CodeDeploy]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="576" src="https://resource.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.001-1024x576.jpeg" alt="" class="wp-image-4398" srcset="https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.001-1024x576.jpeg 1024w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.001-460x259.jpeg 460w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.001-768x432.jpeg 768w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.001-1536x864.jpeg 1536w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.001-120x68.jpeg 120w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.001-310x174.jpeg 310w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.001.jpeg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Hello大家好，我们今天的课时的内容是AWS CodeDeploy。</p>



<p class="wp-block-paragraph">AWS CodeDeploy在DevOps PRO认证考试中的考点比较多，在SAP认证考试您需要掌握使用CodeDeploy，将应用程序部署至EC2、ASG、ECS和Lambda的流程，这也是本课时所要讨论的内容。</p>



<h2 class="wp-block-heading">AWS CodeDeploy</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="576" src="https://resource.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.002-1024x576.jpeg" alt="" class="wp-image-4399" srcset="https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.002-1024x576.jpeg 1024w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.002-460x259.jpeg 460w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.002-768x432.jpeg 768w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.002-1536x864.jpeg 1536w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.002-120x68.jpeg 120w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.002-310x174.jpeg 310w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.002.jpeg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>CodeDeploy 是一种部署服务，可以帮助如开发人员将应用程序自动化部署到实例，并根据需求更新应用程序版本</strong>。</p>



<p class="wp-block-paragraph">比如我们有很多EC2实例，目前都在运行应用程序的V1版本，我们可以通过部署新的版本的代码将它们更新至V2版本。</p>



<p class="wp-block-paragraph">注意这些EC2实例不是通过Elasitc Beantalk来管理的，而是使用CodeDeploy Agent，通过CodeDeploy Agent部署以及更新应用程序版本。</p>



<p class="wp-block-paragraph">有很多开源的工具可以在AWS上完成部署任务，如：Ansible，Terraform，Chef，Puppet以及Elasitc Beantalk等等，也同样可以使用我们这个课时讨论的CodeDeploy这个AWS的托管服务，在AWS上进行部署任务。</p>



<p class="wp-block-paragraph">那使用CodeDeploy有什么优势呢？它原生就与EC2 ，Auto Scaling Group ，ECS以及 Lambda进行了很好的集成。</p>



<p class="wp-block-paragraph">所以接下来让我们深入了解下CodeDeploy如何部署代码到这些计算资源。</p>



<h2 class="wp-block-heading">使用CodeDeploy 部署EC2</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="576" src="https://resource.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.003-1024x576.jpeg" alt="" class="wp-image-4400" srcset="https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.003-1024x576.jpeg 1024w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.003-460x259.jpeg 460w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.003-768x432.jpeg 768w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.003-1536x864.jpeg 1536w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.003-120x68.jpeg 120w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.003-310x174.jpeg 310w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.003.jpeg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">首先是使用CodeDeploy 部署 EC2实例，可以通过一个名为AppSpec.yml文件以及部署配置，来定义如何在EC2实例上部署我们的应用程序。</p>



<p class="wp-block-paragraph"><strong>部署配置可以配置是一次性部署所有实例AllAtOnce，还是对所有实例进行分批逐步部署</strong>。</p>



<p class="wp-block-paragraph">可以使用in-place就地部署，就地部署不会创建新的实例而是在原来的EC2实例上进行部署。</p>



<p class="wp-block-paragraph">在每个部署阶段后，我们都可以在EC2上定义hooks验证部署是否有效。</p>



<p class="wp-block-paragraph">除了一次性部署所有实例AllAtOnce这种方式，另外一个部署配置为HalfAtATime，也就是一次部署一半数量。<strong>我们看一下HalfAtATime这个部署流程</strong>：</p>



<p class="wp-block-paragraph">假设我们有4台EC2实例，运行着V1版本，HalfAtATime首先会将其中的一半也就是两台EC2实例先离线，只保留两台运行V1版本的实例提供服务，也就是保留的这两台实例需要暂时承担所有业务的负载；</p>



<p class="wp-block-paragraph">然后将先离线的两台实例更新至V2版本，目前4台实例，两台实例运行V2版本，两台实例运行V1版本。然后同样，将之前未更新的两台V1版本实例离线，然后升级至V2版本。</p>



<p class="wp-block-paragraph">这样就通过HalfAtATime，每次部署一半数量的实例，通过CodeDeploy将四台实例全部部署至V2版本。</p>



<p class="wp-block-paragraph">好，**除此之外还有一个OneAtATime部署配置，每次只部署到一个实例，**这些都是CodeDeploy将代码部署至EC2的不同的部署配置，我们重点掌握上面的这个每次部署一半数量的实例的整个流程。</p>



<p class="wp-block-paragraph">在本例中使用的是in-place也就是就地部署，运行V1版本的实例需要先离线，然后进行部署，更新至V2版本提供服务。</p>



<h2 class="wp-block-heading">使用CodeDeploy 部署ASG内实例</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://resource.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.004-1024x576.jpeg" alt="" class="wp-image-4401" srcset="https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.004-1024x576.jpeg 1024w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.004-460x259.jpeg 460w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.004-768x432.jpeg 768w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.004-1536x864.jpeg 1536w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.004-120x68.jpeg 120w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.004-310x174.jpeg 310w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.004.jpeg 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">好的，接下来讨论使用CodeDeploy 部署 Auto Scaling Group中的EC2实例。</p>



<p class="wp-block-paragraph">部署ASG中的实例有两种方式，<strong>第一种是in-place也就是就地部署</strong>，直接更新当前ASG中所有的EC2实例，ASG的就地部署和上一张PPT中介绍的EC2的就地部署几乎是相同的。</p>



<p class="wp-block-paragraph">另外由ASG新创建的EC2实例也会进行自动化的部署。如果在CodeDeploy部署期间，您的ASG进行了横向扩展创建了新的EC2实例，CodeDeploy也会将应用程序部署至这些新的实例。</p>



<p class="wp-block-paragraph">好，<strong>这是in-place也就是就地部署</strong>。</p>



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



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



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



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



<h2 class="wp-block-heading">使用CodeDeploy 部署Lambda</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://resource.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.005-1024x576.jpeg" alt="" class="wp-image-4402" srcset="https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.005-1024x576.jpeg 1024w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.005-460x259.jpeg 460w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.005-768x432.jpeg 768w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.005-1536x864.jpeg 1536w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.005-120x68.jpeg 120w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.005-310x174.jpeg 310w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.005.jpeg 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">好的，接下来讨论使用CodeDeploy 部署 Lambda。</p>



<p class="wp-block-paragraph">CodeDeploy支持用来部署Lambda函数，部署Lambda函数时支持Traffic Shifting ，即流量转移功能，可以通过配置Lambda的别名指定两个不同的Lambda函数版本，并可以配置两个函数路由流量的比例。</p>



<p class="wp-block-paragraph">同样可以定义hooks，通过配置一个函数用于在部署Lambda函数时，在流量转移前及流量转移后的验证和测试。</p>



<p class="wp-block-paragraph">您可以设置一个CloudWatch Alarms，可非常容易的实现自动回滚动作。</p>



<p class="wp-block-paragraph">最后，如果您使用的是AWS Serverless Application &nbsp; ,SAM，那么您通过SAM部署新的Lambda版本时，SAM原生使用CodeDeploy来进行部署，要记住这一点。</p>



<p class="wp-block-paragraph">我们看一下具体的流程：</p>



<p class="wp-block-paragraph">目前有一个Lambda别名，运行着V1版本的Lambda函数；然后假设我们的CI/CD系统触发了CodeDeploy，CodeDeploy在同一Lambda别名部署Lambda函数的V2版本，注意在目前的阶段Lambda函数的V2版本还没有流量。</p>



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



<p class="wp-block-paragraph">如果V2函数能够正常工作并通过测试，那么CodeDeploy将使用Lambda别名的Traffic Shifting ，流量转移功能，开始在V1和V2版本的函数之间转移流量，然后从现在开始V2版本函数开始接收流量。</p>



<p class="wp-block-paragraph">您也可以配置一个CloudWatch Alarms来监控您的Lambda函数的各种指标，可以实现如果触发CloudWatch Alarms，然后CodeDeploy自动回滚之前的部署，将环境回滚至Lambda函数的V1版本。</p>



<p class="wp-block-paragraph">最后，如果Traffic&nbsp; Shifting流量转移完成，流量全部转移至V2版本的函数后，还会运行一个Post-Traffic的Hook，也就是流量转移后的Hook，是您定义的另外的一个Lambda函数，它的作用是当流量转移至V2函数后，做一些测试确认。</p>



<p class="wp-block-paragraph">如果一切顺利，V1版本的函数就完成使命了，Lambda别名中V2的Lambda函数接收流量提供服务。</p>



<p class="wp-block-paragraph">好的，这就是使用CodeDeploy 部署 Lambda的一些关键的知识点，我们要了解Lambda别名的Traffic Shifting 流量转移功能 ，以及Pre-Traffic Hook 和 Post-Traffice Hook，这两个用于在部署Lambda函数的&nbsp; 流量转移前 及 流量转移后 测试部署的Lambda函数。</p>



<h2 class="wp-block-heading">使用CodeDeploy 部署ECS</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://resource.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.006-1024x576.jpeg" alt="" class="wp-image-4403" srcset="https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.006-1024x576.jpeg 1024w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.006-460x259.jpeg 460w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.006-768x432.jpeg 768w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.006-1536x864.jpeg 1536w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.006-120x68.jpeg 120w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.006-310x174.jpeg 310w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.006.jpeg 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">最后，使用CodeDeploy 部署 ECS。</p>



<p class="wp-block-paragraph">对于ECS和Fargate，同样支持蓝/绿部署，要注意这些相关的配置是在ECS服务进行配置，而不是在CodeDeploy的控制台。</p>



<p class="wp-block-paragraph">部署方式大致和前面介绍的服务是一样的，先创建一个新的任务集，然后将流量路由至新任务集。</p>



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



<p class="wp-block-paragraph">同样，我们看下整个的流程：</p>



<p class="wp-block-paragraph">前端会配置一个应用程序负载均衡器，ECS服务挂在ALB下面。</p>



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



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



<p class="wp-block-paragraph">好的，以上就是CodeDeploy所有的内容，希望本课时能够给大家带来帮助。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://resource.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.007-1024x576.jpeg" alt="" class="wp-image-4404" srcset="https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.007-1024x576.jpeg 1024w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.007-460x259.jpeg 460w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.007-768x432.jpeg 768w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.007-1536x864.jpeg 1536w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.007-120x68.jpeg 120w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.007-310x174.jpeg 310w, https://www.iloveaws.cn/wp-content/uploads/2022/07/55-AWS-CodeDeploy-.007.jpeg 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">希望此系列教程能为您通过 AWS解决方案架构师认证 Professional 认证考试带来帮助，如您有任何疑问，请联系我们：</p>



<ul class="wp-block-list"><li>如果您想获取本课程全部课时，请扫PPT的二维码加入。</li><li><a href="http://xn--awswww-y50k01m049ahdz76jqs0a27b.iloveaws.cn/">AWS爱好者的网址是www.iloveaws.cn</a>，认证视频课程，免费的认证考试仿真题以及认证课程文章，都可以在网站找得到</li><li>可以通过扫码加入【AWS爱好者】微信公众号，查看原创的AWS知识点相关文章。</li><li>加入【AWS爱好者】微信群，和其他同学一起备考，以及探讨交流AWS相关知识。</li></ul>



<p class="wp-block-paragraph">我们今天的视频课程就到这里，感谢大家的观看，我们下一课程再见。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.iloveaws.cn/4397.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
