1d378fd4f9
Based on the following $ nova flavor-list +----+-----------+-----------+------+-----------+------+-------+ | ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | +----+-----------+-----------+------+-----------+------+-------+ | 1 | m1.tiny | 512 | 0 | 0 | | 1 | 2 | m1.small | 2048 | 20 | 0 | | 1 - m1.small is specified as the Default for InstanceType parameters (previously this was m1.medium or m1.large. It would be better if there was a flavor with 1GB memory, but m1.small is the next most appropriate.) - m1.tiny is the only flavor mapped to Arch=32 in AWSInstanceType2Arch - AllowedValues and AWSInstanceType2Arch mapping is now limited to the following nova defaults: [ "m1.tiny", "m1.small", "m1.medium", "m1.large", "m1.xlarge" ] This will allow heat/tools/nova_create_flavors.sh to be deleted. Part of blueprint default-nova-flavors Change-Id: Ia8bba4bd17a2d665676104fbdeb1e188b55aeeaf
331 lines
9.6 KiB
YAML
331 lines
9.6 KiB
YAML
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.small
|
|
AllowedValues: [m1.tiny, m1.small, m1.medium, m1.large, m1.xlarge]
|
|
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:
|
|
m1.tiny: {Arch: '32'}
|
|
m1.small: {Arch: '64'}
|
|
m1.medium: {Arch: '64'}
|
|
m1.large: {Arch: '64'}
|
|
m1.xlarge: {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
|
|
|