Created
September 6, 2018 01:44
-
-
Save jiehan1029/0262c14f4dcd111196f088a411ad8554 to your computer and use it in GitHub Desktop.
AWS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"Description": "Building on AWS VPC", | |
"Parameters": { | |
"KeyName": { | |
"Description": "Choose an existing EC2 KeyPair", | |
"Type": "AWS::EC2::KeyPair::KeyName" | |
} | |
}, | |
"Mappings": { | |
"AWSRegionToAMI": { | |
"us-west-2": { | |
"AMI": "ami-32cf7b4a" | |
} | |
} | |
}, | |
"Resources": { | |
"VPC": { | |
"Type": "AWS::EC2::VPC", | |
"Properties": { | |
"CidrBlock": "10.1.0.0/16", | |
"Tags": [ | |
{ | |
"Key": "Name", | |
"Value": "edx-build-aws-vpc" | |
} | |
] | |
} | |
}, | |
"InternetGateway": { | |
"Type": "AWS::EC2::InternetGateway", | |
"Properties": { | |
"Tags": [ | |
{ | |
"Key": "Name", | |
"Value": "edx-igw" | |
} | |
] | |
} | |
}, | |
"AttachGateway": { | |
"Type": "AWS::EC2::VPCGatewayAttachment", | |
"Properties": { | |
"VpcId": { | |
"Ref": "VPC" | |
}, | |
"InternetGatewayId": { | |
"Ref": "InternetGateway" | |
} | |
} | |
}, | |
"PublicSubnet1": { | |
"Type": "AWS::EC2::Subnet", | |
"Properties": { | |
"AvailabilityZone": { | |
"Fn::Select": [ | |
"0", | |
{ | |
"Fn::GetAZs": "" | |
} | |
] | |
}, | |
"CidrBlock": "10.1.1.0/24", | |
"VpcId": { | |
"Ref": "VPC" | |
}, | |
"MapPublicIpOnLaunch": "true", | |
"Tags": [ | |
{ | |
"Key": "Name", | |
"Value": "edx-subnet-public-a" | |
} | |
] | |
} | |
}, | |
"PublicSubnet2": { | |
"Type": "AWS::EC2::Subnet", | |
"Properties": { | |
"AvailabilityZone": { | |
"Fn::Select": [ | |
"1", | |
{ | |
"Fn::GetAZs": "" | |
} | |
] | |
}, | |
"CidrBlock": "10.1.2.0/24", | |
"VpcId": { | |
"Ref": "VPC" | |
}, | |
"MapPublicIpOnLaunch": "true", | |
"Tags": [ | |
{ | |
"Key": "Name", | |
"Value": "edx-subnet-public-b" | |
} | |
] | |
} | |
}, | |
"PublicRouteTable": { | |
"Type": "AWS::EC2::RouteTable", | |
"Properties": { | |
"VpcId": { | |
"Ref": "VPC" | |
}, | |
"Tags": [ | |
{ | |
"Key": "Name", | |
"Value": "edx-routetable-public" | |
} | |
] | |
} | |
}, | |
"PublicDefaultRoute": { | |
"Type": "AWS::EC2::Route", | |
"DependsOn": "AttachGateway", | |
"Properties": { | |
"DestinationCidrBlock": "0.0.0.0/0", | |
"GatewayId": { | |
"Ref": "InternetGateway" | |
}, | |
"RouteTableId": { | |
"Ref": "PublicRouteTable" | |
} | |
} | |
}, | |
"PublicRouteAssociation1": { | |
"Type": "AWS::EC2::SubnetRouteTableAssociation", | |
"Properties": { | |
"RouteTableId": { | |
"Ref": "PublicRouteTable" | |
}, | |
"SubnetId": { | |
"Ref": "PublicSubnet1" | |
} | |
} | |
}, | |
"PublicRouteAssociation2": { | |
"Type": "AWS::EC2::SubnetRouteTableAssociation", | |
"Properties": { | |
"RouteTableId": { | |
"Ref": "PublicRouteTable" | |
}, | |
"SubnetId": { | |
"Ref": "PublicSubnet2" | |
} | |
} | |
}, | |
"PrivateSubnet1": { | |
"Type": "AWS::EC2::Subnet", | |
"Properties": { | |
"AvailabilityZone": { | |
"Fn::Select": [ | |
"0", | |
{ | |
"Fn::GetAZs": "" | |
} | |
] | |
}, | |
"CidrBlock": "10.1.3.0/24", | |
"VpcId": { | |
"Ref": "VPC" | |
}, | |
"Tags": [ | |
{ | |
"Key": "Name", | |
"Value": "edx-subnet-private-a" | |
} | |
] | |
} | |
}, | |
"PrivateSubnet2": { | |
"Type": "AWS::EC2::Subnet", | |
"Properties": { | |
"AvailabilityZone": { | |
"Fn::Select": [ | |
"1", | |
{ | |
"Fn::GetAZs": "" | |
} | |
] | |
}, | |
"CidrBlock": "10.1.4.0/24", | |
"VpcId": { | |
"Ref": "VPC" | |
}, | |
"Tags": [ | |
{ | |
"Key": "Name", | |
"Value": "edx-subnet-private-b" | |
} | |
] | |
} | |
}, | |
"PrivateRouteTable": { | |
"Type": "AWS::EC2::RouteTable", | |
"Properties": { | |
"VpcId": { | |
"Ref": "VPC" | |
}, | |
"Tags": [ | |
{ | |
"Key": "Name", | |
"Value": "edx-routetable-private" | |
} | |
] | |
} | |
}, | |
"PrivateRoute": { | |
"Type": "AWS::EC2::Route", | |
"Properties": { | |
"RouteTableId": { | |
"Ref": "PrivateRouteTable" | |
}, | |
"DestinationCidrBlock": "0.0.0.0/0", | |
"InstanceId": { | |
"Ref": "NATInstance" | |
} | |
} | |
}, | |
"PrivateRouteAssociation1": { | |
"Type": "AWS::EC2::SubnetRouteTableAssociation", | |
"Properties": { | |
"RouteTableId": { | |
"Ref": "PrivateRouteTable" | |
}, | |
"SubnetId": { | |
"Ref": "PrivateSubnet1" | |
} | |
} | |
}, | |
"PrivateRouteAssociation2": { | |
"Type": "AWS::EC2::SubnetRouteTableAssociation", | |
"Properties": { | |
"RouteTableId": { | |
"Ref": "PrivateRouteTable" | |
}, | |
"SubnetId": { | |
"Ref": "PrivateSubnet2" | |
} | |
} | |
}, | |
"NATInstance": { | |
"Type": "AWS::EC2::Instance", | |
"DependsOn":"AttachGateway", | |
"Properties": { | |
"ImageId": { | |
"Fn::FindInMap": [ | |
"AWSRegionToAMI", | |
{ | |
"Ref": "AWS::Region" | |
}, | |
"AMI" | |
] | |
}, | |
"KeyName": { | |
"Ref": "KeyName" | |
}, | |
"InstanceType": "t2.micro", | |
"NetworkInterfaces": [ | |
{ | |
"DeviceIndex": "0", | |
"AssociatePublicIpAddress": "true", | |
"SubnetId": { | |
"Ref": "PublicSubnet2" | |
}, | |
"GroupSet": [ | |
{ | |
"Ref": "NATSecurityGroup" | |
} | |
] | |
} | |
], | |
"SourceDestCheck": "false", | |
"Tags": [ | |
{ | |
"Key": "Name", | |
"Value": "edx-nat-instance" | |
} | |
], | |
"UserData": { | |
"Fn::Base64": { | |
"Fn::Join": [ | |
"", | |
[ | |
"#!/bin/bash \n", | |
"yum -y update \n", | |
"echo 1 > /proc/sys/net/ipv4/ip_forward \n", | |
"echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects \n", | |
"/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 0.0.0.0/0 -j MASQUERADE \n", | |
"/sbin/iptables-save > /etc/sysconfig/iptables \n", | |
"mkdir -p /etc/sysctl.d/ \n", | |
"cat <<EOF > /etc/sysctl.d/nat.conf \n", | |
"net.ipv4.ip_forward = 1 \n", | |
"net.ipv4.conf.eth0.send_redirects = 0 \n", | |
"EOF \n" | |
] | |
] | |
} | |
} | |
} | |
}, | |
"NATSecurityGroup": { | |
"Type": "AWS::EC2::SecurityGroup", | |
"Properties": { | |
"GroupDescription": "Enable internal access to the NAT device", | |
"VpcId": { | |
"Ref": "VPC" | |
}, | |
"Tags": [ | |
{ | |
"Key": "Name", | |
"Value": "edx-nat-sg" | |
} | |
], | |
"SecurityGroupIngress": [ | |
{ | |
"IpProtocol": "-1", | |
"FromPort": "0", | |
"ToPort": "1024", | |
"CidrIp": "10.1.3.0/24" | |
}, | |
{ | |
"IpProtocol": "-1", | |
"FromPort": "0", | |
"ToPort": "1024", | |
"CidrIp": "10.1.4.0/24" | |
} | |
] | |
} | |
} | |
}, | |
"Outputs": { | |
"PublicSubnet1" : { | |
"Description" : "Public Subnet 1", | |
"Value" : { "Ref": "PublicSubnet1" } | |
}, | |
"PublicSubnet2" : { | |
"Description" : "Public Subnet 2", | |
"Value" : { "Ref": "PublicSubnet2" } | |
}, | |
"PrivateSubnet1" : { | |
"Description" : "Private Subnet 1", | |
"Value" : { "Ref": "PrivateSubnet1" } | |
}, | |
"PrivateSubnet2" : { | |
"Description" : "Private Subnet 2", | |
"Value" : { "Ref": "PrivateSubnet2" } | |
}, | |
"NATInstance" : { | |
"Description" : "NAT Instance Public IP", | |
"Value" : { "Fn::GetAtt" : [ "NATInstance", "PublicIp" ] } | |
}, | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment