Skip to content

Instantly share code, notes, and snippets.

@nickveenhof
Last active August 29, 2015 14:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nickveenhof/601c5dc1b76ff26896bf to your computer and use it in GitHub Desktop.
Save nickveenhof/601c5dc1b76ff26896bf to your computer and use it in GitHub Desktop.
{
"AWSTemplateFormatVersion":"2010-09-09",
"Description":"AWS CloudFormation Sample Template for HA Drupal in Multi AZ Deployments. ",
"Parameters":{
"KeyName":{
"Description":"EC2 KeyPair to enable SSH access to the instances",
"Default":"drupaljam",
"Type":"String",
"MinLength":"1",
"MaxLength":"255",
"AllowedPattern":"[\\x20-\\x7E]*",
"ConstraintDescription":"can contain only ASCII characters."
},
"InstanceType":{
"Description":"WebServer EC2 instance type",
"Type":"String",
"Default":"m3.medium",
"ConstraintDescription":"must be a valid EC2 instance type."
},
"SiteName":{
"Default":"Drupal",
"Description":"Drupal Web Site",
"Type":"String"
},
"SiteEMail":{
"Default":"nick.veenhof@acquia.com",
"Description":"Email for site admin",
"Type":"String"
},
"SiteAdmin":{
"Default":"admin",
"Description":"The Drupal site 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."
},
"SitePassword":{
"Default":"admin",
"NoEcho":"true",
"Description":"The Drupal site admin account password",
"Type":"String",
"MinLength":"1",
"MaxLength":"41",
"AllowedPattern":"[a-zA-Z0-9]*",
"ConstraintDescription":"must contain only alphanumeric characters."
},
"DBName":{
"Default":"myDatabase",
"Description":"MySQL 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":{
"NoEcho":"true",
"Default":"dbuser",
"Description":"Username for MySQL database access",
"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":"dbpassword",
"NoEcho":"true",
"Description":"Password for MySQL database access",
"Type":"String",
"MinLength":"8",
"MaxLength":"41",
"AllowedPattern":"[a-zA-Z0-9]*",
"ConstraintDescription":"must contain only alphanumeric characters."
},
"DBClass":{
"Description":"The database instance type",
"Type":"String",
"Default":"db.m1.small",
"AllowedValues":[
"db.t1.micro",
"db.m1.small",
"db.m1.medium",
"db.m1.large",
"db.m1.xlarge",
"db.m2.xlarge",
"db.m2.2xlarge",
"db.m2.4xlarge",
"db.m3.medium",
"db.m3.large",
"db.m3.xlarge",
"db.m3.2xlarge",
"db.r3.large",
"db.r3.xlarge",
"db.r3.2xlarge",
"db.r3.4xlarge",
"db.r3.8xlarge",
"db.m2.xlarge",
"db.m2.2xlarge",
"db.m2.4xlarge",
"db.cr1.8xlarge"
],
"ConstraintDescription":"must select a valid database instance type."
},
"DBAllocatedStorage":{
"Default":"5",
"Description":"The size of the database (Gb)",
"Type":"Number",
"MinValue":"5",
"MaxValue":"1024",
"ConstraintDescription":"must be between 5 and 1024Gb."
},
"MultiAZDatabase":{
"Default":"true",
"Description":"Create a multi-AZ MySQL Amazon RDS database instance",
"Type":"String",
"AllowedValues":[
"true",
"false"
],
"ConstraintDescription":"must be either true or false."
},
"WebServerCapacity":{
"Default":"3",
"Description":"The initial number of WebServer instances",
"Type":"Number",
"MinValue":"2",
"MaxValue":"5",
"ConstraintDescription":"must be between 1 and 5 EC2 instances."
},
"WebServerCapacitySingle":{
"Default":"1",
"Description":"The initial number of WebServer instances",
"Type":"Number",
"MinValue":"1",
"MaxValue":"1",
"ConstraintDescription":"must be between 1 and 1 EC2 instances."
},
"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":"PV64"
},
"t2.micro":{
"Arch":"HVM64"
},
"t2.small":{
"Arch":"HVM64"
},
"t2.medium":{
"Arch":"HVM64"
},
"m1.small":{
"Arch":"PV64"
},
"m1.medium":{
"Arch":"PV64"
},
"m1.large":{
"Arch":"PV64"
},
"m1.xlarge":{
"Arch":"PV64"
},
"m2.xlarge":{
"Arch":"PV64"
},
"m2.2xlarge":{
"Arch":"PV64"
},
"m2.4xlarge":{
"Arch":"PV64"
},
"m3.medium":{
"Arch":"HVM64"
},
"m3.large":{
"Arch":"HVM64"
},
"m3.xlarge":{
"Arch":"HVM64"
},
"m3.2xlarge":{
"Arch":"HVM64"
},
"c1.medium":{
"Arch":"PV64"
},
"c1.xlarge":{
"Arch":"PV64"
},
"c3.large":{
"Arch":"HVM64"
},
"c3.xlarge":{
"Arch":"HVM64"
},
"c3.2xlarge":{
"Arch":"HVM64"
},
"c3.4xlarge":{
"Arch":"HVM64"
},
"c3.8xlarge":{
"Arch":"HVM64"
},
"c4.large":{
"Arch":"HVM64"
},
"c4.xlarge":{
"Arch":"HVM64"
},
"c4.2xlarge":{
"Arch":"HVM64"
},
"c4.4xlarge":{
"Arch":"HVM64"
},
"c4.8xlarge":{
"Arch":"HVM64"
},
"g2.2xlarge":{
"Arch":"HVMG2"
},
"r3.large":{
"Arch":"HVM64"
},
"r3.xlarge":{
"Arch":"HVM64"
},
"r3.2xlarge":{
"Arch":"HVM64"
},
"r3.4xlarge":{
"Arch":"HVM64"
},
"r3.8xlarge":{
"Arch":"HVM64"
},
"i2.xlarge":{
"Arch":"HVM64"
},
"i2.2xlarge":{
"Arch":"HVM64"
},
"i2.4xlarge":{
"Arch":"HVM64"
},
"i2.8xlarge":{
"Arch":"HVM64"
},
"d2.xlarge":{
"Arch":"HVM64"
},
"d2.2xlarge":{
"Arch":"HVM64"
},
"d2.4xlarge":{
"Arch":"HVM64"
},
"d2.8xlarge":{
"Arch":"HVM64"
},
"hi1.4xlarge":{
"Arch":"HVM64"
},
"hs1.8xlarge":{
"Arch":"HVM64"
},
"cr1.8xlarge":{
"Arch":"HVM64"
},
"cc2.8xlarge":{
"Arch":"HVM64"
}
},
"AWSRegionArch2AMI":{
"us-east-1":{
"PV64":"ami-1ccae774",
"HVM64":"ami-10cae778",
"HVMG2":"ami-8c6b40e4"
},
"us-west-2":{
"PV64":"ami-ff527ecf",
"HVM64":"ami-e9527ed9",
"HVMG2":"ami-abbe919b"
},
"us-west-1":{
"PV64":"ami-d514f291",
"HVM64":"ami-cb14f28f",
"HVMG2":"ami-f31ffeb7"
},
"eu-west-1":{
"PV64":"ami-bf0897c8",
"HVM64":"ami-a30897d4",
"HVMG2":"ami-d5bc24a2"
},
"eu-central-1":{
"PV64":"ami-ac221fb1",
"HVM64":"ami-ae221fb3",
"HVMG2":"ami-7cd2ef61"
},
"ap-northeast-1":{
"PV64":"ami-27f90e27",
"HVM64":"ami-c7f90ec7",
"HVMG2":"ami-6318e863"
},
"ap-southeast-1":{
"PV64":"ami-acd9e8fe",
"HVM64":"ami-64d8e936",
"HVMG2":"ami-3807376a"
},
"ap-southeast-2":{
"PV64":"ami-ff9cecc5",
"HVM64":"ami-f39cecc9",
"HVMG2":"ami-89790ab3"
},
"sa-east-1":{
"PV64":"ami-bb2890a6",
"HVM64":"ami-b72890aa",
"HVMG2":"NOT_SUPPORTED"
},
"cn-north-1":{
"PV64":"ami-fa39abc3",
"HVM64":"ami-e839abd1",
"HVMG2":"NOT_SUPPORTED"
}
}
},
"Resources":{
"S3Bucket":{
"Type":"AWS::S3::Bucket",
"DeletionPolicy":"Retain"
},
"BucketPolicy":{
"Type":"AWS::S3::BucketPolicy",
"Properties":{
"PolicyDocument":{
"Version":"2008-10-17",
"Id":"UploadPolicy",
"Statement":[
{
"Sid":"EnableReadWrite",
"Action":[
"s3:GetObject",
"s3:PutObject",
"s3:PutObjectACL"
],
"Effect":"Allow",
"Resource":{
"Fn::Join":[
"",
[
"arn:aws:s3:::",
{
"Ref":"S3Bucket"
},
"/*"
]
]
},
"Principal":{
"AWS":{
"Fn::GetAtt":[
"S3User",
"Arn"
]
}
}
}
]
},
"Bucket":{
"Ref":"S3Bucket"
}
}
},
"S3User":{
"Type":"AWS::IAM::User",
"Properties":{
"Path":"/",
"Policies":[
{
"PolicyName":"root",
"PolicyDocument":{
"Statement":[
{
"Effect":"Allow",
"Action":"s3:*",
"Resource":"*"
}
]
}
}
]
}
},
"S3Keys":{
"Type":"AWS::IAM::AccessKey",
"Properties":{
"UserName":{
"Ref":"S3User"
}
}
},
"ElasticLoadBalancer":{
"Type":"AWS::ElasticLoadBalancing::LoadBalancer",
"Metadata":{
"Comment":"Configure the Load Balancer with a simple health check and cookie-based stickiness"
},
"Properties":{
"AvailabilityZones":[
"us-east-1b",
"us-east-1d"
],
"LBCookieStickinessPolicy":[
{
"PolicyName":"CookieBasedPolicy",
"CookieExpirationPeriod":"30"
}
],
"Listeners":[
{
"LoadBalancerPort":"80",
"InstancePort":"80",
"Protocol":"HTTP",
"PolicyNames":[
"CookieBasedPolicy"
]
}
],
"HealthCheck":{
"Target":"HTTP:80/",
"HealthyThreshold":"2",
"UnhealthyThreshold":"5",
"Interval":"10",
"Timeout":"5"
}
}
},
"WebServerGroup1":{
"Type":"AWS::AutoScaling::AutoScalingGroup",
"Properties":{
"AvailabilityZones":[
"us-east-1b",
"us-east-1d"
],
"LaunchConfigurationName":{
"Ref":"LaunchConfig1"
},
"MinSize":"1",
"MaxSize":"5",
"DesiredCapacity":{
"Ref":"WebServerCapacity"
},
"LoadBalancerNames":[
{
"Ref":"ElasticLoadBalancer"
}
],
"Tags":[
{
"Key":"Name",
"Value":"Drupaljam Drupal Instance",
"PropagateAtLaunch":"true"
}
]
}
},
"LaunchConfig1":{
"Type":"AWS::AutoScaling::LaunchConfiguration",
"Metadata":{
"AWS::CloudFormation::Init":{
"config":{
"packages":{
"yum":{
"httpd":[
],
"php":[
],
"php-mysql":[
],
"php-gd":[
],
"php-xml":[
],
"php-mbstring":[
],
"mysql":[
],
"gcc":[
],
"make":[
],
"libstdc++-devel":[
],
"gcc-c++":[
],
"fuse":[
],
"fuse-devel":[
],
"libcurl-devel":[
],
"libxml2-devel":[
],
"openssl-devel":[
],
"mailcap":[
]
}
},
"sources":{
"/var/www/html":"http://ftp.drupal.org/files/projects/drupal-7.36.tar.gz",
"/home/ec2-user":"http://ftp.drupal.org/files/projects/drush-7.x-4.5.tar.gz",
"/home/ec2-user/s3fs":"http://s3fs.googlecode.com/files/s3fs-1.61.tar.gz"
},
"files":{
"/etc/passwd-s3fs":{
"content":{
"Fn::Join":[
"",
[
{
"Ref":"S3Keys"
},
":",
{
"Fn::GetAtt":[
"S3Keys",
"SecretAccessKey"
]
},
"\n"
]
]
},
"mode":"000400",
"owner":"root",
"group":"root"
},
"/home/ec2-user/settings.php":{
"content":{
"Fn::Join":[
"",
[
"<?php\n",
"\n",
"$databases = array (\n",
" 'default' =>\n",
" array (\n",
" 'default' =>\n",
" array (\n",
" 'database' => '",
{
"Ref":"DBName"
},
"',\n",
" 'username' => '",
{
"Ref":"DBUsername"
},
"',\n",
" 'password' => '",
{
"Ref":"DBPassword"
},
"',\n",
" 'host' => '",
{
"Fn::GetAtt":[
"MasterDB",
"Endpoint.Address"
]
},
"',\n",
" 'port' => '",
{
"Fn::GetAtt":[
"MasterDB",
"Endpoint.Port"
]
},
"',\n",
" 'driver' => 'mysql',\n",
" 'prefix' => 'drupal_',\n",
" ),\n",
" ),\n",
");\n",
"\n",
"$update_free_access = FALSE;\n",
"\n",
"$drupal_hash_salt = '0c3R8noNALe3shsioQr5hK1dMHdwRfikLoSfqn0_xpA';\n",
"\n",
"ini_set('session.gc_probability', 1);\n",
"ini_set('session.gc_divisor', 100);\n",
"ini_set('session.gc_maxlifetime', 200000);\n",
"ini_set('session.cookie_lifetime', 2000000);\n"
]
]
},
"mode":"000444",
"owner":"root",
"group":"root"
}
},
"services":{
"sysvinit":{
"httpd":{
"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 and Drupal\n",
"/opt/aws/bin/cfn-init -s ",
{
"Ref":"AWS::StackId"
},
" -r LaunchConfig1 ",
" --region ",
{
"Ref":"AWS::Region"
},
" || error_exit 'Failed to run cfn-init'\n",
"# Install s3fs\n",
"cd /home/ec2-user/s3fs/s3fs-1.61\n",
"./configure --prefix=/usr\n",
"make\n",
"make install\n",
"# Move the website files to the top level\n",
"mv /var/www/html/drupal-7.36/* /var/www/html\n",
"mv /var/www/html/drupal-7.36/.htaccess /var/www/html\n",
"rm -Rf /var/www/html/drupal-7.36\n",
"# Mount the S3 bucket\n",
"mv /var/www/html/sites/default/files /var/www/html/sites/default/files_original\n",
"mkdir -p /var/www/html/sites/default/files\n",
"s3fs -o allow_other -o use_cache=/tmp ",
{
"Ref":"S3Bucket"
},
" /var/www/html/sites/default/files || error_exit 'Failed to mount the S3 bucket'\n",
"echo `hostname` >> /var/www/html/sites/default/files/hosts\n",
"# Make changes to Apache Web Server configuration\n",
"sed -i 's/AllowOverride None/AllowOverride All/g' /etc/httpd/conf/httpd.conf\n",
"sed -i '/RewriteEngine on/a RewriteRule ^(scripts|profile|includes|cron\\.php|install\\.php|update\\.php|xmlrpc\\.php|filter($|/)|user($|/)|admin($|/)) - [F,L]' /var/www/html/.htaccess\n",
"service httpd restart\n",
"# Only execute the site install if we are the first host up - otherwise we'll end up losing all the data\n",
"read first < /var/www/html/sites/default/files/hosts\n",
"if [ `hostname` = $first ]\n",
"then\n",
" # Create the site in Drupal\n",
" cd /var/www/html\n",
" ~ec2-user/drush/drush site-install standard --yes",
" --site-name='",
{
"Ref":"SiteName"
},
"' --site-mail=",
{
"Ref":"SiteEMail"
},
" --account-name=",
{
"Ref":"SiteAdmin"
},
" --account-pass=",
{
"Ref":"SitePassword"
},
" --db-url=mysql://",
{
"Ref":"DBUsername"
},
":",
{
"Ref":"DBPassword"
},
"@",
{
"Fn::GetAtt":[
"MasterDB",
"Endpoint.Address"
]
},
":",
{
"Fn::GetAtt":[
"MasterDB",
"Endpoint.Port"
]
},
"/",
{
"Ref":"DBName"
},
" --db-prefix=drupal_\n",
" # use the S3 bucket for shared file storage\n",
" cp -R sites/default/files_original/* sites/default/files\n",
" cp -R sites/default/files_original/.htaccess sites/default/files\n",
"fi\n",
"# Copy settings.php file since everything else is configured\n",
"cp /home/ec2-user/settings.php /var/www/html/sites/default\n",
"rm /home/ec2-user/settings.php\n",
"# All is well so signal success\n",
"/opt/aws/bin/cfn-signal -e 0 -r \"Drupal setup complete\" '",
{
"Ref":"WaitHandle"
},
"'\n"
]
]
}
}
}
},
"WebServerGroup2":{
"Type":"AWS::AutoScaling::AutoScalingGroup",
"Properties":{
"AvailabilityZones":[
"us-east-1b"
],
"LaunchConfigurationName":{
"Ref":"LaunchConfig2"
},
"MinSize":"1",
"MaxSize":"1",
"DesiredCapacity":{
"Ref":"WebServerCapacitySingle"
},
"Tags":[
{
"Key":"Name",
"Value":"Drupaljam Drupal Instance",
"PropagateAtLaunch":"true"
}
]
}
},
"LaunchConfig2":{
"Type":"AWS::AutoScaling::LaunchConfiguration",
"Metadata":{
"AWS::CloudFormation::Init":{
"config":{
"packages":{
"yum":{
"httpd":[
],
"php":[
],
"php-mysql":[
],
"php-gd":[
],
"php-xml":[
],
"php-mbstring":[
],
"mysql":[
],
"gcc":[
],
"make":[
],
"libstdc++-devel":[
],
"gcc-c++":[
],
"fuse":[
],
"fuse-devel":[
],
"libcurl-devel":[
],
"libxml2-devel":[
],
"openssl-devel":[
],
"mailcap":[
]
}
},
"sources":{
"/var/www/html":"http://ftp.drupal.org/files/projects/drupal-7.36.tar.gz",
"/home/ec2-user":"http://ftp.drupal.org/files/projects/drush-7.x-4.5.tar.gz",
"/home/ec2-user/s3fs":"http://s3fs.googlecode.com/files/s3fs-1.61.tar.gz"
},
"files":{
"/etc/passwd-s3fs":{
"content":{
"Fn::Join":[
"",
[
{
"Ref":"S3Keys"
},
":",
{
"Fn::GetAtt":[
"S3Keys",
"SecretAccessKey"
]
},
"\n"
]
]
},
"mode":"000400",
"owner":"root",
"group":"root"
},
"/home/ec2-user/settings.php":{
"content":{
"Fn::Join":[
"",
[
"<?php\n",
"\n",
"$databases = array (\n",
" 'default' =>\n",
" array (\n",
" 'default' =>\n",
" array (\n",
" 'database' => '",
{
"Ref":"DBName"
},
"',\n",
" 'username' => '",
{
"Ref":"DBUsername"
},
"',\n",
" 'password' => '",
{
"Ref":"DBPassword"
},
"',\n",
" 'host' => '",
{
"Fn::GetAtt":[
"MasterDB",
"Endpoint.Address"
]
},
"',\n",
" 'port' => '",
{
"Fn::GetAtt":[
"MasterDB",
"Endpoint.Port"
]
},
"',\n",
" 'driver' => 'mysql',\n",
" 'prefix' => 'drupal_',\n",
" ),\n",
" ),\n",
");\n",
"\n",
"$update_free_access = FALSE;\n",
"\n",
"$drupal_hash_salt = '0c3R8noNALe3shsioQr5hK1dMHdwRfikLoSfqn0_xpA';\n",
"\n",
"ini_set('session.gc_probability', 1);\n",
"ini_set('session.gc_divisor', 100);\n",
"ini_set('session.gc_maxlifetime', 200000);\n",
"ini_set('session.cookie_lifetime', 2000000);\n"
]
]
},
"mode":"000444",
"owner":"root",
"group":"root"
}
},
"services":{
"sysvinit":{
"httpd":{
"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 and Drupal\n",
"/opt/aws/bin/cfn-init -s ",
{
"Ref":"AWS::StackId"
},
" -r LaunchConfig2 ",
" --region ",
{
"Ref":"AWS::Region"
},
" || error_exit 'Failed to run cfn-init'\n",
"# Install s3fs\n",
"cd /home/ec2-user/s3fs/s3fs-1.61\n",
"./configure --prefix=/usr\n",
"make\n",
"make install\n",
"# Move the website files to the top level\n",
"mv /var/www/html/drupal-7.36/* /var/www/html\n",
"mv /var/www/html/drupal-7.36/.htaccess /var/www/html\n",
"rm -Rf /var/www/html/drupal-7.36\n",
"# Mount the S3 bucket\n",
"mv /var/www/html/sites/default/files /var/www/html/sites/default/files_original\n",
"mkdir -p /var/www/html/sites/default/files\n",
"s3fs -o allow_other -o use_cache=/tmp ",
{
"Ref":"S3Bucket"
},
" /var/www/html/sites/default/files || error_exit 'Failed to mount the S3 bucket'\n",
"echo `hostname` >> /var/www/html/sites/default/files/hosts\n",
"# Make changes to Apache Web Server configuration\n",
"sed -i 's/AllowOverride None/AllowOverride All/g' /etc/httpd/conf/httpd.conf\n",
"service httpd restart\n",
"# Only execute the site install if we are the first host up - otherwise we'll end up losing all the data\n",
"read first < /var/www/html/sites/default/files/hosts\n",
"if [ `hostname` = $first ]\n",
"then\n",
" # Create the site in Drupal\n",
" cd /var/www/html\n",
" ~ec2-user/drush/drush site-install standard --yes",
" --site-name='",
{
"Ref":"SiteName"
},
"' --site-mail=",
{
"Ref":"SiteEMail"
},
" --account-name=",
{
"Ref":"SiteAdmin"
},
" --account-pass=",
{
"Ref":"SitePassword"
},
" --db-url=mysql://",
{
"Ref":"DBUsername"
},
":",
{
"Ref":"DBPassword"
},
"@",
{
"Fn::GetAtt":[
"MasterDB",
"Endpoint.Address"
]
},
":",
{
"Fn::GetAtt":[
"MasterDB",
"Endpoint.Port"
]
},
"/",
{
"Ref":"DBName"
},
" --db-prefix=drupal_\n",
" # use the S3 bucket for shared file storage\n",
" cp -R sites/default/files_original/* sites/default/files\n",
" cp -R sites/default/files_original/.htaccess sites/default/files\n",
"fi\n",
"# Copy settings.php file since everything else is configured\n",
"cp /home/ec2-user/settings.php /var/www/html/sites/default\n",
"rm /home/ec2-user/settings.php\n",
"/usr/bin/mysql -u ",
{
"Ref":"DBUsername"
},
" -p",
{
"Ref":"DBPassword"
},
" -h ",
{
"Fn::GetAtt":[
"MasterDB",
"Endpoint.Address"
]
},
" -D ",
{
"Ref":"DBName"
},
" -e 'update drupal_block set status = 0 where delta = \"login\"'\n",
"# All is well so signal success\n",
"/opt/aws/bin/cfn-signal -e 0 -r \"Drupal setup complete\" '",
{
"Ref":"WaitHandle"
},
"'\n"
]
]
}
}
}
},
"WaitHandle":{
"Type":"AWS::CloudFormation::WaitConditionHandle"
},
"WaitCondition":{
"Type":"AWS::CloudFormation::WaitCondition",
"DependsOn":"WebServerGroup1",
"Properties":{
"Handle":{
"Ref":"WaitHandle"
},
"Timeout":"3000"
}
},
"MasterDB":{
"Type":"AWS::RDS::DBInstance",
"Properties":{
"DBName":{
"Ref":"DBName"
},
"AllocatedStorage":{
"Ref":"DBAllocatedStorage"
},
"DBInstanceClass":{
"Ref":"DBClass"
},
"Engine":"MySQL",
"EngineVersion":"5.6",
"DBInstanceIdentifier":"MasterDB2",
"DBSecurityGroups":[
{
"Ref":"DBSecurityGroup"
}
],
"MasterUsername":{
"Ref":"DBUsername"
},
"MasterUserPassword":{
"Ref":"DBPassword"
},
"MultiAZ":{
"Ref":"MultiAZDatabase"
},
"Tags":[
{
"Key":"Name",
"Value":"Drupaljam Drupal Master Database"
}
]
},
"DeletionPolicy":"Snapshot"
},
"ReplicaDB":{
"Type":"AWS::RDS::DBInstance",
"Properties":{
"DBInstanceIdentifier":"SlaveDB2",
"SourceDBInstanceIdentifier":{
"Ref":"MasterDB"
},
"DBInstanceClass":{
"Ref":"DBClass"
},
"Tags":[
{
"Key":"Name",
"Value":"Drupaljam Drupal Read Replica Database"
}
]
}
},
"DBSecurityGroup":{
"Type":"AWS::RDS::DBSecurityGroup",
"Properties":{
"DBSecurityGroupIngress":{
"EC2SecurityGroupName":{
"Ref":"WebServerSecurityGroup"
}
},
"GroupDescription":"Frontend Access"
}
},
"WebServerSecurityGroup":{
"Type":"AWS::EC2::SecurityGroup",
"Properties":{
"GroupDescription":"Enable HTTP access via port 80, locked down to requests from the load balancer only and SSH access",
"SecurityGroupIngress":[
{
"IpProtocol":"tcp",
"FromPort":"80",
"ToPort":"80",
"SourceSecurityGroupOwnerId":{
"Fn::GetAtt":[
"ElasticLoadBalancer",
"SourceSecurityGroup.OwnerAlias"
]
},
"SourceSecurityGroupName":{
"Fn::GetAtt":[
"ElasticLoadBalancer",
"SourceSecurityGroup.GroupName"
]
}
},
{
"IpProtocol":"tcp",
"FromPort":"22",
"ToPort":"22",
"CidrIp":{
"Ref":"SSHLocation"
}
}
]
}
}
},
"Outputs":{
"WebsiteURL":{
"Value":{
"Fn::Join":[
"",
[
"http://",
{
"Fn::GetAtt":[
"ElasticLoadBalancer",
"DNSName"
]
}
]
]
},
"Description":"Drupal Website"
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment