Created
March 22, 2012 05:44
-
-
Save donavanm/2156480 to your computer and use it in GitHub Desktop.
CloudFormation EC2 & Route53 template
This file contains 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
{ | |
"AWSTemplateFormatVersion" : "2010-09-09", | |
"Description" : "Create an EC2 instance, set up Apache, and create Route53 A records", | |
"Parameters" : { | |
"KeyName" : { | |
"Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instances", | |
"Type" : "String", | |
"MinLength": "1", | |
"MaxLength": "64", | |
"AllowedPattern" : "[-_ a-zA-Z0-9]*", | |
"ConstraintDescription" : "can contain only alphanumeric characters, spaces, dashes and underscores.", | |
"Default" : "ec2-key" | |
}, | |
"InstanceType" : { | |
"Description" : "WebServer EC2 instance type", | |
"Type" : "String", | |
"Default" : "t1.micro", | |
"AllowedValues" : [ "t1.micro","m1.small","m1.medium","m1.large","m1.xlarge","m2.xlarge","m2.2xlarge","m2.4xlarge","c1.medium","c1.xlarge","cc1.4xlarge","cc2.8xlarge","cg1.4xlarge"], | |
"ConstraintDescription" : "must be a valid EC2 instance type." | |
}, | |
"HostedZone" : { | |
"Type" : "String", | |
"Description" : "The DNS name of an existing Amazon Route 53 hosted zone" | |
} | |
}, | |
"Mappings" : { | |
"AWSInstanceType2Arch" : { | |
"t1.micro" : { "Arch" : "64" }, | |
"m1.small" : { "Arch" : "64" }, | |
"m1.medium" : { "Arch" : "64" }, | |
"m1.large" : { "Arch" : "64" }, | |
"m1.xlarge" : { "Arch" : "64" }, | |
"m2.xlarge" : { "Arch" : "64" }, | |
"m2.2xlarge" : { "Arch" : "64" }, | |
"m2.4xlarge" : { "Arch" : "64" }, | |
"c1.medium" : { "Arch" : "64" }, | |
"c1.xlarge" : { "Arch" : "64" }, | |
"cc1.4xlarge" : { "Arch" : "64HVM" }, | |
"cc2.8xlarge" : { "Arch" : "64HVM" }, | |
"cg1.4xlarge" : { "Arch" : "64HVM" } | |
}, | |
"AWSRegionArch2AMI" : { | |
"us-east-1" : { "32" : "ami-31814f58", "64" : "ami-1b814f72", "64HVM" : "ami-0da96764" }, | |
"us-west-2" : { "32" : "ami-38fe7308", "64" : "ami-30fe7300", "64HVM" : "NOT_YET_SUPPORTED" }, | |
"us-west-1" : { "32" : "ami-11d68a54", "64" : "ami-1bd68a5e", "64HVM" : "NOT_YET_SUPPORTED" }, | |
"eu-west-1" : { "32" : "ami-973b06e3", "64" : "ami-953b06e1", "64HVM" : "NOT_YET_SUPPORTED" }, | |
"ap-southeast-1" : { "32" : "ami-b4b0cae6", "64" : "ami-beb0caec", "64HVM" : "NOT_YET_SUPPORTED" }, | |
"ap-northeast-1" : { "32" : "ami-0644f007", "64" : "ami-0a44f00b", "64HVM" : "NOT_YET_SUPPORTED" }, | |
"sa-east-1" : { "32" : "ami-3e3be423", "64" : "ami-3c3be421", "64HVM" : "NOT_YET_SUPPORTED" } | |
} | |
}, | |
"Resources" : { | |
"CfnUser" : { | |
"Type" : "AWS::IAM::User", | |
"Properties" : { | |
"Path": "/", | |
"Policies": [{ | |
"PolicyName": "root", | |
"PolicyDocument": { "Statement":[{ | |
"Effect":"Allow", | |
"Action":"cloudformation:DescribeStackResource", | |
"Resource":"*" | |
}]} | |
}] | |
} | |
}, | |
"HostKeys" : { | |
"Type" : "AWS::IAM::AccessKey", | |
"Properties" : { | |
"UserName" : {"Ref": "CfnUser"} | |
} | |
}, | |
"RegionRecord" : { | |
"Type" : "AWS::Route53::RecordSet", | |
"Properties" : { | |
"HostedZoneName" : { "Fn::Join" : [ "", [{"Ref" : "HostedZone"}, "." ]]}, | |
"Comment" : "DNS name for my instance.", | |
"Name" : { "Fn::Join" : [ "", [ {"Ref" : "AWS::Region"}, ".", {"Ref" : "HostedZone"} ,"."]]}, | |
"Type" : "A", | |
"TTL" : "900", | |
"ResourceRecords" : [ { "Fn::GetAtt" : [ "EC2instance", "PublicIp" ] } ] | |
} | |
}, | |
"HostRecord" : { | |
"Type" : "AWS::Route53::RecordSet", | |
"Properties" : { | |
"HostedZoneName" : { "Fn::Join" : [ "", [{"Ref" : "HostedZone"}, "." ]]}, | |
"Comment" : "DNS name for my instance.", | |
"Name" : { "Fn::Join" : [ "", [{"Ref" : "EC2instance"}, ".", {"Ref" : "AWS::Region"}, ".", {"Ref" : "HostedZone"} ,"."]]}, | |
"Type" : "A", | |
"TTL" : "900", | |
"ResourceRecords" : [ { "Fn::GetAtt" : [ "EC2instance", "PublicIp" ] } ] | |
} | |
}, | |
"EC2instance": { | |
"Type": "AWS::EC2::Instance", | |
"Metadata" : { | |
"Comment1" : "Configure the bootstrap helpers to install the Apache Web Server and local cat content", | |
"AWS::CloudFormation::Init" : { | |
"config" : { | |
"packages" : { | |
"yum" : { | |
"httpd" : [] | |
} | |
}, | |
"files" : { | |
"/var/www/html/index.html" : { | |
"content" : { "Fn::Join" : ["", [ "<img src='cat.jpg'><p>", {"Ref" : "AWS::Region"}, "\n" ] ] } | |
}, | |
"/var/www/html/cat.jpg" : { | |
"source" : { "Fn::Join" : [ "", ["http://strewth_cats.s3.amazonaws.com/", { "Ref" : "AWS::Region"}, ".jpg" ] ] } | |
} | |
}, | |
"services" : { | |
"sysvinit" : { | |
"httpd" : { | |
"enabled" : "true", | |
"ensureRunning" : "true" | |
} | |
} | |
} | |
} | |
} | |
}, | |
"Properties": { | |
"ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" }, | |
{ "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] }, | |
"InstanceType" : { "Ref" : "InstanceType" }, | |
"SecurityGroups" : [ {"Ref" : "WebServerSecurityGroup"} ], | |
"KeyName" : { "Ref" : "KeyName" }, | |
"UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ | |
"#!/bin/bash -v\n", | |
"yum update -y aws-cfn-bootstrap\n", | |
"# Helper function\n", | |
"function error_exit\n", | |
"{\n", | |
" /opt/aws/bin/cfn-signal -e 1 -r \"$1\" '", { "Ref" : "WaitHandle" }, "'\n", | |
" exit 1\n", | |
"}\n", | |
"# Install local config\n", | |
"/opt/aws/bin/cfn-init -v -s ", { "Ref" : "AWS::StackName" }, " -r EC2instance", | |
" --access-key ", { "Ref" : "HostKeys" }, | |
" --secret-key ", {"Fn::GetAtt": ["HostKeys", "SecretAccessKey"]}, | |
" --region ", { "Ref" : "AWS::Region" }, " > /var/tmp/cfn-init.output || error_exit 'Failed to run cfn-init'\n", | |
"# All is well so signal success\n", | |
"/opt/aws/bin/cfn-signal -e 0 -r \"LAMP Stack setup complete\" '", { "Ref" : "WaitHandle" }, "'\n" | |
]]}} | |
} | |
}, | |
"WaitHandle" : { | |
"Type" : "AWS::CloudFormation::WaitConditionHandle" | |
}, | |
"WaitCondition" : { | |
"Type" : "AWS::CloudFormation::WaitCondition", | |
"DependsOn" : "EC2instance", | |
"Properties" : { | |
"Handle" : {"Ref" : "WaitHandle"}, | |
"Timeout" : "300" | |
} | |
}, | |
"WebServerSecurityGroup" : { | |
"Type" : "AWS::EC2::SecurityGroup", | |
"Properties" : { | |
"GroupDescription" : "Enable HTTP access via port 80", | |
"SecurityGroupIngress" : [ | |
{"IpProtocol" : "tcp", "FromPort" : "80", "ToPort" : "80", "CidrIp" : "0.0.0.0/0"} | |
] | |
} | |
} | |
}, | |
"Outputs" : { | |
"WebsiteURL" : { | |
"Value" : { "Fn::Join" : ["", ["http://", { "Ref" : "RegionRecord" } ] ] }, | |
"Description" : "URL for newly created LAMP stack" | |
}, | |
"HostName" : { | |
"Value" : { "Ref" : "HostRecord" } | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment