基于AWS CloudFormation 的基础设施自动化部署设计与实现
2023-06-09苏翔宇
苏翔宇
(深圳技师学院信息与通信学院,深圳 518116)
0 引言
自2006 年亚马逊AWS 公司提出 “云计算”的概念以来,云计算技术在短短十几年间实现了突飞猛进的发展,云计算行业的规模已经达到万亿级别以上,其地位已经超越传统的物理数据中心,成为新一代的IT基础设施。
成千上万的企业想要把自己的业务迁移到“云” 上,如何快速高效地实现云中各种基础设施和服务的部署?传统的通过手动在云中配置云资源的方式效率低下且容易出错。如何避免大量重复的基础设施配置操作并降低部署故障率? 一种将基础设施视为代码的AWS CloudFor⁃mation 服务, 有效地解决了以上问题。 AWS CloudFormation 服务使用JSON 或YAML 语言编写的模板构建堆栈部署云资源,对堆栈创建、更新、删除的整个生命周期进行管理,实现了云中基础设施部署的自动化[1]。
1 云迁移中的基础设施部署
1.1 云迁移中的基础设施部署
在当前工信部倡导百万企业上云的趋势下,越来越多的企业响应号召开始了上 “云” 之路,准备将全部或部分业务迁移到云上。由于很多企业原有的IT 基础架构和业务系统功能不同,其云迁移的方案也各不相同,但在迁移中有关网络等基础设施的部署都是必须的,要在云中先把基础设施部署完成,才能着手迁移具体的业务[2]。
当前的云计算服务提供商很多,以亚马逊AWS 公有云为例,云中的基础设施主要包括区域与可用区、VPC 与子网、安全组和网络ACL、路由表、负载均衡器、防火墙、计算资源、存储资源等,如图1 所示。无论是哪种云迁移方案,从传统的本地IT 系统迁移到云中的这些基础设施资源都是必须的,基础设施迁移方案的准确与否是云迁移最终能否成功的关键。
图1 云迁移中的基础设施对应
1.2 自动化部署基础设施的必要性与可行性
鉴于基础设施在云中部署的先行性和重要性,企业在做云迁移时务必格外重视,但绝大多数企业在云中部署基础设施都是采用手动的形式,这样做的劣势显而易见,每次操作的方案随机性大,部署的稳定性欠缺,大量重复性操作,复用性差且方案更新难度大[3]。
AWS CloudFormation服务用代码构建云中的基础设施,支持JSON 或YAML 语言,用户可以使用堆栈文件包含所有用到的云资源,比如网络资源、计算资源、存储资源等,编辑完成之后运行即可在云中直接生成这些基础设施。除此之外,AWS CloudFormation服务还可以对整个堆栈进行生命周期管理,这种自动化的部署和管理极大地降低了云中基础设施构建的难度以及之后堆栈运维的复杂程度,还为将来的升级提供了堆栈更新等简便易用的功能,可谓一举多得。
2 基于AWS CloudFormation的自动化部署方案
下面以一家中小企业的云迁移案例为例制定了一套使用AWS CloudFormation服务部署基础设施的方案,方案具体包括网络层、应用层、更新堆栈三个部分。
2.1 部署网络层
对于云中基础设施和服务的部署要遵循合理的顺序,才能保障部署任务顺利完成,通常情况下首先要完成的是网络层的部署。以下以构建VPC和子网为例,介绍使用AWS CloudFor⁃mation服务部署网络层的实现方案:
以上建立了一个地址范围是10.0.0.0/16的VPC,为该VPC关联了一个互联网网关,互联网网关是VPC中的云资源通往互联网的媒介。然后在VPC中构建了一个地址范围是10.0.0.0/24的公有子网,并为该公有子网关联了公有路由表,保证公有子网中的计算资源可以通过公有路由表经由互联网网关访问互联网。
2.2 部署应用层
在完成了基本的网络层部署之后,接下来要部署应用层资源,下面以EC2 虚拟机为例介绍计算资源的具体部署方案,包括虚拟机镜像的选择、初始化安装的软件和服务、公有网络地址分配、安全组的定义等,具体方案如下:
AmazonLinuxAMIID:
Type: AWS::SSM::Parameter::Value
Default: /aws/service/ami⁃amazon⁃linux⁃latest/amzn2⁃ami⁃hvm⁃x86_64-gp2
WebServerInstance:
Type: AWS::EC2::Instance
Metadata:
'AWS::CloudFormation::Init':
packages:
yum:
httpd:[]
files:
/var/www/html/index.html
services:
sysvinit:
httpd:
enabled: true
ensureRunning: true
WebServerSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
VpcId:
Fn::ImportValue:
!Sub ${NetworkStackName}-VPCID
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
以上定义了EC2 是使用linux gp2 类型的镜像模板,初始化安装了Apache web 应用服务器软件,安全组开放了80端口。
2.3 更新堆栈
初次完成云资源部署之后,如果遇到方案的更新或是部署升级该怎么办?这就要用到AWS CloudFormation服务的更新堆栈操作。本例是在2.1 和2.2 的基础上,更新了原有方案中的安全组开放端口号,启用更安全的https 协议来访问。具体实现如下:
WebServerSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
VpcId:
Fn::ImportValue:
!Sub ${NetworkStackName}-VPCID
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: 0.0.0.0/0
以上安全组进行更新只开放了443端口,替代了原有的80 端口,使用https 协议,通过传输加密和身份认证增强了信息传输的安全性。
3 实施方案所遇到的主要问题及解决办法
3.1 堆栈的复用
复用性是AWS CloudFormation 服务的一大优势,一次编写多次使用,例如某个企业在某次进行云迁移时使用的堆栈文件可以在以后直接使用[4]。但企业面临的真实环境往往很复杂,比如两次迁移间隔了一定的时间,IT 基础架构和业务都发生了变化无法直接使用之前的堆栈文件。此时,可以使用更新堆栈的方法,把更新的部分放在一个新的文件里,在原有堆栈文件执行之后,再执行一次新的文件就可以了。
3.2 删除堆栈策略
当用户构建的堆栈不再使用需要删除时,如何避免磁盘上的数据丢失以及故障时修复?通常的做法是定制堆栈删除策略,以下策略就是在磁盘删除时建立磁盘快照,以便今后可以通过快照还原磁盘数据。
DiskVolume:
Type: AWS::EC2::Volume
Properties:
Size: 100
AvailabilityZone: !GetAtt WebServerInstance.
AvailabilityZone
Tags:
- Key: Name
Value: Web Data
DeletionPolicy: Snapshot
4 结语
在我国进行数字化经济转型的大背景下,云计算已经成为新一代的信息基础设施,如何让企业可以将业务平滑地迁移到 “云” 上是亟待解决的问题。本文的研究就是致力于为中小企业提供高效快捷的较为通用的云中基础设施自动化部署方案。