我们来用CloudFormation创建一个VPC环境(如何编写模板文件)
大家好,
我是系统解决方案部SRE团队的冈崎。
我参与AWS上的建设已经有一段时间了,想介绍一下“CloudFormation”的简单使用方法,那段时间我有很多机会接触到它。
这次,我将解释如何填写运行CloudFormation所需的模板文件。
什么是云形成? ?
这是一项允许您使用 yml 和 json 格式文件在 AWS 提供的 AWS 云环境中管理和构建资源的服务。
您可以从单个控制台(而不是每个控制台)以称为堆栈的单位管理启动、停止和删除 AWS 资源。
使用 CloudFormation 构建的 EC2 实例等需要付费,但 CloudFormation 本身没有额外费用。
围绕VPC构建
现在,让我们根据下面的 yml 文件使用 CloudFormation 创建一个 VPC。
vpc.yml
--- AWSTemplateFormatVersion: '2010-09-09' # 参数设置Parameters: # 输入每个标识符 ProjectCode: Type: String Default: test Description: Project Code # 输入VPC CIDR VPCCidr: Type: String Default: 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 标签: - 键:名称 值:!Join [ "-", [ !Ref ProjectCode, public-route-table-igw ] ] PublicRouteIGW:类型:AWS::EC2: :Route DependsOn: AttachGateway Properties: RouteTableId: !Ref PublicRouteTableIGW DestinationCidrBlock: 0.0.0.0/0 GatewayId: !Ref InternetGateway # 子网设置 PublicSubnet: Type: AWS::EC2::Subnet DependsOn: AttachGateway Properties: VpcId: !Ref VPC AvailabilityZone : ap-northeast- 1a CidrBlock: !Ref PublicSubnetCidr 标签: - 键: 名称 值: !Join [ "-", [ !Ref ProjectCode, public-subnet ] ]
每个项目的解释
现在,我将解释上面的yml文件。
--- AWSTemplateFormatVersion: '2010-09-09'
我正在填写CloudFormation模板的格式版本。
当前最新的模板格式版本为2010-09-09,
这是截至2019年3月21日的唯一有效值。
# 参数设置Parameters: # 输入各个标识符 ProjectCode: Type: String Default: test Description: Project Code # 输入 VPC CIDR VPCCidr: Type: String Default: 10.31.0.0/16 Description: VPCCider # 输入子网 CIDR PublicSubnetCidr: Type:字符串 默认值:10.31.0.0/24 描述:PublicSubnetCider
如果您希望每次创建每个资源时都创建一个固定值,那没问题,但
有时您可能希望更改该值以使其更易于使用。
在CloudFormation中,如果您想自由更改这些值,可以在“参数”部分中进行设置。
在示例文件中,每个资源的公共标识符设置为ProjectCode,
初始值为test,但您可以在堆栈中自由输入。
VPC Cidr和Subnet Cidr也设置为初始值,但同样可以为每个堆栈设置值。
资源: # 周围 VPC #VPC 设置 VPC: 类型:AWS::EC2::VPC 属性:CidrBlock: !Ref VPCCidr 标签: - 键:名称 值:!Join [ "-", [ !Ref ProjectCode, vpc ] ]
管理AWS资源的部分是上面的“资源”部分。
VPC部分称为逻辑ID,可以设置为任意值,并且可以从其他资源调用。
但是,如果每个都不是唯一的,则在运行时会发生错误。
Type:~ 是定义实际 AWS 资源的部分。
Properties下的区域是VPC本身的设置,前面提到的VPCCidr参数是通过一个叫Ref的函数调用的,调用预定义的CIDR并插入到CidrBlock中。
这次在VPC中只配置了CidrBlock,但详细设置可以在AWS官网上找到,请再次查看。
关于AWS官方“AWS::EC2::VPC”
此外,我们在标签部分添加了名称标签,使其更易于理解。
在这里,我们也使用一个名为 Join 的函数来连接 Value 部分,以便它使用标识符 -vpc 进行标记。
AttachGateway:类型:AWS::EC2::VPCGatewayAttachment 属性:VpcId:!Ref VPC InternetGatewayId:!Ref InternetGateway PublicRouteTableIGW:类型:AWS::EC2::RouteTable DependsOn:AttachGateway 属性:VpcId:!Ref VPC 标签: - 键:名称值: !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 标签: - 键: 名称 值 : !Join [ "-", [ !Ref ProjectCode, public-subnet ] ]
同理,对于其他资源,用Type:~声明每个资源,在Properties中进行详细设置,并链接Name标签。
概括
这次,我写了如何编写使用CloudFormation构建VPC所需的模板文件,但
由于实际执行部分会很长,所以我想下次再写一次。
您可能每天都需要手动启动AWS资源,但
我认为使用这些工具可以减少所需的工作量,因此如果您经常使用AWS,
那么它是免费使用的,所以我希望您能够利用它。