写点什么

使用 AWS CodeDeploy 和 Auto Scaling 组实现蓝绿部署

  • 2019-11-12
  • 本文字数:4419 字

    阅读完需:约 14 分钟

使用AWS CodeDeploy和Auto Scaling组实现蓝绿部署
_原文:


https://aws.amazon.com/blogs/devops/performing-bluegreen-deployments-with-aws-codedeploy-and-auto-scaling-groups/


_


_作者:Jeff Levine,Amazon Web Services解决方案架构师_
---
AWS提供的服务能够帮助大家利用云的力量来满足开发和部署的需求。AWS CodeDeploy可自动将代码部署到Amazon EC2或本地实例,并支持蓝绿部署方式。在这篇博文中,将讨论蓝绿部署的好处,并展示如何实现。
**蓝绿部署的好处**
蓝绿部署涉及两个生产环境:
* 蓝色环境指代正在使用的生产环境。* 绿色环境则将发布一个新版本。
以下是蓝绿部署的一些优点:
* 可在绿色环境下进行测试,而不会中断蓝色环境。* 切换到绿色环境不需要停机,只需要重定向用户流量。* 问题发生时,可很方便地从绿色环境回滚到蓝色环境,只要将流量重定向回蓝色环境即可,而无需重新构建。* 需要变更时,利用不可变基础设施原则初始化新的实例,避免实例配置产生不一致性。
**AWS CodeDeploy提供了两种蓝绿部署的方式:**
* 第一种,AWS CodeDeploy为Auto Scaling组创建了副本,启用新的Amazon EC2实例,将应用程序部署到这些新实例,然后重定向用户流量重定到新部署的代码。* 第二种,可使用实例标签或Auto Scaling组来选择用于绿色环境的实例。AWS CodeDeploy会将代码部署到标记的实例上。
那么,如何设置你的第一个蓝色环境?最佳做法,当然是采用AWS CodeDeploy的in-place部署方式。当然也可以从已有的空白Auto Scaling组开始。
**蓝绿部署的示例**
我们来看一下如何使用Auto Scaling组来实现蓝绿部署。
**概述**
下图中,示例环境包括一组Amazon EC2实例,可作为AWS CodeDeploy的工作站。服务发布管理员或开发人员可以使用此工作站部署新版本的代码。蓝色环境包含一个Auto Scaling组,其中另有两个实例用作Web服务器。 Web服务器,最初将包含应用程序的第一个版本和AWS CodeDeploy客户端。负载均衡器以轮转的方式,将流量引导到两个Web服务器。
服务发布管理员使用工作站实例,将新版本的应用程序推送到AWS CodeDeploy,并启动蓝绿部署。 AWS CodeDeploy会创建Auto Scaling组的副本,启动两个新的Web服务器实例,并安装新版本的应用程序,然后将负载均衡器重定向到新实例。 原实例仍然是原Auto Scaling组的一部分。 如果需要,均可重新关联到负载均衡器中。
[](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2017/07/24/20170723-1.png)](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2017/07/24/20170723-1.png)
**构建该示例的先决条件**
以下是需要的准备工作。
* 具有使用Amazon EC2,Amazon S3,Amazon VPC,AWS CodeDeploy和AWS CloudFormation权限的IAM用户。* 选定构建示例环境的AWS区域和可用区域。* Amazon EC2密钥对。* 熟悉上述服务和AWS管理控制台,如何连接到Amazon EC2实例。
**其他注意事项**
本示例中,您将会为使用到的基础AWS服务付费,本例中提供的资源仅为培训目的。 在实施与本博文中描述的类似技术时,请务必考虑相关的安全需求。
#### 步骤1:创建初始环境
1. 下载包含示例模板的存档,并将其保存在相应的目录。https://github.com/awslabs/codedeploy-blue-green/
2. 登录到AWS管理控制台并打开AWS CloudFormation控制台,网址为 https://console.aws.amazon.com/cloudformation/
3. 如果这是一个新的AWS CloudFormation帐户,请单击**创建新堆栈** 。 否则,单击**创建堆栈** 。
4. 在**将模板上传到Amazon S3**选项中 ,单击**Choose File**,从您下载的存档中选择YAML文件,然后单击下一步 。
5. 在**指定详细信息的堆栈名称**中,输入bluegreen 。
6. 在**AZName**中 ,选择一个可用区域。 (在这篇博文中,使用us-east-1a)
7. 在**BlueGreenKeyPairName**中 ,选择要使用的密钥对。
8. 在**NamePrefix**中 ,使用bluegreen的默认值,除非已经运行了以bluegreen开头的名称的应用bluegreen 。NamePrefix用于为创建的资源分配名称标签。 单击**下一步** 。
9. 在**选项**页面上,单击**下一步** 。
10. 选择**确认框**以允许创建IAM资源,然后单击**创建** 。CloudFormation将需要大约10分钟来创建示例环境。除了创建图中所示的基础设施之外,CloudFormation模板还设置了一个AWS CodeDeploy应用程序和蓝绿部署组。
#### 步骤2:查看初始环境
1. 看看CloudFormation的堆栈输出。应该会看到以下类似内容。 WorkstationIP是工作站实例的IP地址。 AutoScalingGroup和LoadBalancer是由CloudFormation为Auto Scaling组和弹性负载均衡器创建的DNS名称。
[](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2017/07/24/20170723-2.png)](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2017/07/24/20170723-2.png)
2. 将LoadBalancer值复制到浏览器中并浏览到该链接,将会显示以下应用程序。这是一个PHP应用程序,用来查询Amazon EC2实例的元数据。 如果刷新页面,则会根据轮转的负载均衡算法,看到IP地址和实例ID的变化。
[](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2017/07/24/20170723-3.png)](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2017/07/24/20170723-3.png)
3. 回到EC2控制台,查看实例。将看到与此示例相关联的三个运行中的实例:工作站和Auto Scaling组创建的两个Web服务器实例。这些Web服务器实例构成蓝色环境。
[](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2017/07/24/20170723-4.png)](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2017/07/24/20170723-4.png)
#### 步骤3:部署新版本的代码
1. 通过WorkStationIP中显示的地址,连接到工作站实例 。这个实例正在运行Ubuntu操作系统,用户名是ubuntu 。登录后,将看到两个目录:scripts目录包含Bourne shell脚本;newversion目录包含对PHP应用程序的更新。
2. 以下是newversion/content/index.php中新版本的PHP代码。 与最初安装代码的唯一区别是应用程序版本号。
[](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2017/07/24/20170723-5.png)](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2017/07/24/20170723-5.png)
3. 现在看下面的scripts/pushnewversion.sh的shell脚本。使用aws deploy push命令,将代码打包,上传到Amazon S3。
[](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2017/07/24/20170723-6.png)](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2017/07/24/20170723-6.png)
4. 运行pushnewversion.sh脚本,将看到一条消息,告诉您如何使用AWS命令行解释器来部署代码,不过这里我们将使用AWS CodeDeploy控制台来部署。
5. 打开AWS CodeDeploy控制台 https://console.aws.amazon.com/codedeploy/
6. 点击bluegreen-app的链接。 如果选择了**NamePrefix**的默认名称,请改为单击该名称,展开**Revisions**,将看到刚从工作站实例推送的修订版本,单击**Deploy revision** 。
7. 在**Create Deployment**页面上,选择bluegreen-app应用程序和bluegreen-dg部署组。保留所有其他默认值,然后单击**Deploy**。AWS CodeDeploy将配置Auto Scaling组和实例,部署代码,设置运行状况检查以及将流量重定向到新实例。这个过程需要几分钟。部署完成后,如下图所示。由于部署组中的设置,AWS CodeDeploy会跳过终止原始实例这一步。
[](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2017/07/24/20170723-7.png)](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2017/07/24/20170723-7.png)
#### 步骤4:查看更新的环境
1. 在浏览器上打开负载均衡器的DNS地址。应该看到新版本的应用程序,如下图所示。应用程序版本从1变为2,如预期。
[](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2017/07/24/20170723-8.png)](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2017/07/24/20170723-8.png)
2. 回到EC2控制台并查看实例。将看到已被Auto Scaling组标记的四个实例。 IP地址为10.200.11.11和10.200.11.192的实例是我们在蓝色环境中看到的。部署过程创建了现在属于绿色环境的IP地址为10.200.11.13和10.200.22的实例。
[](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2017/07/24/20170723-9.png)](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2017/07/24/20170723-9.png)
3. 转到Auto Scaling组控制台 。将看到现在有两个Auto Scaling组,每个组有两个实例。 名称以CodeDeploy开头的Auto Scaling组是在部署过程中创建的。
[](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2017/07/24/20170723-10.png)](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2017/07/24/20170723-10.png)
4. 使用AWS CodeDeploy已经成功完成了蓝绿部署。
#### 步骤5:清理
1. 重新登录到到AWS CodeDeploy工作站实例。
2. 运行scripts/cleanup.sh脚本。 将会删除部署包并关闭Auto Scaling组。
3. 转到CloudFormation控制台,选择之前创建的堆栈,然后将其删除。
**结论**
AWS CodeDeploy帮助开发人员将代码部署自动化到Amazon EC2和本地实例。其蓝绿部署选项帮助服务发布管理员,创建新的生产环境,并在问题出现时非常便捷地回滚到之前的环境。 有关AWS CodeDeploy的更多信息,请参阅AWS CodeDeploy文档 。现在,您只需点击几次即可开始使用。
在蓝绿的世界中享受生活!
**译者介绍**
[](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2017/07/24/henry_huang.jpg)](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2017/07/24/henry_huang.jpg)
黄帅,AWS中国专业服务的咨询顾问,主要为企业客户提供云架构设计、迁移技术指导和DevOps落地实践。加入AWS之前,有多年企业产品SaaS转型的研发和运维经历,以及丰富的DevOps实战经验。
复制代码


TAGS:


Auto Scaling


,


AWS CodeDeploy


,


大咖专栏


,


蓝绿部署


,


计算


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/performing-bluegreen-deployments-with-aws-codedeploy-and-auto-scaling-groups/


2019-11-12 08:00644

评论

发布
暂无评论
发现更多内容
使用AWS CodeDeploy和Auto Scaling组实现蓝绿部署_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章