让我们使用 CloudFormation 创建一个 VPC 环境(如何编写模板文件)

大家好,
我是冈崎,系统解决方案部门 SRE 团队的成员。

我参与过很多 AWS 开发项目,也多次使用过 CloudFormation。我想介绍一种简单的使用方法。
在本文中,我将解释如何填写运行 CloudFormation 所需的模板文件。

什么是 CloudFormation?

CloudFormation 是 AWS 提供的一项服务,它允许您使用 YML 和 JSON 格式的文件在 AWS 云环境中管理和构建资源。
您可以从一个控制台(而非每个控制台)管理 AWS 资源的启动、停止和删除,这些资源以堆栈为单位进行管理。
虽然使用 CloudFormation 构建的 EC2 实例会产生费用,但 CloudFormation 本身不收取额外费用。

围绕 VPC 构建

让我们根据以下 yml 文件使用 CloudFormation 创建一个 VPC。

vpc.yml

--- AWSTemplateFormatVersion: '2010-09-09' # 参数设置 参数: # 输入每个标识符 ProjectCode: 类型:字符串 默认值:test 描述:项目代码 # 输入 VPC CIDR VPCCidr: 类型:字符串 默认值:10.31.0.0/16 描述:VPCCidr # 输入子网 CIDR PublicSubnetCidr: 类型:字符串 默认值:10.31.0.0/24 描述:PublicSubnetCidr 资源: # VPC 相关 # VPC 设置 VPC: 类型:AWS::EC2::VPC 属性:CidrBlock: !Ref VPCCidr 标签: - 键:名称 值:!Join [ "-", [ !Ref ProjectCode, vpc ] ] # Internet 网关设置 InternetGateway: 类型:AWS::EC2::InternetGateway 属性: 标签: - 键:名称 值:!Join [ "-", [ !Ref ProjectCode, igw ] ] AttachGateway: 类型: AWS::EC2::VPCGatewayAttachment 属性: VpcId: !Ref VPC InternetGatewayId: !Ref InternetGateway PublicRouteTableIGW: 类型: AWS::EC2::RouteTable DependsOn: AttachGateway 属性: VpcId: !Ref VPC Tags: - Key: Name Value: !Join [ "-", [ !Ref ProjectCode, public-route-table-igw ] ] PublicRouteIGW: 类型: AWS::EC2::Route DependsOn: AttachGateway 属性: RouteTableId: !Ref PublicRouteTableIGW DestinationCidrBlock: 0.0.0.0/0 GatewayId: !Ref InternetGateway # 子网设置 PublicSubnet: 类型: AWS::EC2::Subnet DependsOn: AttachGateway 属性: VpcId: !Ref VPC AvailabilityZone: ap-northeast-1a CidrBlock: !Ref PublicSubnetCidr Tags: - Key: Name Value: !Join [ "-", [ !Ref ProjectCode, public-subnet ] ]

每项内容的解释

现在让我来解释一下上面的 yml 文件。

--- AWSTemplateFormatVersion: '2010-09-09'

请输入 CloudFormation 模板的格式版本。
当前最新的模板格式版本为 2010-09-09,
截至 2019 年 3 月 21 日,这是唯一有效值。

# 参数设置 参数: # 输入每个标识符 ProjectCode: 类型:字符串 默认值:test 描述:项目代码 # 输入 VPC CIDR VPCCidr: 类型:字符串 默认值:10.31.0.0/16 描述:VPCCidr # 输入子网 CIDR PublicSubnetCidr: 类型:字符串 默认值:10.31.0.0/24 描述:PublicSubnetCidr

创建每个资源时,每次都使用相同的值是可以的,但
有时为了方便操作,您可能需要更改这些值。
在 CloudFormation 中,您可以在“参数”部分自由更改这些值。
在示例文件中,每个资源的通用标识符设置为 ProjectCode,
默认值设置为 test,但您可以为每个堆栈自由输入此值。VPC
CIDR 和子网 CIDR 也设置为默认值,但您也可以逐个堆栈地设置这些值。

资源:# VPC 相关 # VPC 设置 VPC:类型:AWS::EC2::VPC 属性:CidrBlock:!Ref VPCCidr 标签:- 键:名称 值:!Join [ "-", [ !Ref ProjectCode, vpc ] ]

上面的“资源”部分用于管理 AWS 资源。VPC
部分称为逻辑 ID,可以设置为任何值,也可以从其他资源调用。
但是,如果每个逻辑 ID 不唯一,运行时将会发生错误。
“类型:~”部分用于定义实际的 AWS 资源。“
属性”部分用于配置 VPC 本身,前面提到的 VPCCidr 参数通过名为 Ref 的函数调用,该函数调用预定义的 CIDR 并将其插入到 CidrBlock 中。
在本例中,我们仅配置 VPC 中的 CidrBlock,但详细设置可在 AWS 官方网站上找到,请查看相关文档。
关于 AWS 官方的“AWS::EC2::VPC”

此外,为了便于理解,标签部分添加了名称标签。
同样,值部分也使用连接函数连接起来,并标记了标识符 -vpc。

  AttachGateway:类型:AWS::EC2::VPCGatewayAttachment 属性:VpcId:!Ref VPC InternetGatewayId:!Ref InternetGateway PublicRouteTableIGW:类型:AWS::EC2::RouteTable 依赖:AttachGateway 属性:VpcId:!Ref VPC 标签:- 键:名称 值:!Join [ "-", [ !Ref ProjectCode, public-route-table-igw ] ] PublicRouteIGW:类型:AWS::EC2::Route 依赖:AttachGateway 属性:RouteTableId:!Ref PublicRouteTableIGW DestinationCidrBlock:0.0.0.0/0 GatewayId:!Ref InternetGateway # 子网设置 PublicSubnet:类型:AWS::EC2::Subnet 依赖:AttachGateway 属性:VpcId:!Ref VPC可用性区域:ap-northeast-1a CidrBlock:!Ref PublicSubnetCidr 标签:- 键:名称 值:!Join [ "-", [ !Ref ProjectCode, public-subnet ] ]

其他资源也以相同的方式声明,使用 Type:~,详细设置在 Properties 中进行,并链接 Name 标签。

概括

这次我讲解了如何使用 CloudFormation 编写构建 VPC 所需的模板文件,但
实际执行部分比较复杂,下次再详细介绍。
您可能每天都会手动启动 AWS 资源,但使用这类工具
可以大大减少工作量,如果您经常使用 AWS,
我强烈建议您使用它,因为它是免费的。

如果您觉得这篇文章有用,请点击【点赞】!
0
加载中...
0票,平均分:0.00/10
5,968
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

冈崎润一郎

在智能手机游戏的迁移和运营方面拥有丰富的经验。

我目前从事多云运维、服务器搭建和迁移方面的工作。随着项目数量的增加,我一直在思考如何提高工作效率。我经常会考虑各种服务器迁移方案,并权衡不同云平台的优势。

在进行云间迁移和物理环境到云环境迁移的过程中,该公司连续两次在日本MSP协会举办的比赛中获得冠军。