Last active
December 16, 2015 12:58
-
-
Save rs-randallburt/5437967 to your computer and use it in GitHub Desktop.
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
HeatTemplateFormatVersion: '2012-12-12' | |
Description: AWS CloudFormation Sample 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.large, m1.xlarge, m2.xlarge, | |
m2.2xlarge, m2.4xlarge, c1.medium, c1.xlarge, cc1.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: {Default: admin, NoEcho: 'true', | |
Description: Root password for MySQL, Type: String, | |
MinLength: '1', MaxLength: '41', AllowedPattern: '[a-zA-Z0-9]*', | |
ConstraintDescription: must contain only alphanumeric characters.} | |
LinuxDistribution: | |
Default: F17 | |
Description: Distribution of choice | |
Type: String | |
AllowedValues: [F18, F17, U10, RHEL-6.1, RHEL-6.2, RHEL-6.3] | |
Mappings: | |
AWSInstanceType2Arch: | |
t1.micro: {Arch: '32'} | |
m1.small: {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: '32'} | |
c1.xlarge: {Arch: '64'} | |
cc1.4xlarge: {Arch: '64'} | |
DistroArch2AMI: | |
F18: {'32': F18-i386-cfntools, '64': F18-x86_64-cfntools} | |
F17: {'32': F17-i386-cfntools, '64': F17-x86_64-cfntools} | |
U10: {'32': U10-i386-cfntools, '64': U10-x86_64-cfntools} | |
RHEL-6.1: {'32': rhel61-i386-cfntools, '64': rhel61-x86_64-cfntools} | |
RHEL-6.2: {'32': rhel62-i386-cfntools, '64': rhel62-x86_64-cfntools} | |
RHEL-6.3: {'32': rhel63-i386-cfntools, '64': rhel63-x86_64-cfntools} | |
Resources: | |
CfnUser: {Type: 'AWS::IAM::User'} | |
WebServerKeys: | |
Type: AWS::IAM::AccessKey | |
Properties: | |
UserName: {Ref: CfnUser} | |
WebServerGroup: | |
Type: AWS::AutoScaling::AutoScalingGroup | |
Properties: | |
AvailabilityZones: {'Fn::GetAZs': ''} | |
LaunchConfigurationName: {Ref: LaunchConfig} | |
MinSize: '1' | |
MaxSize: '3' | |
LoadBalancerNames: | |
- {Ref: ElasticLoadBalancer} | |
WebServerScaleUpPolicy: | |
Type: AWS::AutoScaling::ScalingPolicy | |
Properties: | |
AdjustmentType: ChangeInCapacity | |
AutoScalingGroupName: {Ref: WebServerGroup} | |
Cooldown: '60' | |
ScalingAdjustment: '1' | |
WebServerScaleDownPolicy: | |
Type: AWS::AutoScaling::ScalingPolicy | |
Properties: | |
AdjustmentType: ChangeInCapacity | |
AutoScalingGroupName: {Ref: WebServerGroup} | |
Cooldown: '60' | |
ScalingAdjustment: '-1' | |
MEMAlarmHigh: | |
Type: AWS::CloudWatch::Alarm | |
Properties: | |
AlarmDescription: Scale-up if MEM > 50% for 1 minute | |
MetricName: MemoryUtilization | |
Namespace: system/linux | |
Statistic: Average | |
Period: '60' | |
EvaluationPeriods: '1' | |
Threshold: '50' | |
AlarmActions: | |
- {Ref: WebServerScaleUpPolicy} | |
Dimensions: | |
- Name: AutoScalingGroupName | |
Value: {Ref: WebServerGroup} | |
ComparisonOperator: GreaterThanThreshold | |
MEMAlarmLow: | |
Type: AWS::CloudWatch::Alarm | |
Properties: | |
AlarmDescription: Scale-down if MEM < 15% for 1 minute | |
MetricName: MemoryUtilization | |
Namespace: system/linux | |
Statistic: Average | |
Period: '60' | |
EvaluationPeriods: '1' | |
Threshold: '15' | |
AlarmActions: | |
- {Ref: WebServerScaleDownPolicy} | |
Dimensions: | |
- Name: AutoScalingGroupName | |
Value: {Ref: WebServerGroup} | |
ComparisonOperator: LessThanThreshold | |
ElasticLoadBalancer: | |
Type: AWS::ElasticLoadBalancing::LoadBalancer | |
Properties: | |
AvailabilityZones: {'Fn::GetAZs': ''} | |
Listeners: | |
- {LoadBalancerPort: '80', InstancePort: '80', | |
Protocol: HTTP} | |
HealthCheck: {Target: 'HTTP:80/', HealthyThreshold: '3', | |
UnhealthyThreshold: '5', Interval: '30', Timeout: '5'} | |
LaunchConfig: | |
Type: AWS::AutoScaling::LaunchConfiguration | |
Metadata: | |
AWS::CloudFormation::Init: | |
config: | |
files: | |
/etc/cfn/cfn-credentials: | |
content: | |
Fn::Join: | |
- '' | |
- - AWSAccessKeyId= | |
- {Ref: WebServerKeys} | |
- ' | |
' | |
- AWSSecretKey= | |
- Fn::GetAtt: [WebServerKeys, SecretAccessKey] | |
- ' | |
' | |
mode: '000400' | |
owner: root | |
group: root | |
/tmp/setup.mysql: | |
content: | |
Fn::Join: | |
- '' | |
- - 'CREATE DATABASE ' | |
- {Ref: DBName} | |
- '; | |
' | |
- 'GRANT ALL PRIVILEGES ON ' | |
- {Ref: DBName} | |
- .* TO ' | |
- {Ref: DBUsername} | |
- '''@''localhost'' | |
' | |
- IDENTIFIED BY ' | |
- {Ref: DBPassword} | |
- '''; | |
' | |
- 'FLUSH PRIVILEGES; | |
' | |
- 'EXIT | |
' | |
mode: '000644' | |
owner: root | |
group: root | |
/tmp/stats-crontab.txt: | |
content: | |
Fn::Join: | |
- '' | |
- - 'MAIL="" | |
' | |
- ' | |
' | |
- '* * * * * /opt/aws/bin/cfn-push-stats --watch ' | |
- {Ref: MEMAlarmHigh} | |
- ' --mem-util | |
' | |
- '* * * * * /opt/aws/bin/cfn-push-stats --watch ' | |
- {Ref: MEMAlarmLow} | |
- ' --mem-util | |
' | |
mode: '000600' | |
owner: root | |
group: root | |
packages: | |
yum: | |
python-psutil: [] | |
cronie: [] | |
mysql: [] | |
mysql-server: [] | |
httpd: [] | |
wordpress: [] | |
services: | |
systemd: | |
mysqld: {enabled: 'true', ensureRunning: 'true'} | |
httpd: {enabled: 'true', ensureRunning: 'true'} | |
crond: {enabled: 'true', ensureRunning: 'true'} | |
Properties: | |
ImageId: | |
Fn::FindInMap: | |
- DistroArch2AMI | |
- {Ref: LinuxDistribution} | |
- Fn::FindInMap: | |
- AWSInstanceType2Arch | |
- {Ref: InstanceType} | |
- Arch | |
InstanceType: {Ref: InstanceType} | |
KeyName: {Ref: KeyName} | |
UserData: | |
Fn::Base64: | |
Fn::Join: | |
- '' | |
- - '#!/bin/bash -v | |
' | |
- '/opt/aws/bin/cfn-init -s ' | |
- {Ref: 'AWS::StackName'} | |
- ' -r LaunchConfig ' | |
- ' --region ' | |
- {Ref: 'AWS::Region'} | |
- ' | |
' | |
- '# Setup MySQL root password and create a user | |
' | |
- mysqladmin -u root password ' | |
- {Ref: DBRootPassword} | |
- ''' | |
' | |
- mysql -u root --password=' | |
- {Ref: DBRootPassword} | |
- ''' < /tmp/setup.mysql | |
' | |
- 'sed -i "/Deny from All/d" /etc/httpd/conf.d/wordpress.conf | |
' | |
- sed --in-place --e s/database_name_here/ | |
- {Ref: DBName} | |
- / --e s/username_here/ | |
- {Ref: DBUsername} | |
- / --e s/password_here/ | |
- {Ref: DBPassword} | |
- '/ /usr/share/wordpress/wp-config.php | |
' | |
- 'systemctl restart httpd.service | |
' | |
- '# install crontab | |
' | |
- 'crontab /tmp/stats-crontab.txt | |
' | |
Outputs: | |
URL: | |
Description: The URL of the website | |
Value: | |
Fn::Join: | |
- '' | |
- - http:// | |
- Fn::GetAtt: [ElasticLoadBalancer, DNSName] | |
- /wordpress | |
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
name: Simple Wordpress | |
services: | |
blog: | |
requires: | |
- compute: | |
type: linux | |
constraints: | |
os: {option: linuxdistribution} | |
flavor: {option: instancetype} | |
components: | |
wordpress: | |
requires: | |
- application: | |
name: wordpress | |
role: web | |
relations: | |
- blog: db | |
db: | |
requires: | |
- database: | |
type: mysql | |
constraints: | |
name: { option: dbname } | |
username: { option: dbusername } | |
password: { option: dbpassword } | |
rootpw: { option: dbrootpassword } | |
options: | |
instancetype: | |
description: Webserver instance type | |
type: string | |
default: m1.large | |
constraints: | |
- in: | |
values: | |
- m1.large | |
- m1.xlarge | |
- m2.large | |
- m2.xlarge | |
message: "Must be one of m1.large, m1.xlarge, m2.large, m2.xlarge" | |
dbname: | |
description: The wordpress database name | |
type: string | |
default: wordpress | |
constraints: | |
- len: | |
min: 1 | |
max: 64 | |
message: Must be between 1 and 64 characters | |
- matches: | |
expr: [a-zA-Z][a-zA-Z0-9]* | |
message: must begin with a letter and contain only alphanumeric characters | |
dbusername: | |
description: The wordpress database admin account username | |
type: string | |
default: admin | |
constraints: | |
- len: | |
min: 1 | |
max: 16 | |
message: must be between 1 and 16 characters | |
- matches: | |
expr: [a-zA-Z0-9]* | |
message: must contain only alphanumeric characters | |
dbpassword: | |
description: The WordPress database admin account password | |
type: password | |
default: admin | |
constraints: | |
- len: | |
min: 1 | |
max: 41 | |
message: must be between 1 and 41 characters | |
- matches: | |
expr: [a-zA-Z0-9]* | |
message: must contain only alphanumeric characters | |
dbrootpassword: | |
description: Root password for MySQL | |
type: password | |
default: admin | |
constraints: | |
- len: | |
min: 1 | |
max: 41 | |
message: must be between 1 and 41 characters | |
- matches: | |
expr: [a-zA-Z0-9]* | |
message: must contain only alphanumeric characters | |
linuxdistribution: | |
description: Distribution of choice | |
type: string | |
default: F17 | |
constraints: | |
- in | |
values: | |
- F18 | |
- F17 | |
- U10 | |
- RHEL-6.1 | |
- RHEL-6.2 | |
- RHEL-6.3 |
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
HeatTemplateFormatVersion: '2012-12-12' | |
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.' | |
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.large | |
AllowedValues: [t1.micro, m1.small, m1.large, m1.xlarge, m2.xlarge, | |
m2.2xlarge, m2.4xlarge, c1.medium, c1.xlarge, cc1.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: {Default: admin, NoEcho: 'true', | |
Description: Root password for MySQL, Type: String, | |
MinLength: '1', MaxLength: '41', AllowedPattern: '[a-zA-Z0-9]*', | |
ConstraintDescription: must contain only alphanumeric characters.} | |
LinuxDistribution: | |
Default: F17 | |
Description: Distribution of choice | |
Type: String | |
AllowedValues: [F18, F17, U10, RHEL-6.1, RHEL-6.2, RHEL-6.3] | |
Mappings: | |
AWSInstanceType2Arch: | |
t1.micro: {Arch: '32'} | |
m1.small: {Arch: '32'} | |
m1.large: {Arch: '64'} | |
m1.xlarge: {Arch: '64'} | |
m2.xlarge: {Arch: '64'} | |
m2.2xlarge: {Arch: '64'} | |
m2.4xlarge: {Arch: '64'} | |
c1.medium: {Arch: '32'} | |
c1.xlarge: {Arch: '64'} | |
cc1.4xlarge: {Arch: '64'} | |
DistroArch2AMI: | |
F18: {'32': F18-i386-cfntools, '64': F18-x86_64-cfntools} | |
F17: {'32': F17-i386-cfntools, '64': F17-x86_64-cfntools} | |
U10: {'32': U10-i386-cfntools, '64': U10-x86_64-cfntools} | |
RHEL-6.1: {'32': rhel61-i386-cfntools, '64': rhel61-x86_64-cfntools} | |
RHEL-6.2: {'32': rhel62-i386-cfntools, '64': rhel62-x86_64-cfntools} | |
RHEL-6.3: {'32': rhel63-i386-cfntools, '64': rhel63-x86_64-cfntools} | |
Resources: | |
WikiDatabase: | |
Type: AWS::EC2::Instance | |
Metadata: | |
AWS::CloudFormation::Init: | |
config: | |
packages: | |
yum: | |
mysql: [] | |
mysql-server: [] | |
httpd: [] | |
wordpress: [] | |
services: | |
systemd: | |
mysqld: {enabled: 'true', ensureRunning: 'true'} | |
httpd: {enabled: 'true', ensureRunning: 'true'} | |
Properties: | |
ImageId: | |
Fn::FindInMap: | |
- DistroArch2AMI | |
- {Ref: LinuxDistribution} | |
- Fn::FindInMap: | |
- AWSInstanceType2Arch | |
- {Ref: InstanceType} | |
- Arch | |
InstanceType: {Ref: InstanceType} | |
KeyName: {Ref: KeyName} | |
UserData: | |
Fn::Base64: | |
Fn::Join: | |
- '' | |
- - '#!/bin/bash -v | |
' | |
- '/opt/aws/bin/cfn-init | |
' | |
- '# Setup MySQL root password and create a user | |
' | |
- mysqladmin -u root password ' | |
- {Ref: DBRootPassword} | |
- ''' | |
' | |
- cat << EOF | mysql -u root --password=' | |
- {Ref: DBRootPassword} | |
- ''' | |
' | |
- 'CREATE DATABASE ' | |
- {Ref: DBName} | |
- '; | |
' | |
- 'GRANT ALL PRIVILEGES ON ' | |
- {Ref: DBName} | |
- .* TO " | |
- {Ref: DBUsername} | |
- '"@"localhost" | |
' | |
- IDENTIFIED BY " | |
- {Ref: DBPassword} | |
- '"; | |
' | |
- 'FLUSH PRIVILEGES; | |
' | |
- 'EXIT | |
' | |
- 'EOF | |
' | |
- 'sed -i "/Deny from All/d" /etc/httpd/conf.d/wordpress.conf | |
' | |
- 'sed -i "s/Require local/Require all granted/" /etc/httpd/conf.d/wordpress.conf | |
' | |
- sed --in-place --e s/database_name_here/ | |
- {Ref: DBName} | |
- / --e s/username_here/ | |
- {Ref: DBUsername} | |
- / --e s/password_here/ | |
- {Ref: DBPassword} | |
- '/ /usr/share/wordpress/wp-config.php | |
' | |
- 'systemctl restart httpd.service | |
' | |
Outputs: | |
WebsiteURL: | |
Value: | |
Fn::Join: | |
- '' | |
- - http:// | |
- Fn::GetAtt: [WikiDatabase, PublicIp] | |
- /wordpress | |
Description: URL for Wordpress wiki | |
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
name: High Availability WordPress | |
version: 1.0.0 | |
services: | |
lb: | |
requires: | |
loadbalancer: | |
protocol: | |
- http | |
- https | |
constraints: | |
- algorithm: ROUND_ROBIN | |
relations: | |
- web: http | |
- master: http | |
master: | |
requires: | |
- compute: | |
type: linux | |
constraints: | |
os: {option: linuxdistribution} | |
flavor: {option: instancetype} | |
components: | |
wordpress: | |
requires: | |
- application: | |
name: wordpress | |
role: master | |
relations: | |
- backend: blogdb | |
constraints: | |
- count: 1 | |
web: | |
requires: | |
- compute: | |
type: linux | |
constraints: | |
os: {option: linuxdistribution} | |
flavor: {option: instancetype} | |
components: | |
wordpress: | |
requires: | |
- application: | |
name: wordpress | |
role: web | |
relations: | |
- backend: blogdb | |
- master: wordpress | |
backend: | |
requires: | |
- datastore: | |
- type: mysql | |
components: | |
- blogdb: | |
requires: | |
- database: | |
constraints: | |
name: { option: dbname } | |
username: { option: dbusername } | |
password: { option: dbpassword } | |
rootpw: { option: dbrootpassword } | |
options: | |
instancetype: | |
description: Webserver instance type | |
type: string | |
default: m1.large | |
constraints: | |
- in: | |
values: | |
- m1.large | |
- m1.xlarge | |
- m2.large | |
- m2.xlarge | |
message: "Must be one of m1.large, m1.xlarge, m2.large, m2.xlarge" | |
dbname: | |
description: The wordpress database name | |
type: string | |
default: wordpress | |
constraints: | |
- len: | |
min: 1 | |
max: 64 | |
message: Must be between 1 and 64 characters | |
- matches: | |
expr: [a-zA-Z][a-zA-Z0-9]* | |
message: must begin with a letter and contain only alphanumeric characters | |
dbusername: | |
description: The wordpress database admin account username | |
type: string | |
default: admin | |
constraints: | |
- len: | |
min: 1 | |
max: 16 | |
message: must be between 1 and 16 characters | |
- matches: | |
expr: [a-zA-Z0-9]* | |
message: must contain only alphanumeric characters | |
dbpassword: | |
description: The WordPress database admin account password | |
type: password | |
default: admin | |
constraints: | |
- len: | |
min: 1 | |
max: 41 | |
message: must be between 1 and 41 characters | |
- matches: | |
expr: [a-zA-Z0-9]* | |
message: must contain only alphanumeric characters | |
dbrootpassword: | |
description: Root password for MySQL | |
type: password | |
default: admin | |
constraints: | |
- len: | |
min: 1 | |
max: 41 | |
message: must be between 1 and 41 characters | |
- matches: | |
expr: [a-zA-Z0-9]* | |
message: must contain only alphanumeric characters | |
linuxdistribution: | |
description: Distribution of choice | |
type: string | |
default: F17 | |
constraints: | |
- in | |
values: | |
- F18 | |
- F17 | |
- U10 | |
- RHEL-6.1 | |
- RHEL-6.2 | |
- RHEL-6.3 |
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
HeatTemplateFormatVersion: '2012-12-12' | |
Description: 'AWS CloudFormation Sample Template WordPress_Multi_Instance: | |
WordPress is web software you can use to create a beautiful website or blog. This | |
template installs two instances: one running a WordPress deployment and the other | |
using a local MySQL database to store the data.' | |
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.large | |
AllowedValues: [t1.micro, m1.small, m1.large, m1.xlarge, m2.xlarge, | |
m2.2xlarge, m2.4xlarge, c1.medium, c1.xlarge, cc1.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: {Default: admin, NoEcho: 'true', | |
Description: Root password for MySQL, Type: String, | |
MinLength: '1', MaxLength: '41', AllowedPattern: '[a-zA-Z0-9]*', | |
ConstraintDescription: must contain only alphanumeric characters.} | |
LinuxDistribution: | |
Default: F17 | |
Description: Distribution of choice | |
Type: String | |
AllowedValues: [F18, F17, U10, RHEL-6.1, RHEL-6.2, RHEL-6.3] | |
HupPollInterval: {Default: '1', Description: Interval | |
for cfn-hup, Type: String} | |
Mappings: | |
AWSInstanceType2Arch: | |
t1.micro: {Arch: '32'} | |
m1.small: {Arch: '32'} | |
m1.large: {Arch: '64'} | |
m1.xlarge: {Arch: '64'} | |
m2.xlarge: {Arch: '64'} | |
m2.2xlarge: {Arch: '64'} | |
m2.4xlarge: {Arch: '64'} | |
c1.medium: {Arch: '32'} | |
c1.xlarge: {Arch: '64'} | |
cc1.4xlarge: {Arch: '64'} | |
DistroArch2AMI: | |
F18: {'32': F18-i386-cfntools, '64': F18-x86_64-cfntools} | |
F17: {'32': F17-i386-cfntools, '64': F17-x86_64-cfntools} | |
U10: {'32': U10-i386-cfntools, '64': U10-x86_64-cfntools} | |
RHEL-6.1: {'32': rhel61-i386-cfntools, '64': rhel61-x86_64-cfntools} | |
RHEL-6.2: {'32': rhel62-i386-cfntools, '64': rhel62-x86_64-cfntools} | |
RHEL-6.3: {'32': rhel63-i386-cfntools, '64': rhel63-x86_64-cfntools} | |
Resources: | |
CfnUser: {Type: 'AWS::IAM::User'} | |
WebServerKeys: | |
Type: AWS::IAM::AccessKey | |
Properties: | |
UserName: {Ref: CfnUser} | |
WebServerRestartPolicy: | |
Type: OS::Heat::HARestarter | |
Properties: | |
InstanceId: {Ref: WikiDatabase} | |
HttpFailureAlarm: | |
Type: AWS::CloudWatch::Alarm | |
Properties: | |
AlarmDescription: Restart the WikiDatabase if httpd fails > | |
3 times in 10 minutes | |
MetricName: ServiceFailure | |
Namespace: system/linux | |
Statistic: SampleCount | |
Period: '300' | |
EvaluationPeriods: '1' | |
Threshold: '2' | |
AlarmActions: | |
- {Ref: WebServerRestartPolicy} | |
ComparisonOperator: GreaterThanThreshold | |
WikiDatabase: | |
Type: AWS::EC2::Instance | |
Metadata: | |
AWS::CloudFormation::Init: | |
config: | |
files: | |
/etc/cfn/cfn-credentials: | |
content: | |
Fn::Join: | |
- '' | |
- - AWSAccessKeyId= | |
- {Ref: WebServerKeys} | |
- ' | |
' | |
- AWSSecretKey= | |
- Fn::GetAtt: [WebServerKeys, SecretAccessKey] | |
- ' | |
' | |
mode: '000400' | |
owner: root | |
group: root | |
/etc/cfn/cfn-hup.conf: | |
content: | |
Fn::Join: | |
- '' | |
- - '[main] | |
' | |
- stack= | |
- {Ref: 'AWS::StackName'} | |
- ' | |
' | |
- 'credential-file=/etc/cfn/cfn-credentials | |
' | |
- region= | |
- {Ref: 'AWS::Region'} | |
- ' | |
' | |
- interval= | |
- {Ref: HupPollInterval} | |
- ' | |
' | |
mode: '000400' | |
owner: root | |
group: root | |
/etc/cfn/notify-on-httpd-restarted: | |
content: | |
Fn::Join: | |
- '' | |
- - '#!/bin/sh | |
' | |
- '/opt/aws/bin/cfn-push-stats --watch ' | |
- {Ref: HttpFailureAlarm} | |
- ' --service-failure | |
' | |
mode: '000700' | |
owner: root | |
group: root | |
/tmp/cfn-hup-crontab.txt: | |
content: | |
Fn::Join: | |
- '' | |
- ['MAIL="" | |
', ' | |
', '* * * * * /opt/aws/bin/cfn-hup -f | |
'] | |
mode: '000600' | |
owner: root | |
group: root | |
/tmp/setup.mysql: | |
content: | |
Fn::Join: | |
- '' | |
- - 'CREATE DATABASE ' | |
- {Ref: DBName} | |
- '; | |
' | |
- 'GRANT ALL PRIVILEGES ON ' | |
- {Ref: DBName} | |
- .* TO ' | |
- {Ref: DBUsername} | |
- '''@''localhost'' | |
' | |
- IDENTIFIED BY ' | |
- {Ref: DBPassword} | |
- '''; | |
' | |
- 'FLUSH PRIVILEGES; | |
' | |
- 'EXIT | |
' | |
mode: '000644' | |
owner: root | |
group: root | |
/etc/cfn/hooks.conf: | |
content: | |
Fn::Join: | |
- '' | |
- ['[cfn-http-restarted] | |
', 'triggers=service.restarted | |
', 'path=Resources.WikiDatabase.Metadata | |
', 'action=/etc/cfn/notify-on-httpd-restarted | |
', 'runas=root | |
'] | |
mode: '000400' | |
owner: root | |
group: root | |
packages: | |
yum: | |
cronie: [] | |
mysql: [] | |
mysql-server: [] | |
httpd: [] | |
wordpress: [] | |
services: | |
systemd: | |
mysqld: {enabled: 'true', ensureRunning: 'true'} | |
httpd: {enabled: 'true', ensureRunning: 'true'} | |
crond: {enabled: 'true', ensureRunning: 'true'} | |
Properties: | |
ImageId: | |
Fn::FindInMap: | |
- DistroArch2AMI | |
- {Ref: LinuxDistribution} | |
- Fn::FindInMap: | |
- AWSInstanceType2Arch | |
- {Ref: InstanceType} | |
- Arch | |
InstanceType: {Ref: InstanceType} | |
KeyName: {Ref: KeyName} | |
UserData: | |
Fn::Base64: | |
Fn::Join: | |
- '' | |
- - '#!/bin/bash -v | |
' | |
- '# Helper function | |
' | |
- 'function error_exit | |
' | |
- '{ | |
' | |
- ' /opt/aws/bin/cfn-signal -e 1 -r "$1" ''' | |
- {Ref: WaitHandle} | |
- ''' | |
' | |
- ' exit 1 | |
' | |
- '} | |
' | |
- '/opt/aws/bin/cfn-init -s ' | |
- {Ref: 'AWS::StackName'} | |
- ' -r WikiDatabase ' | |
- ' --access-key ' | |
- {Ref: WebServerKeys} | |
- ' --secret-key ' | |
- Fn::GetAtt: [WebServerKeys, SecretAccessKey] | |
- ' --region ' | |
- {Ref: 'AWS::Region'} | |
- ' || error_exit ''Failed to run cfn-init'' | |
' | |
- '# Setup MySQL root password and create a user | |
' | |
- mysqladmin -u root password ' | |
- {Ref: DBRootPassword} | |
- ''' || error_exit ''Failed to initialize root password'' | |
' | |
- mysql -u root --password=' | |
- {Ref: DBRootPassword} | |
- ''' < /tmp/setup.mysql || error_exit ''Failed to create database.'' | |
' | |
- 'sed -i "/Deny from All/d" /etc/httpd/conf.d/wordpress.conf | |
' | |
- 'sed -i "s/Require local/Require all granted/" /etc/httpd/conf.d/wordpress.conf | |
' | |
- sed --in-place --e s/database_name_here/ | |
- {Ref: DBName} | |
- / --e s/username_here/ | |
- {Ref: DBUsername} | |
- / --e s/password_here/ | |
- {Ref: DBPassword} | |
- '/ /usr/share/wordpress/wp-config.php | |
' | |
- 'systemctl restart httpd.service | |
' | |
- '# install cfn-hup crontab | |
' | |
- 'crontab /tmp/cfn-hup-crontab.txt | |
' | |
- '# All is well so signal success | |
' | |
- /opt/aws/bin/cfn-signal -e 0 -r "Wiki server setup complete" ' | |
- {Ref: WaitHandle} | |
- ''' | |
' | |
WaitHandle: {Type: 'AWS::CloudFormation::WaitConditionHandle'} | |
WaitCondition: | |
Type: AWS::CloudFormation::WaitCondition | |
DependsOn: WikiDatabase | |
Properties: | |
Handle: {Ref: WaitHandle} | |
Count: '1' | |
Timeout: '600' | |
Outputs: | |
WebsiteURL: | |
Value: | |
Fn::Join: | |
- '' | |
- - http:// | |
- Fn::GetAtt: [WikiDatabase, PublicIp] | |
- /wordpress | |
Description: URL for Wordpress wiki | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment