{
|
"AWSTemplateFormatVersion": "2010-09-09",
|
|
"Mappings" : {
|
"AWSNATAMI" : {
|
"us-east-1" : { "AMI" : "ami-c6699baf" },
|
"us-west-2" : { "AMI" : "ami-52ff7262" },
|
"us-west-1" : { "AMI" : "ami-3bcc9e7e" },
|
"eu-west-1" : { "AMI" : "ami-0b5b6c7f" },
|
"ap-southeast-1" : { "AMI" : "ami-02eb9350" },
|
"ap-southeast-2" : { "AMI" : "ami-ab990e91" },
|
"ap-northeast-1" : { "AMI" : "ami-14d86d15" },
|
"sa-east-1" : { "AMI" : "ami-0439e619" }
|
},
|
|
"AWSINSTAMI" : {
|
"us-east-1" : { "AMI" : "ami-a73264ce" },
|
"us-west-2" : { "AMI" : "ami-6aad335a" },
|
"us-west-1" : { "AMI" : "ami-acf9cde9" },
|
"eu-west-1" : { "AMI" : "ami-8e987ef9" },
|
"ap-southeast-1" : { "AMI" : "ami-b84e04ea" },
|
"ap-southeast-2" : { "AMI" : "ami-3d128f07" },
|
"ap-northeast-1" : { "AMI" : "ami-3f32ac3e" },
|
"sa-east-1" : { "AMI" : "ami-35258228" }
|
}
|
},
|
|
"Parameters": {
|
"WebNodes": {
|
"Type": "String",
|
"Default": "5",
|
"Description": "Number of web servers to launch."
|
}
|
},
|
|
"Outputs": {
|
"LoadBalancerIP": {
|
"Value": { "Ref": "LoadBalancerIP" }
|
}
|
},
|
|
"Resources": {
|
"Gateway": {
|
"Type": "AWS::EC2::InternetGateway"
|
},
|
|
"VPC": {
|
"Type": "AWS::EC2::VPC",
|
"Properties": {
|
"CidrBlock": "10.0.0.0/16",
|
"EnableDnsHostnames": true
|
}
|
},
|
|
"VPCGateway": {
|
"Type" : "AWS::EC2::VPCGatewayAttachment",
|
"Properties" : {
|
"InternetGatewayId" : { "Ref": "Gateway" },
|
"VpcId": { "Ref": "VPC" }
|
}
|
},
|
|
"PublicSubnet": {
|
"Type": "AWS::EC2::Subnet",
|
"Properties": {
|
"CidrBlock": "10.0.0.0/24",
|
"VpcId": { "Ref": "VPC" }
|
}
|
},
|
|
"PrivateSubnet": {
|
"Type": "AWS::EC2::Subnet",
|
"Properties": {
|
"CidrBlock": "10.0.1.0/24",
|
"VpcId": { "Ref": "VPC" }
|
}
|
},
|
|
"PrivateSubnetRoute": {
|
"Type" : "AWS::EC2::SubnetRouteTableAssociation",
|
"Properties" : {
|
"RouteTableId" : { "Ref": "PrivateRouteTable" },
|
"SubnetId" : { "Ref": "PrivateSubnet" }
|
}
|
},
|
|
"PrivateRouteTable": {
|
"Type": "AWS::EC2::RouteTable",
|
"Properties": {
|
"VpcId": { "Ref": "VPC" }
|
}
|
},
|
|
"PrivateRouteGlobal": {
|
"Type": "AWS::EC2::Route",
|
"Properties": {
|
"RouteTableId": { "Ref": "PrivateRouteTable" },
|
"DestinationCidrBlock": "0.0.0.0/0",
|
"InstanceId" : { "Ref" : "NATDevice" }
|
},
|
"DependsOn": "PublicRouteGlobal"
|
},
|
|
"PublicSubnetRoute": {
|
"Type" : "AWS::EC2::SubnetRouteTableAssociation",
|
"Properties" : {
|
"RouteTableId" : { "Ref": "PublicRouteTable" },
|
"SubnetId" : { "Ref": "PublicSubnet" }
|
}
|
},
|
|
"PublicRouteTable": {
|
"Type": "AWS::EC2::RouteTable",
|
"Properties": {
|
"VpcId": { "Ref": "VPC" }
|
}
|
},
|
|
"PublicRouteGlobal": {
|
"Type": "AWS::EC2::Route",
|
"Properties": {
|
"RouteTableId": { "Ref": "PublicRouteTable" },
|
"DestinationCidrBlock": "0.0.0.0/0",
|
"GatewayId": { "Ref": "Gateway" }
|
}
|
},
|
|
"NATIPAddress": {
|
"Type": "AWS::EC2::EIP",
|
"Properties": {
|
"Domain": "vpc",
|
"InstanceId": { "Ref": "NATDevice" }
|
},
|
"DependsOn": "VPCGateway"
|
},
|
|
"NATDevice" : {
|
"Type" : "AWS::EC2::Instance",
|
"Properties" : {
|
"SubnetId" : { "Ref" : "PublicSubnet" },
|
"SourceDestCheck" : "false",
|
"ImageId" : { "Fn::FindInMap" : [ "AWSNATAMI", { "Ref" : "AWS::Region" }, "AMI" ]},
|
"SecurityGroupIds" : [
|
{ "Ref" : "InstanceSecurityGroup" }
|
],
|
"Tags": [
|
{ "Key": "Name", "Value": "Serf Demo NAT Device" }
|
]
|
}
|
},
|
|
"LoadBalancer": {
|
"Type": "AWS::EC2::Instance",
|
"Properties": {
|
"ImageId": { "Fn::FindInMap" : [ "AWSINSTAMI", { "Ref" : "AWS::Region" }, "AMI" ]},
|
"PrivateIpAddress": "10.0.0.5",
|
"SecurityGroupIds": [
|
{"Ref": "InstanceSecurityGroup"}
|
],
|
"SubnetId": { "Ref": "PublicSubnet" },
|
"Tags": [
|
{ "Key": "Name", "Value": "Serf Demo LB" }
|
],
|
"UserData": "IyEvYmluL2Jhc2gKTk9ERV9TRVRVUF9VUkw9Imh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vaGFzaGljb3JwL3NlcmYvbWFzdGVyL2RlbW8vd2ViLWxvYWQtYmFsYW5jZXIvc2V0dXBfbG9hZF9iYWxhbmNlci5zaCIKClNFUkZfU0VUVVBfVVJMPSJodHRwczovL3Jhdy5naXRodWIuY29tL2hhc2hpY29ycC9zZXJmL21hc3Rlci9kZW1vL3dlYi1sb2FkLWJhbGFuY2VyL3NldHVwX3NlcmYuc2giCgojIFNldHVwIHRoZSBub2RlIGl0c2VsZgp3Z2V0IC1PIC0gJE5PREVfU0VUVVBfVVJMIHwgYmFzaAoKIyBTZXR1cCB0aGUgc2VyZiBhZ2VudApleHBvcnQgU0VSRl9ST0xFPSJsYiIKd2dldCAtTyAtICRTRVJGX1NFVFVQX1VSTCB8IGJhc2gK"
|
},
|
"DependsOn": "PublicRouteGlobal"
|
},
|
|
"LoadBalancerIP": {
|
"Type" : "AWS::EC2::EIP",
|
"Properties" : {
|
"InstanceId" : { "Ref": "LoadBalancer" },
|
"Domain" : "vpc"
|
},
|
"DependsOn": "VPCGateway"
|
},
|
|
"WebGroup": {
|
"Type": "AWS::AutoScaling::AutoScalingGroup",
|
"Properties": {
|
"AvailabilityZones": [
|
{ "Fn::GetAtt" : [ "PrivateSubnet", "AvailabilityZone" ] }
|
],
|
"LaunchConfigurationName": { "Ref": "WebLaunchConfig" },
|
"DesiredCapacity": { "Ref": "WebNodes" },
|
"MinSize": { "Ref": "WebNodes" },
|
"MaxSize": { "Ref": "WebNodes" },
|
"VPCZoneIdentifier": [
|
{ "Ref": "PrivateSubnet" }
|
]
|
},
|
"DependsOn": ["NATDevice", "NATIPAddress", "PrivateRouteGlobal"]
|
},
|
|
"WebLaunchConfig": {
|
"Type": "AWS::AutoScaling::LaunchConfiguration",
|
"Properties": {
|
"ImageId": { "Fn::FindInMap" : [ "AWSINSTAMI", { "Ref" : "AWS::Region" }, "AMI" ]},
|
"InstanceType": "m1.small",
|
"SecurityGroups": [
|
{"Ref": "InstanceSecurityGroup"}
|
],
|
"UserData": "IyEvYmluL2Jhc2gKTk9ERV9TRVRVUF9VUkw9Imh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vaGFzaGljb3JwL3NlcmYvbWFzdGVyL2RlbW8vd2ViLWxvYWQtYmFsYW5jZXIvc2V0dXBfd2ViX3NlcnZlci5zaCIKClNFUkZfU0VUVVBfVVJMPSJodHRwczovL3Jhdy5naXRodWIuY29tL2hhc2hpY29ycC9zZXJmL21hc3Rlci9kZW1vL3dlYi1sb2FkLWJhbGFuY2VyL3NldHVwX3NlcmYuc2giCgojIFNldHVwIHRoZSBub2RlIGl0c2VsZgp3Z2V0IC1PIC0gJE5PREVfU0VUVVBfVVJMIHwgYmFzaAoKIyBTZXR1cCB0aGUgc2VyZiBhZ2VudApleHBvcnQgU0VSRl9ST0xFPSJ3ZWIiCndnZXQgLU8gLSAkU0VSRl9TRVRVUF9VUkwgfCBiYXNoCg=="
|
}
|
},
|
|
"InstanceSecurityGroup": {
|
"Type": "AWS::EC2::SecurityGroup",
|
"Properties": {
|
"GroupDescription": "Serf demo security group",
|
"VpcId": { "Ref": "VPC" },
|
"SecurityGroupIngress": [{
|
"IpProtocol": "icmp",
|
"FromPort": "-1",
|
"ToPort": "-1",
|
"CidrIp": "0.0.0.0/0"
|
}, {
|
"IpProtocol": "tcp",
|
"FromPort": "22",
|
"ToPort": "22",
|
"CidrIp": "0.0.0.0/0"
|
}, {
|
"IpProtocol": "tcp",
|
"FromPort": "80",
|
"ToPort": "80",
|
"CidrIp": "0.0.0.0/0"
|
}, {
|
"IpProtocol": "tcp",
|
"FromPort": "9999",
|
"ToPort": "9999",
|
"CidrIp": "0.0.0.0/0"
|
}]
|
}
|
},
|
|
"InstanceSecurityGroupSelfRule": {
|
"Type": "AWS::EC2::SecurityGroupIngress",
|
"Properties": {
|
"GroupId": { "Ref": "InstanceSecurityGroup" },
|
"IpProtocol": "-1",
|
"FromPort": "0",
|
"ToPort": "65535",
|
"SourceSecurityGroupId": { "Ref": "InstanceSecurityGroup" }
|
}
|
}
|
}
|
}
|