- Start with the usual CloudFormation template version and description:
AWSTemplateFormatVersion: "2010-09-09"
Description: Create NAT Gateway and associated route.
- The template must take the following required parameters:
Parameters:
PublicSubnetId:
Description: Public Subnet ID to add the NAT Gateway to
Type: AWS::EC2::Subnet::Id
RouteTableId:
Description: The private subnet route table to add the NAT
Gateway route to
Type: String
- In the Resources section, define an Elastic IP (EIP) that will be assigned to the NAT gateway:
Resources:
EIP:
Type: AWS::EC2::EIP
Properties:
Domain: vpc
- Create the NAT gateway resource, assigning it the EIP you just defined in the public subnet:
NatGateway:
Type: AWS::EC2::NatGateway
Properties:
AllocationId: !GetAtt EIP.AllocationId
SubnetId: !Ref PublicSubnetId
- Finally, define the route to the NAT gateway and associate it with the private subnet's route table:
Route:
Type: AWS::EC2::Route
Properties:
RouteTableId: !Ref RouteTableId
DestinationCidrBlock: 0.0.0.0/0
NatGatewayId: !Ref NatGateway
- Save the template with a known filename; for example, 07-nat-gateway.yaml.
- Launch the template with the following CLI command:
aws cloudformation create-stack \
--stack-name nat-gateway \
--template-body file://07-nat-gateway.yaml \
--parameters \
ParameterKey=RouteTableId,ParameterValue=<route-table-id> \
ParameterKey=PublicSubnetId,ParameterValue=<public-subnet-id>