Created
October 10, 2019 05:03
-
-
Save 8secz-johndpope/a4b2e94b20ec676656250905e59889e5 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
AWSTemplateFormatVersion: 2010-09-09 | |
Description: >- | |
AWS CloudFormation Sample Template WordPress_Multi_AZ: WordPress is web | |
software you can use to create a beautiful website or blog. This template | |
installs a highly-available, scalable WordPress deployment using a multi-az | |
Amazon RDS database instance for storage. It demonstrates using the AWS | |
CloudFormation bootstrap scripts to deploy WordPress. **WARNING** This | |
template creates an Amazon EC2 instance, an Application Load Balancer and an | |
Amazon RDS database instance. You will be billed for the AWS resources used if | |
you create a stack from this template. | |
Parameters: | |
VpcId: | |
Type: 'AWS::EC2::VPC::Id' | |
Description: VpcId of your existing Virtual Private Cloud (VPC) | |
ConstraintDescription: must be the VPC Id of an existing Virtual Private Cloud. | |
Subnets: | |
Type: 'List<AWS::EC2::Subnet::Id>' | |
Description: The list of SubnetIds in your Virtual Private Cloud (VPC) | |
ConstraintDescription: >- | |
must be a list of at least two existing subnets associated with at least | |
two different availability zones. They should be residing in the selected | |
Virtual Private Cloud. | |
KeyName: | |
Description: Name of an existing EC2 KeyPair to enable SSH access to the instances | |
Type: 'AWS::EC2::KeyPair::KeyName' | |
ConstraintDescription: must be the name of an existing EC2 KeyPair. | |
InstanceType: | |
Description: WebServer EC2 instance type | |
Type: String | |
Default: t2.small | |
AllowedValues: | |
- t1.micro | |
- t2.nano | |
- t2.micro | |
- t2.small | |
- t2.medium | |
- t2.large | |
- m1.small | |
- m1.medium | |
- m1.large | |
- m1.xlarge | |
- m2.xlarge | |
- m2.2xlarge | |
- m2.4xlarge | |
- m3.medium | |
- m3.large | |
- m3.xlarge | |
- m3.2xlarge | |
- m4.large | |
- m4.xlarge | |
- m4.2xlarge | |
- m4.4xlarge | |
- m4.10xlarge | |
- c1.medium | |
- c1.xlarge | |
- c3.large | |
- c3.xlarge | |
- c3.2xlarge | |
- c3.4xlarge | |
- c3.8xlarge | |
- c4.large | |
- c4.xlarge | |
- c4.2xlarge | |
- c4.4xlarge | |
- c4.8xlarge | |
- g2.2xlarge | |
- g2.8xlarge | |
- r3.large | |
- r3.xlarge | |
- r3.2xlarge | |
- r3.4xlarge | |
- r3.8xlarge | |
- i2.xlarge | |
- i2.2xlarge | |
- i2.4xlarge | |
- i2.8xlarge | |
- d2.xlarge | |
- d2.2xlarge | |
- d2.4xlarge | |
- d2.8xlarge | |
- hi1.4xlarge | |
- hs1.8xlarge | |
- cr1.8xlarge | |
- cc2.8xlarge | |
- cg1.4xlarge | |
ConstraintDescription: must be a valid EC2 instance type. | |
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. | |
DBClass: | |
Description: Database instance class | |
Type: String | |
Default: db.t2.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.m4.large | |
- db.m4.xlarge | |
- db.m4.2xlarge | |
- db.m4.4xlarge | |
- db.m4.10xlarge | |
- 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 | |
- db.t2.micro | |
- db.t2.small | |
- db.t2.medium | |
- db.t2.large | |
ConstraintDescription: must select a valid database instance type. | |
DBName: | |
Default: wordpressdb | |
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. | |
DBUser: | |
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: | |
NoEcho: 'true' | |
Description: The WordPress database admin account password | |
Type: String | |
MinLength: '8' | |
MaxLength: '41' | |
AllowedPattern: '[a-zA-Z0-9]*' | |
ConstraintDescription: must contain only alphanumeric characters. | |
MultiAZDatabase: | |
Default: 'false' | |
Description: Create a Multi-AZ MySQL Amazon RDS database instance | |
Type: String | |
AllowedValues: | |
- 'true' | |
- 'false' | |
ConstraintDescription: must be either true or false. | |
WebServerCapacity: | |
Default: '1' | |
Description: The initial number of WebServer instances | |
Type: Number | |
MinValue: '1' | |
MaxValue: '5' | |
ConstraintDescription: must be between 1 and 5 EC2 instances. | |
DBAllocatedStorage: | |
Default: '5' | |
Description: The size of the database (Gb) | |
Type: Number | |
MinValue: '5' | |
MaxValue: '1024' | |
ConstraintDescription: must be between 5 and 1024Gb. | |
Mappings: | |
AWSInstanceType2Arch: | |
t1.micro: | |
Arch: HVM64 | |
t2.nano: | |
Arch: HVM64 | |
t2.micro: | |
Arch: HVM64 | |
t2.small: | |
Arch: HVM64 | |
t2.medium: | |
Arch: HVM64 | |
t2.large: | |
Arch: HVM64 | |
m1.small: | |
Arch: HVM64 | |
m1.medium: | |
Arch: HVM64 | |
m1.large: | |
Arch: HVM64 | |
m1.xlarge: | |
Arch: HVM64 | |
m2.xlarge: | |
Arch: HVM64 | |
m2.2xlarge: | |
Arch: HVM64 | |
m2.4xlarge: | |
Arch: HVM64 | |
m3.medium: | |
Arch: HVM64 | |
m3.large: | |
Arch: HVM64 | |
m3.xlarge: | |
Arch: HVM64 | |
m3.2xlarge: | |
Arch: HVM64 | |
m4.large: | |
Arch: HVM64 | |
m4.xlarge: | |
Arch: HVM64 | |
m4.2xlarge: | |
Arch: HVM64 | |
m4.4xlarge: | |
Arch: HVM64 | |
m4.10xlarge: | |
Arch: HVM64 | |
c1.medium: | |
Arch: HVM64 | |
c1.xlarge: | |
Arch: HVM64 | |
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 | |
g2.8xlarge: | |
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 | |
AWSInstanceType2NATArch: | |
t1.micro: | |
Arch: NATHVM64 | |
t2.nano: | |
Arch: NATHVM64 | |
t2.micro: | |
Arch: NATHVM64 | |
t2.small: | |
Arch: NATHVM64 | |
t2.medium: | |
Arch: NATHVM64 | |
t2.large: | |
Arch: NATHVM64 | |
m1.small: | |
Arch: NATHVM64 | |
m1.medium: | |
Arch: NATHVM64 | |
m1.large: | |
Arch: NATHVM64 | |
m1.xlarge: | |
Arch: NATHVM64 | |
m2.xlarge: | |
Arch: NATHVM64 | |
m2.2xlarge: | |
Arch: NATHVM64 | |
m2.4xlarge: | |
Arch: NATHVM64 | |
m3.medium: | |
Arch: NATHVM64 | |
m3.large: | |
Arch: NATHVM64 | |
m3.xlarge: | |
Arch: NATHVM64 | |
m3.2xlarge: | |
Arch: NATHVM64 | |
m4.large: | |
Arch: NATHVM64 | |
m4.xlarge: | |
Arch: NATHVM64 | |
m4.2xlarge: | |
Arch: NATHVM64 | |
m4.4xlarge: | |
Arch: NATHVM64 | |
m4.10xlarge: | |
Arch: NATHVM64 | |
c1.medium: | |
Arch: NATHVM64 | |
c1.xlarge: | |
Arch: NATHVM64 | |
c3.large: | |
Arch: NATHVM64 | |
c3.xlarge: | |
Arch: NATHVM64 | |
c3.2xlarge: | |
Arch: NATHVM64 | |
c3.4xlarge: | |
Arch: NATHVM64 | |
c3.8xlarge: | |
Arch: NATHVM64 | |
c4.large: | |
Arch: NATHVM64 | |
c4.xlarge: | |
Arch: NATHVM64 | |
c4.2xlarge: | |
Arch: NATHVM64 | |
c4.4xlarge: | |
Arch: NATHVM64 | |
c4.8xlarge: | |
Arch: NATHVM64 | |
g2.2xlarge: | |
Arch: NATHVMG2 | |
g2.8xlarge: | |
Arch: NATHVMG2 | |
r3.large: | |
Arch: NATHVM64 | |
r3.xlarge: | |
Arch: NATHVM64 | |
r3.2xlarge: | |
Arch: NATHVM64 | |
r3.4xlarge: | |
Arch: NATHVM64 | |
r3.8xlarge: | |
Arch: NATHVM64 | |
i2.xlarge: | |
Arch: NATHVM64 | |
i2.2xlarge: | |
Arch: NATHVM64 | |
i2.4xlarge: | |
Arch: NATHVM64 | |
i2.8xlarge: | |
Arch: NATHVM64 | |
d2.xlarge: | |
Arch: NATHVM64 | |
d2.2xlarge: | |
Arch: NATHVM64 | |
d2.4xlarge: | |
Arch: NATHVM64 | |
d2.8xlarge: | |
Arch: NATHVM64 | |
hi1.4xlarge: | |
Arch: NATHVM64 | |
hs1.8xlarge: | |
Arch: NATHVM64 | |
cr1.8xlarge: | |
Arch: NATHVM64 | |
cc2.8xlarge: | |
Arch: NATHVM64 | |
AWSRegionArch2AMI: | |
us-east-1: | |
HVM64: ami-0080e4c5bc078760e | |
HVMG2: ami-0aeb704d503081ea6 | |
us-west-2: | |
HVM64: ami-01e24be29428c15b2 | |
HVMG2: ami-0fe84a5b4563d8f27 | |
us-west-1: | |
HVM64: ami-0ec6517f6edbf8044 | |
HVMG2: ami-0a7fc72dc0e51aa77 | |
eu-west-1: | |
HVM64: ami-08935252a36e25f85 | |
HVMG2: ami-0d5299b1c6112c3c7 | |
eu-west-2: | |
HVM64: ami-01419b804382064e4 | |
HVMG2: NOT_SUPPORTED | |
eu-west-3: | |
HVM64: ami-0dd7e7ed60da8fb83 | |
HVMG2: NOT_SUPPORTED | |
eu-central-1: | |
HVM64: ami-0cfbf4f6db41068ac | |
HVMG2: ami-0aa1822e3eb913a11 | |
eu-north-1: | |
HVM64: ami-86fe70f8 | |
HVMG2: ami-32d55b4c | |
ap-northeast-1: | |
HVM64: ami-00a5245b4816c38e6 | |
HVMG2: ami-09d0e0e099ecabba2 | |
ap-northeast-2: | |
HVM64: ami-00dc207f8ba6dc919 | |
HVMG2: NOT_SUPPORTED | |
ap-northeast-3: | |
HVM64: ami-0b65f69a5c11f3522 | |
HVMG2: NOT_SUPPORTED | |
ap-southeast-1: | |
HVM64: ami-05b3bcf7f311194b3 | |
HVMG2: ami-0e46ce0d6a87dc979 | |
ap-southeast-2: | |
HVM64: ami-02fd0b06f06d93dfc | |
HVMG2: ami-0c0ab057a101d8ff2 | |
ap-south-1: | |
HVM64: ami-0ad42f4f66f6c1cc9 | |
HVMG2: ami-0244c1d42815af84a | |
us-east-2: | |
HVM64: ami-0cd3dfa4e37921605 | |
HVMG2: NOT_SUPPORTED | |
ca-central-1: | |
HVM64: ami-07423fb63ea0a0930 | |
HVMG2: NOT_SUPPORTED | |
sa-east-1: | |
HVM64: ami-05145e0b28ad8e0b2 | |
HVMG2: NOT_SUPPORTED | |
cn-north-1: | |
HVM64: ami-053617c9d818c1189 | |
HVMG2: NOT_SUPPORTED | |
cn-northwest-1: | |
HVM64: ami-0f7937761741dc640 | |
HVMG2: NOT_SUPPORTED | |
Resources: | |
ApplicationLoadBalancer: | |
Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer' | |
Properties: | |
Subnets: !Ref Subnets | |
ALBListener: | |
Type: 'AWS::ElasticLoadBalancingV2::Listener' | |
Properties: | |
DefaultActions: | |
- Type: forward | |
TargetGroupArn: !Ref ALBTargetGroup | |
LoadBalancerArn: !Ref ApplicationLoadBalancer | |
Port: '80' | |
Protocol: HTTP | |
ALBTargetGroup: | |
Type: 'AWS::ElasticLoadBalancingV2::TargetGroup' | |
Properties: | |
HealthCheckPath: /wordpress/wp-admin/install.php | |
HealthCheckIntervalSeconds: 10 | |
HealthCheckTimeoutSeconds: 5 | |
HealthyThresholdCount: 2 | |
Port: 80 | |
Protocol: HTTP | |
UnhealthyThresholdCount: 5 | |
VpcId: !Ref VpcId | |
TargetGroupAttributes: | |
- Key: stickiness.enabled | |
Value: 'true' | |
- Key: stickiness.type | |
Value: lb_cookie | |
- Key: stickiness.lb_cookie.duration_seconds | |
Value: '30' | |
WebServerSecurityGroup: | |
Type: 'AWS::EC2::SecurityGroup' | |
Properties: | |
GroupDescription: >- | |
Enable HTTP access via port 80 locked down to the load balancer + SSH | |
access | |
SecurityGroupIngress: | |
- IpProtocol: tcp | |
FromPort: '80' | |
ToPort: '80' | |
SourceSecurityGroupId: !Select | |
- 0 | |
- !GetAtt | |
- ApplicationLoadBalancer | |
- SecurityGroups | |
- IpProtocol: tcp | |
FromPort: '22' | |
ToPort: '22' | |
CidrIp: !Ref SSHLocation | |
VpcId: !Ref VpcId | |
WebServerGroup: | |
Type: 'AWS::AutoScaling::AutoScalingGroup' | |
Properties: | |
VPCZoneIdentifier: !Ref Subnets | |
LaunchConfigurationName: !Ref LaunchConfig | |
MinSize: '1' | |
MaxSize: '5' | |
DesiredCapacity: !Ref WebServerCapacity | |
TargetGroupARNs: | |
- !Ref ALBTargetGroup | |
CreationPolicy: | |
ResourceSignal: | |
Timeout: PT15M | |
UpdatePolicy: | |
AutoScalingRollingUpdate: | |
MinInstancesInService: '1' | |
MaxBatchSize: '1' | |
PauseTime: PT15M | |
WaitOnResourceSignals: 'true' | |
LaunchConfig: | |
Type: 'AWS::AutoScaling::LaunchConfiguration' | |
Metadata: | |
'AWS::CloudFormation::Init': | |
configSets: | |
wordpress_install: | |
- install_cfn | |
- install_wordpress | |
install_cfn: | |
files: | |
/etc/cfn/cfn-hup.conf: | |
content: !Join | |
- '' | |
- - | | |
[main] | |
- stack= | |
- !Ref 'AWS::StackId' | |
- |+ | |
- region= | |
- !Ref 'AWS::Region' | |
- |+ | |
mode: '000400' | |
owner: root | |
group: root | |
/etc/cfn/hooks.d/cfn-auto-reloader.conf: | |
content: !Join | |
- '' | |
- - | | |
[cfn-auto-reloader-hook] | |
- | | |
triggers=post.update | |
- > | |
path=Resources.LaunchConfig.Metadata.AWS::CloudFormation::Init | |
- 'action=/opt/aws/bin/cfn-init -v ' | |
- ' --stack ' | |
- !Ref 'AWS::StackName' | |
- ' --resource LaunchConfig ' | |
- ' --configsets wordpress_install ' | |
- ' --region ' | |
- !Ref 'AWS::Region' | |
- |+ | |
mode: '000400' | |
owner: root | |
group: root | |
services: | |
sysvinit: | |
cfn-hup: | |
enabled: 'true' | |
ensureRunning: 'true' | |
files: | |
- /etc/cfn/cfn-hup.conf | |
- /etc/cfn/hooks.d/cfn-auto-reloader.conf | |
install_wordpress: | |
packages: | |
yum: | |
php56: [] | |
mysql: [] | |
php56-xml: [] | |
php56-xmlrpc: [] | |
php56-soap: [] | |
php56-gd: [] | |
php56-mysqlnd: [] | |
sources: | |
/var/www/html: "http://wordpress.org/latest.tar.gz" | |
files: | |
/tmp/create-wp-config: | |
content: !Join | |
- '' | |
- - | | |
#!/bin/bash | |
- > | |
cp /var/www/html/wordpress/wp-config-sample.php | |
/var/www/html/wordpress/wp-config.php | |
- sed -i "s/'database_name_here'/' | |
- !Ref DBName | |
- | | |
'/g" wp-config.php | |
- sed -i "s/'username_here'/' | |
- !Ref DBUser | |
- | | |
'/g" wp-config.php | |
- sed -i "s/'password_here'/' | |
- !Ref DBPassword | |
- | | |
'/g" wp-config.php | |
- sed -i "s/'localhost'/' | |
- !GetAtt | |
- DBInstance | |
- Endpoint.Address | |
- | | |
'/g" wp-config.php | |
mode: '000500' | |
owner: root | |
group: root | |
commands: | |
01_configure_wordpress: | |
command: /tmp/create-wp-config | |
cwd: /var/www/html/wordpress | |
services: | |
sysvinit: | |
httpd: | |
enabled: 'true' | |
ensureRunning: 'true' | |
Properties: | |
ImageId: !FindInMap | |
- AWSRegionArch2AMI | |
- !Ref 'AWS::Region' | |
- !FindInMap | |
- AWSInstanceType2Arch | |
- !Ref InstanceType | |
- Arch | |
InstanceType: !Ref InstanceType | |
SecurityGroups: | |
- !Ref WebServerSecurityGroup | |
KeyName: !Ref KeyName | |
UserData: !Base64 | |
'Fn::Join': | |
- '' | |
- - | | |
#!/bin/bash -xe | |
- | | |
yum update -y aws-cfn-bootstrap | |
- '/opt/aws/bin/cfn-init -v ' | |
- ' --stack ' | |
- !Ref 'AWS::StackName' | |
- ' --resource LaunchConfig ' | |
- ' --configsets wordpress_install ' | |
- ' --region ' | |
- !Ref 'AWS::Region' | |
- |+ | |
- '/opt/aws/bin/cfn-signal -e $? ' | |
- ' --stack ' | |
- !Ref 'AWS::StackName' | |
- ' --resource WebServerGroup ' | |
- ' --region ' | |
- !Ref 'AWS::Region' | |
- |+ | |
DBEC2SecurityGroup: | |
Type: 'AWS::EC2::SecurityGroup' | |
Properties: | |
GroupDescription: Open database for access | |
SecurityGroupIngress: | |
- IpProtocol: tcp | |
FromPort: '3306' | |
ToPort: '3306' | |
SourceSecurityGroupId: !Ref WebServerSecurityGroup | |
VpcId: !Ref VpcId | |
DBInstance: | |
Type: 'AWS::RDS::DBInstance' | |
Properties: | |
DBName: !Ref DBName | |
Engine: MySQL | |
MultiAZ: !Ref MultiAZDatabase | |
MasterUsername: !Ref DBUser | |
MasterUserPassword: !Ref DBPassword | |
DBInstanceClass: !Ref DBClass | |
AllocatedStorage: !Ref DBAllocatedStorage | |
VPCSecurityGroups: | |
- !GetAtt | |
- DBEC2SecurityGroup | |
- GroupId | |
Outputs: | |
WebsiteURL: | |
Value: !Join | |
- '' | |
- - 'http://' | |
- !GetAtt | |
- ApplicationLoadBalancer | |
- DNSName | |
- /wordpress | |
Description: WordPress Website |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment