AWSTemplateFormatVersion: "2010-09-09"
Description:
NAT Gateway Create
Metadata:
"AWS::CloudFormation::Interface":
ParameterGroups:
- Label:
default: "Project Name Prefix"
Parameters:
- PJPrefix
- Label:
default: "NATGateway Configuration"
Parameters:
- NATGatewayACreate
- NATGatewayCCreate
ParameterLabels:
NATGatewayACreate:
default: "NATGatewayACreate"
NATGatewayACreate:
default: "NATGatewayCCreate"
# ------------------------------------------------------------#
# Input Parameters
# ------------------------------------------------------------#
Parameters:
PJPrefix:
Type: String
NATGatewayACreate:
Default: true
Type: String
AllowedValues:
- true
- false
NATGatewayCCreate:
Default: true
Type: String
AllowedValues:
- true
- false
# ------------------------------------------------------------#
# Conditions
# ------------------------------------------------------------#
Conditions:
IsCreateNATGatewayA: !Equals [ !Ref NATGatewayACreate, true ]
IsCreateNATGatewayAfalse: !Equals [ !Ref NATGatewayACreate, false ]
IsCreateNATGatewayC: !Equals [ !Ref NATGatewayCCreate, true ]
IsCreateNATGatewayCfalse: !Equals [ !Ref NATGatewayCCreate, false ]
# ------------------------------------------------------------#
# NAT Gateway AZ:A
# ------------------------------------------------------------#
Resources:
# NATGatewayA Create
NATGatewayA:
Type: "AWS::EC2::NatGateway"
Condition: IsCreateNATGatewayA
Properties:
AllocationId: !GetAtt NATGatewayAEIP.AllocationId
SubnetId: { "Fn::ImportValue": !Sub "${PJPrefix}-public-subnet-a" }
Tags:
- Key: Name
Value: !Sub "${PJPrefix}-natgw-a"
# NATGateway For EIP Create
NATGatewayAEIP:
Type: "AWS::EC2::EIP"
Condition: IsCreateNATGatewayA
Properties:
Domain: vpc
# PrivateRouteA Update
PrivateRouteA:
Type: "AWS::EC2::Route"
Condition: IsCreateNATGatewayA
Properties:
RouteTableId: { "Fn::ImportValue": !Sub "${PJPrefix}-private-route-a"}
DestinationCidrBlock: "0.0.0.0/0"
NatGatewayId: !Ref NATGatewayA
# PrivateRouteC Update (NATGatewayC NO Create)
PrivateRouteC2:
Type: "AWS::EC2::Route"
Condition: IsCreateNATGatewayCfalse
Properties:
RouteTableId: { "Fn::ImportValue": !Sub "${PJPrefix}-private-route-c"}
DestinationCidrBlock: "0.0.0.0/0"
NatGatewayId: !Ref NATGatewayA
# ------------------------------------------------------------#
# NAT Gateway AZ:C
# ------------------------------------------------------------#
# NATGatewayC Create
NATGatewayC:
Type: "AWS::EC2::NatGateway"
Condition: IsCreateNATGatewayC
Properties:
AllocationId: !GetAtt NATGatewayCEIP.AllocationId
SubnetId: { "Fn::ImportValue": !Sub "${PJPrefix}-public-subnet-c" }
Tags:
- Key: Name
Value: !Sub "${PJPrefix}-natgw-c"
# NATGateway For EIP Create
NATGatewayCEIP:
Type: "AWS::EC2::EIP"
Condition: IsCreateNATGatewayC
Properties:
Domain: vpc
# PrivateRouteC Update
PrivateRouteA:
Type: "AWS::EC2::Route"
Condition: IsCreateNATGatewayC
Properties:
RouteTableId: { "Fn::ImportValue": !Sub "${PJPrefix}-private-route-c"}
DestinationCidrBlock: "0.0.0.0/0"
NatGatewayId: !Ref NATGatewayC
# PrivateRouteA Update (NATGatewayA NO Create)
PrivateRouteA2:
Type: "AWS::EC2::Route"
Condition: IsCreateNATGatewayAfalse
Properties:
RouteTableId: { "Fn::ImportValue": !Sub "${PJPrefix}-private-route-a"}
DestinationCidrBlock: "0.0.0.0/0"
NatGatewayId: !Ref NATGatewayC
# ------------------------------------------------------------#
# Output Parameters
# ------------------------------------------------------------#
Outputs:
# NATGateway EIP
NATGatewayAEIP:
Condition: IsCreateNATGatewayA
Value: !Ref NATGatewayAEIP
Export:
Name: !Sub "${PJPrefix}-natgw-a-eip"
NATGatewayCEIP:
Condition: IsCreateNATGatewayC
Value: !Ref NATGatewayCEIP
Export:
Name: !Sub "${PJPrefix}-natgw-c-eip"
うーん、慣れてる人なら良いが、エラーになるとトラブルシューティングが結構大変
で、エラーの原因が単純なスペルミスだったりする
