--- AWSTemplateFormatVersion: 2010-09-09 Parameters: Name: Type: String VpcCIDR: Type: String PublicSubnet1CIDR: Type: String PublicSubnet2CIDR: Type: String PrivateSubnet1CIDR: Type: String PrivateSubnet2CIDR: Type: String Resources: VPC: Type: AWS::EC2::VPC Properties: CidrBlock: !Ref VpcCIDR Tags: - Key: Name Value: !Ref Name InternetGateway: Type: AWS::EC2::InternetGateway Properties: Tags: - Key: Name Value: !Ref Name InternetGatewayAttachment: Type: AWS::EC2::VPCGatewayAttachment Properties: InternetGatewayId: !Ref InternetGateway VpcId: !Ref VPC NATGateway: Type: AWS::EC2::NatGateway Properties: AllocationId: Fn::GetAtt: - EIPforNATGW - AllocationId SubnetId: !Ref Subnet1 Tags: - Key: Name Value: !Ref Name EIPforNATGW: DependsOn: InternetGatewayAttachment Type: AWS::EC2::EIP Properties: Domain: vpc Subnet1: Type: AWS::EC2::Subnet Properties: VpcId: !Ref VPC AvailabilityZone: !Select [ 0, !GetAZs ] MapPublicIpOnLaunch: true CidrBlock: !Ref PublicSubnet1CIDR Tags: - Key: Name Value: !Sub ${Name} (Public) Subnet2: Type: AWS::EC2::Subnet Properties: VpcId: !Ref VPC AvailabilityZone: !Select [ 1, !GetAZs ] MapPublicIpOnLaunch: true CidrBlock: !Ref PublicSubnet2CIDR Tags: - Key: Name Value: !Sub ${Name} (Public) PrivateSubnet1: Type: AWS::EC2::Subnet Properties: VpcId: !Ref VPC AvailabilityZone: !Select [ 0, !GetAZs ] MapPublicIpOnLaunch: false CidrBlock: !Ref PrivateSubnet1CIDR Tags: - Key: Name Value: !Sub ${Name} (Private) PrivateSubnet2: Type: AWS::EC2::Subnet Properties: VpcId: !Ref VPC AvailabilityZone: !Select [ 1, !GetAZs ] MapPublicIpOnLaunch: false CidrBlock: !Ref PrivateSubnet2CIDR Tags: - Key: Name Value: !Sub ${Name} (Private) RouteTable: Type: AWS::EC2::RouteTable Properties: VpcId: !Ref VPC Tags: - Key: Name Value: !Ref Name DefaultRoute: Type: AWS::EC2::Route Properties: RouteTableId: !Ref RouteTable DestinationCidrBlock: 0.0.0.0/0 GatewayId: !Ref InternetGateway Subnet1RouteTableAssociation: Type: AWS::EC2::SubnetRouteTableAssociation Properties: RouteTableId: !Ref RouteTable SubnetId: !Ref Subnet1 Subnet2RouteTableAssociation: Type: AWS::EC2::SubnetRouteTableAssociation Properties: RouteTableId: !Ref RouteTable SubnetId: !Ref Subnet2 NATRouteTable: Type: AWS::EC2::RouteTable Properties: VpcId: !Ref VPC Tags: - Key: Name Value: !Ref Name NATRoute: Type: AWS::EC2::Route Properties: RouteTableId: !Ref NATRouteTable DestinationCidrBlock: 0.0.0.0/0 NatGatewayId: !Ref NATGateway PrivateSubnet1RouteTableAssociation: Type: AWS::EC2::SubnetRouteTableAssociation Properties: RouteTableId: !Ref NATRouteTable SubnetId: !Ref PrivateSubnet1 PrivateSubnet2RouteTableAssociation: Type: AWS::EC2::SubnetRouteTableAssociation Properties: RouteTableId: !Ref NATRouteTable SubnetId: !Ref PrivateSubnet2 Outputs: Subnets: Value: !Join [ ",", [ !Ref Subnet1, !Ref Subnet2 ] ] PrivateSubnets: Value: !Join [ ",", [ !Ref PrivateSubnet1, !Ref PrivateSubnet2 ] ] VpcId: Value: !Ref VPC