Created
September 24, 2021 17:43
-
-
Save lioneltchami/0fd4ab238b2e37c672d1fea4fd420e1f to your computer and use it in GitHub Desktop.
CloudFormation Wordpress Template
This file contains hidden or 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": "Enterprise Wordpress Setup", | |
| "Parameters": { | |
| "KeyName": { | |
| "Description": "Key Pair name", | |
| "Type": "AWS::EC2::KeyPair::KeyName", | |
| "Default": "mykey" | |
| } | |
| }, | |
| "Mappings": { | |
| "EC2RegionMap": { | |
| "ap-northeast-1": {"AmazonLinuxAMIHVMEBSBacked64bit": "ami-cbf90ecb"}, | |
| "ap-southeast-1": {"AmazonLinuxAMIHVMEBSBacked64bit": "ami-68d8e93a"}, | |
| "ap-southeast-2": {"AmazonLinuxAMIHVMEBSBacked64bit": "ami-fd9cecc7"}, | |
| "eu-central-1": {"AmazonLinuxAMIHVMEBSBacked64bit": "ami-a8221fb5"}, | |
| "eu-west-1": {"AmazonLinuxAMIHVMEBSBacked64bit": "ami-a10897d6"}, | |
| "sa-east-1": {"AmazonLinuxAMIHVMEBSBacked64bit": "ami-b52890a8"}, | |
| "us-east-1": {"AmazonLinuxAMIHVMEBSBacked64bit": "ami-1ecae776"}, | |
| "us-west-1": {"AmazonLinuxAMIHVMEBSBacked64bit": "ami-d114f295"}, | |
| "us-west-2": {"AmazonLinuxAMIHVMEBSBacked64bit": "ami-e7527ed7"} | |
| } | |
| }, | |
| "Resources": { | |
| "VPC": { | |
| "Type": "AWS::EC2::VPC", | |
| "Properties": { | |
| "CidrBlock": "172.31.0.0/16", | |
| "EnableDnsHostnames": "true" | |
| } | |
| }, | |
| "InternetGateway": { | |
| "Type": "AWS::EC2::InternetGateway", | |
| "Properties": { | |
| } | |
| }, | |
| "VPCGatewayAttachment": { | |
| "Type": "AWS::EC2::VPCGatewayAttachment", | |
| "Properties": { | |
| "VpcId": {"Ref": "VPC"}, | |
| "InternetGatewayId": {"Ref": "InternetGateway"} | |
| } | |
| }, | |
| "SubnetA": { | |
| "Type": "AWS::EC2::Subnet", | |
| "Properties": { | |
| "AvailabilityZone": {"Fn::Select": ["0", {"Fn::GetAZs": ""}]}, | |
| "CidrBlock": "172.31.38.0/24", | |
| "VpcId": {"Ref": "VPC"} | |
| } | |
| }, | |
| "SubnetB": { | |
| "Type": "AWS::EC2::Subnet", | |
| "Properties": { | |
| "AvailabilityZone": {"Fn::Select": ["1", {"Fn::GetAZs": ""}]}, | |
| "CidrBlock": "172.31.37.0/24", | |
| "VpcId": {"Ref": "VPC"} | |
| } | |
| }, | |
| "RouteTable": { | |
| "Type": "AWS::EC2::RouteTable", | |
| "Properties": { | |
| "VpcId": {"Ref": "VPC"} | |
| } | |
| }, | |
| "RouteTableAssociationA": { | |
| "Type": "AWS::EC2::SubnetRouteTableAssociation", | |
| "Properties": { | |
| "SubnetId": {"Ref": "SubnetA"}, | |
| "RouteTableId": {"Ref": "RouteTable"} | |
| } | |
| }, | |
| "RouteTableAssociationB": { | |
| "Type": "AWS::EC2::SubnetRouteTableAssociation", | |
| "Properties": { | |
| "SubnetId": {"Ref": "SubnetB"}, | |
| "RouteTableId": {"Ref": "RouteTable"} | |
| } | |
| }, | |
| "RoutePublicNATToInternet": { | |
| "Type": "AWS::EC2::Route", | |
| "Properties": { | |
| "RouteTableId": {"Ref": "RouteTable"}, | |
| "DestinationCidrBlock": "0.0.0.0/0", | |
| "GatewayId": {"Ref": "InternetGateway"} | |
| }, | |
| "DependsOn": "VPCGatewayAttachment" | |
| }, | |
| "NetworkAcl": { | |
| "Type": "AWS::EC2::NetworkAcl", | |
| "Properties": { | |
| "VpcId": {"Ref": "VPC"} | |
| } | |
| }, | |
| "SubnetNetworkAclAssociationA": { | |
| "Type": "AWS::EC2::SubnetNetworkAclAssociation", | |
| "Properties": { | |
| "SubnetId": {"Ref": "SubnetA"}, | |
| "NetworkAclId": {"Ref": "NetworkAcl"} | |
| } | |
| }, | |
| "SubnetNetworkAclAssociationB": { | |
| "Type": "AWS::EC2::SubnetNetworkAclAssociation", | |
| "Properties": { | |
| "SubnetId": {"Ref": "SubnetB"}, | |
| "NetworkAclId": {"Ref": "NetworkAcl"} | |
| } | |
| }, | |
| "NetworkAclEntryIngress": { | |
| "Type": "AWS::EC2::NetworkAclEntry", | |
| "Properties": { | |
| "NetworkAclId": {"Ref": "NetworkAcl"}, | |
| "RuleNumber": "100", | |
| "Protocol": "-1", | |
| "RuleAction": "allow", | |
| "Egress": "false", | |
| "CidrBlock": "0.0.0.0/0" | |
| } | |
| }, | |
| "NetworkAclEntryEgress": { | |
| "Type": "AWS::EC2::NetworkAclEntry", | |
| "Properties": { | |
| "NetworkAclId": {"Ref": "NetworkAcl"}, | |
| "RuleNumber": "100", | |
| "Protocol": "-1", | |
| "RuleAction": "allow", | |
| "Egress": "true", | |
| "CidrBlock": "0.0.0.0/0" | |
| } | |
| }, | |
| "LoadBalancer": { | |
| "Type": "AWS::ElasticLoadBalancing::LoadBalancer", | |
| "Properties": { | |
| "Subnets": [{"Ref": "SubnetA"}, {"Ref": "SubnetB"}], | |
| "LoadBalancerName": "awsinaction-elb", | |
| "Listeners": [{ | |
| "InstancePort": "80", | |
| "InstanceProtocol": "HTTP", | |
| "LoadBalancerPort": "80", | |
| "Protocol": "HTTP" | |
| }], | |
| "HealthCheck": { | |
| "HealthyThreshold": "2", | |
| "Interval": "5", | |
| "Target": "TCP:80", | |
| "Timeout": "3", | |
| "UnhealthyThreshold": "2" | |
| }, | |
| "SecurityGroups": [{"Ref": "LoadBalancerSecurityGroup"}], | |
| "Scheme": "internet-facing" | |
| }, | |
| "DependsOn": "VPCGatewayAttachment" | |
| }, | |
| "LoadBalancerSecurityGroup": { | |
| "Type": "AWS::EC2::SecurityGroup", | |
| "Properties": { | |
| "GroupDescription": "awsinaction-elb-sg", | |
| "VpcId": {"Ref": "VPC"}, | |
| "SecurityGroupIngress": [{ | |
| "CidrIp": "0.0.0.0/0", | |
| "FromPort": 80, | |
| "IpProtocol": "tcp", | |
| "ToPort": 80 | |
| }] | |
| } | |
| }, | |
| "WebServerSecurityGroup": { | |
| "Type": "AWS::EC2::SecurityGroup", | |
| "Properties": { | |
| "GroupDescription": "awsinaction-sg", | |
| "VpcId": {"Ref": "VPC"}, | |
| "SecurityGroupIngress": [{ | |
| "CidrIp": "0.0.0.0/0", | |
| "FromPort": 22, | |
| "IpProtocol": "tcp", | |
| "ToPort": 22 | |
| }, { | |
| "FromPort": 80, | |
| "IpProtocol": "tcp", | |
| "SourceSecurityGroupId": {"Ref": "LoadBalancerSecurityGroup"}, | |
| "ToPort": 80 | |
| }] | |
| } | |
| }, | |
| "DatabaseSecurityGroup": { | |
| "Type": "AWS::EC2::SecurityGroup", | |
| "Properties": { | |
| "GroupDescription": "awsinaction-db-sg", | |
| "VpcId": {"Ref": "VPC"}, | |
| "SecurityGroupIngress": [{ | |
| "IpProtocol": "tcp", | |
| "FromPort": "3306", | |
| "ToPort": "3306", | |
| "SourceSecurityGroupId": {"Ref": "WebServerSecurityGroup"} | |
| }] | |
| } | |
| }, | |
| "Database": { | |
| "Type": "AWS::RDS::DBInstance", | |
| "Properties": { | |
| "AllocatedStorage": "5", | |
| "BackupRetentionPeriod": "0", | |
| "DBInstanceClass": "db.t2.micro", | |
| "DBInstanceIdentifier": "awsinaction-db", | |
| "DBName": "wordpress", | |
| "Engine": "MySQL", | |
| "MasterUsername": "wordpress", | |
| "MasterUserPassword": "wordpress", | |
| "VPCSecurityGroups": [{"Fn::GetAtt": ["DatabaseSecurityGroup", "GroupId"]}], | |
| "DBSubnetGroupName": {"Ref": "DBSubnetGroup"} | |
| }, | |
| "DependsOn": "VPCGatewayAttachment" | |
| }, | |
| "DBSubnetGroup" : { | |
| "Type" : "AWS::RDS::DBSubnetGroup", | |
| "Properties" : { | |
| "DBSubnetGroupDescription" : "DB subnet group", | |
| "SubnetIds": [{"Ref": "SubnetA"}, {"Ref": "SubnetB"}] | |
| } | |
| }, | |
| "LaunchConfiguration": { | |
| "Type": "AWS::AutoScaling::LaunchConfiguration", | |
| "Metadata": { | |
| "AWS::CloudFormation::Init": { | |
| "config": { | |
| "packages": { | |
| "yum": { | |
| "php": [], | |
| "php-mysql": [], | |
| "mysql": [], | |
| "httpd": [] | |
| } | |
| }, | |
| "sources": { | |
| "/var/www/html": "https://wordpress.org/wordpress-4.2.4.tar.gz" | |
| }, | |
| "files": { | |
| "/tmp/config": { | |
| "content": {"Fn::Join": ["", [ | |
| "#!/bin/bash -ex\n", | |
| "cp /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php\n", | |
| "sed -i \"s/'database_name_here'/'wordpress'/g\" wp-config.php\n", | |
| "sed -i \"s/'username_here'/'wordpress'/g\" wp-config.php\n", | |
| "sed -i \"s/'password_here'/'wordpress'/g\" wp-config.php\n", | |
| "sed -i \"s/'localhost'/'", {"Fn::GetAtt": ["Database", "Endpoint.Address"]}, "'/g\" wp-config.php\n", | |
| "chmod -R 777 wp-content/ \n" | |
| ]]}, | |
| "mode": "000500", | |
| "owner": "root", | |
| "group": "root" | |
| } | |
| }, | |
| "commands": { | |
| "01_config": { | |
| "command": "/tmp/config", | |
| "cwd": "/var/www/html/wordpress" | |
| } | |
| }, | |
| "services": { | |
| "sysvinit": { | |
| "httpd": { | |
| "enabled": "true", | |
| "ensureRunning": "true" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "Properties": { | |
| "EbsOptimized": false, | |
| "ImageId": {"Fn::FindInMap": ["EC2RegionMap", {"Ref": "AWS::Region"}, "AmazonLinuxAMIHVMEBSBacked64bit"]}, | |
| "InstanceType": "t2.micro", | |
| "SecurityGroups": [{"Ref": "WebServerSecurityGroup"}], | |
| "KeyName": {"Ref": "KeyName"}, | |
| "AssociatePublicIpAddress": true, | |
| "UserData": {"Fn::Base64": {"Fn::Join": ["", [ | |
| "#!/bin/bash -ex\n", | |
| "yum update -y aws-cfn-bootstrap\n", | |
| "/opt/aws/bin/cfn-init -v --stack ", {"Ref": "AWS::StackName"}, " --resource LaunchConfiguration --region ", {"Ref": "AWS::Region"}, "\n", | |
| "/opt/aws/bin/cfn-signal -e $? --stack ", {"Ref": "AWS::StackName"}, " --resource AutoScalingGroup --region ", {"Ref": "AWS::Region"}, "\n" | |
| ]]}} | |
| } | |
| }, | |
| "AutoScalingGroup": { | |
| "Type": "AWS::AutoScaling::AutoScalingGroup", | |
| "Properties": { | |
| "LoadBalancerNames": [{"Ref": "LoadBalancer"}], | |
| "LaunchConfigurationName": {"Ref": "LaunchConfiguration"}, | |
| "MinSize": "2", | |
| "MaxSize": "2", | |
| "DesiredCapacity": "2", | |
| "VPCZoneIdentifier": [{"Ref": "SubnetA"}, {"Ref": "SubnetB"}] | |
| }, | |
| "CreationPolicy": { | |
| "ResourceSignal": { | |
| "Timeout": "PT10M" | |
| } | |
| }, | |
| "DependsOn": "VPCGatewayAttachment" | |
| } | |
| }, | |
| "Outputs": { | |
| "URL": { | |
| "Value": {"Fn::Join": ["", ["http://", {"Fn::GetAtt": ["LoadBalancer", "DNSName"]}, "/wordpress"]]}, | |
| "Description": "Wordpress URL" | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment