使用 AWS CodeDeploy 和 Auto Scaling 组实现蓝绿部署
- 2019-11-12
本文字数:4419 字
阅读完需:约 14 分钟

_作者: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实战经验。
本文转载自 AWS 技术博客。
原文链接:
更多内容推荐
AWS 云上微服务及无服务器架构探秘
AWS云上微服务及无服务器架构探秘
Glassfish Tools Bundle for Eclipse 发布了
Sun今天发布了GlassFish Tools Bundle for Eclipse,它可以在Eclipse环境下创建并使用GlassFish应用。
使用 QuTrunk+Amazon ParallelCluster3 进行并行计算
1.丘秉宜;2.邵伟;3.黄文;4.郭梦杰;5.刘利;6.刘波
2022-12-27
AWS 推出 4TB 内存的虚拟机
AWS现在拥有内存最大的云虚拟机x1e.32xlarge,一种内存优化的EC2实例。AWS的用户可以在他们的生产环境使用这种实例来处理有大内存需求的应用,如SAP HANA和内存数据库。
AWS Lambda 现已支持.NET Core 2.0
Amazon宣称.NET Core 2.0现在已经支持AWS Lambda以及无服务器应用程序了。开发者们现在可以使用C#和.NET Core 2.0来编写Lambda函数和运行于AWS的无服务器应用程序了。
结果测试 & 结束语
2020-05-28
Python 应用之哥德巴赫猜想——偶数
将6-99之间的偶数都表示成两个素数之和,输出时每行输出5组。
2022-10-07
结课测试 | 这些物联网的问题,你都掌握了吗?
《物联网开发实战》课程结课了,来做一个小测试吧!
2021-01-18
直播预告|一站式 MLOps meetup,洞见行业前沿!聆听第四范式、AWS、腾讯、百度的 MLOps 落地、演进、实践经验
一站式MLOps平台是AI工程化领域中的重要工具,它能够帮助企业实现从模型训练到上线部署的全生命周期管理。由星策社区举办的“一站式 MLOps Meetup”围绕这一主题展开,将于3月26日(周日)13:00-17:00 火热展开!
2023-03-23
技术架构与智能设备选型
2019-12-18
四点聚焦亚马逊 2022 财报,AWS 收入 801 亿美元,同比增长 20%,年度增长率 29%
撰文/宇婷
2023-02-07
AWS 推出奖励计划,资助机器学习研究
亚马逊网络服务(AWS)今天宣布了一项新的奖励计划,旨在资助学术研究者使用AWS云平台进行机器学习研究。AWS机器学习研究奖将向学术机构提供一次性无限制奖励,以及可以使用AWS云平台的积分。
Amazon Web Services 发布 AWS Tools For Windows PowerShell
近日,Amazon Web Services(AWS)发布了针对Windows PowerShell脚本环境的工具以增强对Windows管理员的云基础设施管理的支持。
结课测试 & 结束语
2020-09-03
【第三周】代码重构
一. 面向对象的设计模式
2020-10-08
PriorityQueue 源码解析 (二)
PriorityQueue 源码解析(二)
2022-10-16
结课测试 | 这些正则知识,你都掌握了吗?
为了帮助你检验自己的学习效果,我特别给你准备了一套结课测试题。这套测试题共有20道题目,满分100分。
2020-07-20
工赋开发者社区 | MES 与 ERP/APS/PLM 等的系统集成技术
MES系统集成需求
2023-04-09
下载安装 Selenium IDE:下载安装 Chrome、Firefox 插件 IDE
2020-07-30
推荐阅读
每周一起背 10 句 | week 09
2020-07-11
亚马逊 AWS 发布用于本地数据中心的 Linux 容器镜像
一带一路上的中国品牌!AWS 助力中国新能源车企走向世界!
2021-02-02
建设企业级微前端方案
2020-01-20
AWS 中国区换帅:张文翊被任命全球副总裁及大中华区执行董事
集群与外部间的安全通信
2019-08-28
AWS Mobile Hub 旨在简化 Android 与 iOS 应用中 AWS 的使用
电子书

大厂实战PPT下载
换一换 
余枝强 | 华为 终端软件部 / UI 框架首席架构师
彭力 | 小米 人工智能部/知识图谱平台团队负责人
颜叶 | 华为 计算产品线/鲲鹏计算产品部部长
评论