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

大家好,
我是系统解决方案部门SRE团队的冈崎。
我过去参与过许多基于 AWS 的项目,因此想介绍一种使用 CloudFormation 的简单方法,我有很多机会使用 CloudFormation。
这次,我将解释如何填写运行 CloudFormation 所需的模板文件。
什么是 CloudFormation?
这项服务允许您使用 YAML 和 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::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
