We will set up 2 subnets on provisioned VPC exactly same way of previous post.
In below template, "NetworkStackNameParameter" is defined as we can specify provisioned VPC stack "cf-vpc-igw" during subnets stack creation.
Public route is added to "Subnet01" as we need to communicate bastion server via ssh.
On outputs, 2 subnets value are exported as we will refer them another stacks we will create later.
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description" : "Subnets.",
"Parameters" : {
"NetworkStackNameParameter": {
"Type" : "String"
}
},
"Resources" : {
"Subnet01" : {
"Type" : "AWS::EC2::Subnet",
"DeletionPolicy" : "Delete",
"Properties" : {
"VpcId" : { "Fn::ImportValue" : {"Fn::Sub": "${NetworkStackNameParameter}-VPCID" } },
"CidrBlock" : "10.0.0.0/25",
"AvailabilityZone" : "ap-northeast-1a",
"Tags" : [{ "Key" : "Name", "Value" : "Subnet-01" }]
}
},
"Subnet02" : {
"Type" : "AWS::EC2::Subnet",
"DeletionPolicy" : "Delete",
"Properties" : {
"VpcId" : { "Fn::ImportValue" : {"Fn::Sub": "${NetworkStackNameParameter}-VPCID" } },
"CidrBlock" : "10.0.0.128/25",
"AvailabilityZone" : "ap-northeast-1c",
"Tags" : [{ "Key" : "Name", "Value" : "Subnet-02" }]
}
},
"PublicRouteTable" : {
"Type" : "AWS::EC2::RouteTable",
"Properties" : {
"VpcId" : { "Fn::ImportValue" : {"Fn::Sub": "${NetworkStackNameParameter}-VPCID" } }
}
},
"PublicRoute" : {
"Type" : "AWS::EC2::Route",
"Properties" : {
"RouteTableId" : { "Ref" : "PublicRouteTable" },
"DestinationCidrBlock" : "0.0.0.0/0",
"GatewayId" : { "Fn::ImportValue" : {"Fn::Sub": "${NetworkStackNameParameter}-InternetGateway" } }
}
},
"PublicSubnetRouteTableAssociation" : {
"Type" : "AWS::EC2::SubnetRouteTableAssociation",
"Properties" : {
"SubnetId" : { "Ref" : "Subnet01" },
"RouteTableId" : { "Ref" : "PublicRouteTable" }
}
}
},
"Outputs" : {
"Subnet01" : {
"Description" : "The subnet ID to use for public web servers",
"Value" : { "Ref" : "Subnet01" },
"Export" : { "Name" : {"Fn::Sub": "${AWS::StackName}-Subnet01" }}
},
"Subnet02" : {
"Description" : "The subnet ID to use for public web servers",
"Value" : { "Ref" : "Subnet02" },
"Export" : { "Name" : {"Fn::Sub": "${AWS::StackName}-Subnet02" }}
}
}
}
"AWSTemplateFormatVersion": "2010-09-09",
"Description" : "Subnets.",
"Parameters" : {
"NetworkStackNameParameter": {
"Type" : "String"
}
},
"Resources" : {
"Subnet01" : {
"Type" : "AWS::EC2::Subnet",
"DeletionPolicy" : "Delete",
"Properties" : {
"VpcId" : { "Fn::ImportValue" : {"Fn::Sub": "${NetworkStackNameParameter}-VPCID" } },
"CidrBlock" : "10.0.0.0/25",
"AvailabilityZone" : "ap-northeast-1a",
"Tags" : [{ "Key" : "Name", "Value" : "Subnet-01" }]
}
},
"Subnet02" : {
"Type" : "AWS::EC2::Subnet",
"DeletionPolicy" : "Delete",
"Properties" : {
"VpcId" : { "Fn::ImportValue" : {"Fn::Sub": "${NetworkStackNameParameter}-VPCID" } },
"CidrBlock" : "10.0.0.128/25",
"AvailabilityZone" : "ap-northeast-1c",
"Tags" : [{ "Key" : "Name", "Value" : "Subnet-02" }]
}
},
"PublicRouteTable" : {
"Type" : "AWS::EC2::RouteTable",
"Properties" : {
"VpcId" : { "Fn::ImportValue" : {"Fn::Sub": "${NetworkStackNameParameter}-VPCID" } }
}
},
"PublicRoute" : {
"Type" : "AWS::EC2::Route",
"Properties" : {
"RouteTableId" : { "Ref" : "PublicRouteTable" },
"DestinationCidrBlock" : "0.0.0.0/0",
"GatewayId" : { "Fn::ImportValue" : {"Fn::Sub": "${NetworkStackNameParameter}-InternetGateway" } }
}
},
"PublicSubnetRouteTableAssociation" : {
"Type" : "AWS::EC2::SubnetRouteTableAssociation",
"Properties" : {
"SubnetId" : { "Ref" : "Subnet01" },
"RouteTableId" : { "Ref" : "PublicRouteTable" }
}
}
},
"Outputs" : {
"Subnet01" : {
"Description" : "The subnet ID to use for public web servers",
"Value" : { "Ref" : "Subnet01" },
"Export" : { "Name" : {"Fn::Sub": "${AWS::StackName}-Subnet01" }}
},
"Subnet02" : {
"Description" : "The subnet ID to use for public web servers",
"Value" : { "Ref" : "Subnet02" },
"Export" : { "Name" : {"Fn::Sub": "${AWS::StackName}-Subnet02" }}
}
}
}
See more detailed information of each element on here.
Here's a video tutorial for this.
No comments:
Post a Comment