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