Created
July 21, 2013 01:53
-
-
Save ngtk/6047167 to your computer and use it in GitHub Desktop.
AWS CloudFormation template
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
| { | |
| "AWSTemplateFormatVersion" : "2010-09-09", | |
| "Description" : "AWS CloudFormation Sample Template WordPress_Single_Instance: WordPress is web software you can use to create a beautiful website or blog. This template installs a single-instance WordPress deployment using a local MySQL database to store the data. It demonstrates using the AWS CloudFormation bootstrap scripts to install packages and files at instance launch time. **WARNING** This template creates an Amazon EC2 instance. You will be billed for the AWS resources used if you create a stack from this template.", | |
| "Parameters" : { | |
| "KeyName" : { | |
| "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instances", | |
| "Type" : "String" | |
| }, | |
| "InstanceType" : { | |
| "Description" : "WebServer EC2 instance type", | |
| "Type" : "String", | |
| "Default" : "m1.small", | |
| "AllowedValues" : [ "t1.micro","m1.small","m1.medium","m1.large","m1.xlarge","m2.xlarge","m2.2xlarge","m2.4xlarge","m3.xlarge","m3.2xlarge","c1.medium","c1.xlarge","cc1.4xlarge","cc2.8xlarge","cg1.4xlarge"], | |
| "ConstraintDescription" : "must be a valid EC2 instance type." | |
| }, | |
| "DBName" : { | |
| "Default": "wordpress", | |
| "Description" : "The WordPress database name", | |
| "Type": "String", | |
| "MinLength": "1", | |
| "MaxLength": "64", | |
| "AllowedPattern" : "[a-zA-Z][a-zA-Z0-9]*", | |
| "ConstraintDescription" : "must begin with a letter and contain only alphanumeric characters." | |
| }, | |
| "DBUsername" : { | |
| "Default": "admin", | |
| "NoEcho": "true", | |
| "Description" : "The WordPress database admin account username", | |
| "Type": "String", | |
| "MinLength": "1", | |
| "MaxLength": "16", | |
| "AllowedPattern" : "[a-zA-Z][a-zA-Z0-9]*", | |
| "ConstraintDescription" : "must begin with a letter and contain only alphanumeric characters." | |
| }, | |
| "DBPassword" : { | |
| "Default": "admin", | |
| "NoEcho": "true", | |
| "Description" : "The WordPress database admin account password", | |
| "Type": "String", | |
| "MinLength": "1", | |
| "MaxLength": "41", | |
| "AllowedPattern" : "[a-zA-Z0-9]*", | |
| "ConstraintDescription" : "must contain only alphanumeric characters." | |
| }, | |
| "DBRootPassword": { | |
| "NoEcho": "true", | |
| "Description" : "Root password for MySQL", | |
| "Type": "String", | |
| "MinLength": "1", | |
| "MaxLength": "41", | |
| "AllowedPattern" : "[a-zA-Z0-9]*", | |
| "ConstraintDescription" : "must contain only alphanumeric characters." | |
| }, | |
| "SSHLocation" : { | |
| "Description" : " The IP address range that can be used to SSH to the EC2 instances", | |
| "Type": "String", | |
| "MinLength": "9", | |
| "MaxLength": "18", | |
| "Default": "0.0.0.0/0", | |
| "AllowedPattern": "(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})/(\\d{1,2})", | |
| "ConstraintDescription": "must be a valid IP CIDR range of the form x.x.x.x/x." | |
| } | |
| }, | |
| "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" }, | |
| "m3.xlarge" : { "Arch" : "64" }, | |
| "m3.2xlarge" : { "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-southeast-2" : { "32" : "ami-b3990e89", "64" : "ami-bd990e87", "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" : { | |
| "WebServer": { | |
| "Type": "AWS::EC2::Instance", | |
| "Metadata" : { | |
| "AWS::CloudFormation::Init" : { | |
| "config" : { | |
| "packages" : { | |
| "yum" : { | |
| "httpd" : [], | |
| "php" : [], | |
| "php-mbstring" : [], | |
| "php-mysql" : [], | |
| "mysql" : [], | |
| "mysql-server" : [], | |
| "mysql-devel" : [], | |
| "mysql-libs" : [] | |
| } | |
| }, | |
| "sources" : { | |
| "/var/www/html" : "http://wordpress.org/latest.tar.gz" | |
| }, | |
| "files" : { | |
| "/tmp/setup.mysql" : { | |
| "content" : { "Fn::Join" : ["", [ | |
| "CREATE DATABASE ", { "Ref" : "DBName" }, ";\n", | |
| "CREATE USER '", { "Ref" : "DBUsername" }, "'@'localhost' IDENTIFIED BY '", { "Ref" : "DBPassword" }, "';\n", | |
| "GRANT ALL ON ", { "Ref" : "DBName" }, ".* TO '", { "Ref" : "DBUsername" }, "'@'localhost';\n", | |
| "FLUSH PRIVILEGES;\n" | |
| ]]}, | |
| "mode" : "000644", | |
| "owner" : "root", | |
| "group" : "root" | |
| }, | |
| "/var/www/html/wordpress/wp-config.php" : { | |
| "content" : { "Fn::Join" : ["", [ | |
| "<?php\n", | |
| "define('DB_NAME', '", {"Ref" : "DBName"}, "');\n", | |
| "define('DB_USER', '", {"Ref" : "DBUsername"}, "');\n", | |
| "define('DB_PASSWORD', '", {"Ref" : "DBPassword" }, "');\n", | |
| "define('DB_HOST', 'localhost');\n", | |
| "define('DB_CHARSET', 'utf8');\n", | |
| "define('DB_COLLATE', '');\n", | |
| "define('AUTH_KEY', 'f@A17vs{ mO0}:&I,6SB.QzV`E?!`/tN5:~GZX%=@ZA%!_T0-]9>g]4ll6~,6G|R');\n", | |
| "define('SECURE_AUTH_KEY', 'gTFTI|~rYHY)|mlu:Cv7RN]GQ^3ngyUbw;L0o!12]0c-ispR<-yt3qj]xjquz^&9');\n", | |
| "define('LOGGED_IN_KEY', 'Jd:HG9M)1p5t2<v~+R-vd{p-Q*|*RB^&PUI{vIrydAEEiV!{HS{jN:nErCmLv`p}');\n", | |
| "define('NONCE_KEY', '4aMj4KZV;,Gu7(B|qOCve[c5?*J5x1+x93i:Ey6hh/6jXh+V_{V4+hw!qE^d*U,-');\n", | |
| "define('AUTH_SALT', '_Y_&8m)FH)Cns)8}Yb8b88KDSn:p1#p(qBa<~VW&Y1v}P.*9/8S8@P`{mkNxV lC');\n", | |
| "define('SECURE_AUTH_SALT', '%nG3Ag41^Lew5c86,#zbN:yPFs.GA5a)z5*:Oce1>v6uF~D`,.o1pzS)F8[bM9i[');\n", | |
| "define('LOGGED_IN_SALT', '~K<y+Ly+_Ww1~dtq>;rSQ^+{P5/k|=!]k%RXAF-Y@XMY6GSp+wJ5{(|rCzaWjZ%/');\n", | |
| "define('NONCE_SALT', ',Bs_*Y9:b/1Z:apVLHtz35uim|okkA,b|Jt[-&Nla=T{<l_#D?~6Tj-.2.]FonI~');\n", | |
| "define('WPLANG' , '');\n", | |
| "define('WP_DEBUG' , false);\n", | |
| "$table_prefix = 'wp_';\n", | |
| "if ( !defined('ABSPATH') )\n", | |
| " define('ABSPATH', dirname(__FILE__) . '/');\n", | |
| "require_once(ABSPATH . 'wp-settings.php');\n" | |
| ]] }, | |
| "mode" : "000644", | |
| "owner" : "root", | |
| "group" : "root" | |
| } | |
| }, | |
| "services" : { | |
| "sysvinit" : { | |
| "httpd" : { "enabled" : "true", "ensureRunning" : "true" }, | |
| "mysqld" : { "enabled" : "true", "ensureRunning" : "true" }, | |
| "sendmail" : { "enabled" : "false", "ensureRunning" : "false" } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "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 Apache Web Server, MySQL, PHP and WordPress\n", | |
| "/opt/aws/bin/cfn-init -s ", { "Ref" : "AWS::StackId" }, " -r WebServer ", | |
| " --region ", { "Ref" : "AWS::Region" }, " || error_exit 'Failed to run cfn-init'\n", | |
| "# Setup MySQL root password and create a user\n", | |
| "mysqladmin -u root password '", { "Ref" : "DBRootPassword" }, "' || error_exit 'Failed to initialize root password'\n", | |
| "mysql -u root --password='", { "Ref" : "DBRootPassword" }, "' < /tmp/setup.mysql || error_exit 'Failed to create database user'\n", | |
| "# Setup correct file ownership\n", | |
| "chown -R apache:apache /var/www/html/wordpress\n", | |
| "# All is well so signal success\n", | |
| "/opt/aws/bin/cfn-signal -e 0 -r \"WordPress setup complete\" '", { "Ref" : "WaitHandle" }, "'\n" | |
| ]]}} | |
| } | |
| }, | |
| "WaitHandle" : { | |
| "Type" : "AWS::CloudFormation::WaitConditionHandle" | |
| }, | |
| "WaitCondition" : { | |
| "Type" : "AWS::CloudFormation::WaitCondition", | |
| "DependsOn" : "WebServer", | |
| "Properties" : { | |
| "Handle" : {"Ref" : "WaitHandle"}, | |
| "Timeout" : "300" | |
| } | |
| }, | |
| "WebServerSecurityGroup" : { | |
| "Type" : "AWS::EC2::SecurityGroup", | |
| "Properties" : { | |
| "GroupDescription" : "Enable HTTP access via port 80 and SSH access", | |
| "SecurityGroupIngress" : [ | |
| {"IpProtocol" : "tcp", "FromPort" : "80", "ToPort" : "80", "CidrIp" : "0.0.0.0/0"}, | |
| {"IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : { "Ref" : "SSHLocation"}} | |
| ] | |
| } | |
| } | |
| }, | |
| "Outputs" : { | |
| "WebsiteURL" : { | |
| "Value" : { "Fn::Join" : ["", ["http://", { "Fn::GetAtt" : [ "WebServer", "PublicDnsName" ]}, "/wordpress"]] }, | |
| "Description" : "WordPress Website" | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment