Last active
September 5, 2018 04:55
-
-
Save glenngillen/39e673a7f86e1256f8dac21085720140 to your computer and use it in GitHub Desktop.
Windows Server 2012 IIS HA, based on https://github.com/rhossi/cloud-formation-templates/blob/master/windows_2012_iis_ha.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": "HA IIS Web Server with Windows 2012", | |
| "Mappings": { | |
| "AWSInstanceType2Arch": { | |
| "c1.medium": { | |
| "Arch": "64" | |
| }, | |
| "c1.xlarge": { | |
| "Arch": "64" | |
| }, | |
| "m1.large": { | |
| "Arch": "64" | |
| }, | |
| "m1.medium": { | |
| "Arch": "64" | |
| }, | |
| "m1.small": { | |
| "Arch": "64" | |
| }, | |
| "m1.xlarge": { | |
| "Arch": "64" | |
| }, | |
| "m2.2xlarge": { | |
| "Arch": "64" | |
| }, | |
| "m2.4xlarge": { | |
| "Arch": "64" | |
| }, | |
| "m2.xlarge": { | |
| "Arch": "64" | |
| } | |
| }, | |
| "AWSRegionArch2AMI": { | |
| "ap-northeast-1": { | |
| "64": "ami-cfcdb3ce" | |
| }, | |
| "ap-southeast-1": { | |
| "64": "ami-1a1b4848" | |
| }, | |
| "ap-southeast-2": { | |
| "64": "ami-dfa73fe5" | |
| }, | |
| "eu-west-1": { | |
| "64": "ami-a1867dd6" | |
| }, | |
| "sa-east-1": { | |
| "64": "ami-234eec3e" | |
| }, | |
| "us-east-1": { | |
| "64": "ami-5f938e36" | |
| }, | |
| "us-west-1": { | |
| "64": "ami-e0e0d9a5" | |
| }, | |
| "us-west-2": { | |
| "64": "ami-c8ed86f8" | |
| } | |
| } | |
| }, | |
| "Parameters": { | |
| "Build": { | |
| "Description": "Build number that is going to be deployed", | |
| "Type": "Number" | |
| }, | |
| "HealthCheckTarget": { | |
| "Default": "", | |
| "Description": "Target used by the ELB to perform the Health Checks", | |
| "Type": "String" | |
| }, | |
| "InstanceType": { | |
| "AllowedValues": [ | |
| "m1.small", | |
| "m1.medium", | |
| "m1.large", | |
| "m1.xlarge", | |
| "m2.xlarge", | |
| "m2.2xlarge", | |
| "m2.4xlarge", | |
| "c1.medium", | |
| "c1.xlarge" | |
| ], | |
| "Default": "m1.large", | |
| "Description": "Auto Scaling EC2 instance type", | |
| "Type": "String" | |
| }, | |
| "KeyPairName": { | |
| "Description": "Name of the keypair to launch the instances", | |
| "Type": "String" | |
| }, | |
| "MaxAutoScalingSize": { | |
| "Default": 4, | |
| "Description": "Maximum size of the Auto Scaling Group", | |
| "MinValue": 2, | |
| "Type": "Number" | |
| }, | |
| "MinAutoScalingSize": { | |
| "Default": 2, | |
| "Description": "Minimum size of the Auto Scaling Group", | |
| "MinValue": 2, | |
| "Type": "Number" | |
| }, | |
| "S3Bucket": { | |
| "Description": "Bucket to download deployment from", | |
| "Type": "String" | |
| }, | |
| "VPC": { | |
| "Description": "ID of an existing VPC", | |
| "Type": "String" | |
| } | |
| }, | |
| "Resources": { | |
| "CPUAlarmHigh": { | |
| "Properties": { | |
| "AlarmActions": [ | |
| { | |
| "Ref": "ScaleUpPolicy" | |
| } | |
| ], | |
| "AlarmDescription": "Alarm if CPU too high or metric disappears indicating instance is down", | |
| "ComparisonOperator": "GreaterThanThreshold", | |
| "Dimensions": [ | |
| { | |
| "Name": "AutoScalingGroupName", | |
| "Value": { | |
| "Ref": "WebServerASG" | |
| } | |
| } | |
| ], | |
| "EvaluationPeriods": "1", | |
| "MetricName": "CPUUtilization", | |
| "Namespace": "AWS/EC2", | |
| "Period": "60", | |
| "Statistic": "Average", | |
| "Threshold": "60" | |
| }, | |
| "Type": "AWS::CloudWatch::Alarm" | |
| }, | |
| "CPUAlarmLow": { | |
| "Properties": { | |
| "AlarmActions": [ | |
| { | |
| "Ref": "ScaleDownPolicy" | |
| } | |
| ], | |
| "AlarmDescription": "Alarm if CPU too low", | |
| "ComparisonOperator": "LessThanThreshold", | |
| "Dimensions": [ | |
| { | |
| "Name": "AutoScalingGroupName", | |
| "Value": { | |
| "Ref": "WebServerASG" | |
| } | |
| } | |
| ], | |
| "EvaluationPeriods": "1", | |
| "MetricName": "CPUUtilization", | |
| "Namespace": "AWS/EC2", | |
| "Period": "60", | |
| "Statistic": "Average", | |
| "Threshold": "30" | |
| }, | |
| "Type": "AWS::CloudWatch::Alarm" | |
| }, | |
| "InstanceProfile": { | |
| "Properties": { | |
| "Path": "/", | |
| "Roles": [ | |
| { | |
| "Ref": "InstanceRole" | |
| } | |
| ] | |
| }, | |
| "Type": "AWS::IAM::InstanceProfile" | |
| }, | |
| "InstanceRole": { | |
| "Properties": { | |
| "AssumeRolePolicyDocument": { | |
| "Statement": [ | |
| { | |
| "Action": [ | |
| "sts:AssumeRole" | |
| ], | |
| "Effect": "Allow", | |
| "Principal": { | |
| "Service": [ | |
| "ec2.amazonaws.com" | |
| ] | |
| } | |
| } | |
| ] | |
| }, | |
| "Path": "/" | |
| }, | |
| "Type": "AWS::IAM::Role" | |
| }, | |
| "RolePolicies": { | |
| "Properties": { | |
| "PolicyDocument": { | |
| "Statement": [ | |
| { | |
| "Action": [ | |
| "s3:GetObject" | |
| ], | |
| "Effect": "Allow", | |
| "Resource": [ | |
| { | |
| "Fn::Join": [ | |
| "", | |
| [ | |
| "arn:aws:s3:::", | |
| { | |
| "Ref": "S3Bucket" | |
| }, | |
| "/*" | |
| ] | |
| ] | |
| } | |
| ] | |
| } | |
| ] | |
| }, | |
| "PolicyName": "S3Download", | |
| "Roles": [ | |
| { | |
| "Ref": "InstanceRole" | |
| } | |
| ] | |
| }, | |
| "Type": "AWS::IAM::Policy" | |
| }, | |
| "ScaleDownPolicy": { | |
| "Properties": { | |
| "AdjustmentType": "ChangeInCapacity", | |
| "AutoScalingGroupName": { | |
| "Ref": "WebServerASG" | |
| }, | |
| "Cooldown": "300", | |
| "ScalingAdjustment": "-1" | |
| }, | |
| "Type": "AWS::AutoScaling::ScalingPolicy" | |
| }, | |
| "ScaleUpPolicy": { | |
| "Properties": { | |
| "AdjustmentType": "ChangeInCapacity", | |
| "AutoScalingGroupName": { | |
| "Ref": "WebServerASG" | |
| }, | |
| "Cooldown": "300", | |
| "ScalingAdjustment": "2" | |
| }, | |
| "Type": "AWS::AutoScaling::ScalingPolicy" | |
| }, | |
| "SecurityGroupRDP": { | |
| "Properties": { | |
| "GroupDescription": "Allow RDP to client host", | |
| "SecurityGroupIngress": [ | |
| { | |
| "CidrIp": "0.0.0.0/0", | |
| "FromPort": "3389", | |
| "IpProtocol": "tcp", | |
| "ToPort": "3389" | |
| } | |
| ] | |
| }, | |
| "Type": "AWS::EC2::SecurityGroup" | |
| }, | |
| "SecurityGroupWeb": { | |
| "Properties": { | |
| "GroupDescription": "Allow http to client host", | |
| "SecurityGroupIngress": [ | |
| { | |
| "CidrIp": "0.0.0.0/0", | |
| "FromPort": "80", | |
| "IpProtocol": "tcp", | |
| "ToPort": "80" | |
| } | |
| ] | |
| }, | |
| "Type": "AWS::EC2::SecurityGroup" | |
| }, | |
| "WebServerASG": { | |
| "Properties": { | |
| "AvailabilityZones": { | |
| "Fn::GetAZs": "" | |
| }, | |
| "LaunchConfigurationName": { | |
| "Ref": "WebServerLC" | |
| }, | |
| "LoadBalancerNames": [ | |
| { | |
| "Ref": "WebServerELB" | |
| } | |
| ], | |
| "MaxSize": { | |
| "Ref": "MaxAutoScalingSize" | |
| }, | |
| "MinSize": { | |
| "Ref": "MinAutoScalingSize" | |
| } | |
| }, | |
| "Type": "AWS::AutoScaling::AutoScalingGroup" | |
| }, | |
| "WebServerELB": { | |
| "Properties": { | |
| "AvailabilityZones": { | |
| "Fn::GetAZs": "" | |
| }, | |
| "HealthCheck": { | |
| "HealthyThreshold": "3", | |
| "Interval": "30", | |
| "Target": { | |
| "Fn::Join": [ | |
| "", | |
| [ | |
| "HTTP:80/", | |
| { | |
| "Ref": "HealthCheckTarget" | |
| } | |
| ] | |
| ] | |
| }, | |
| "Timeout": "5", | |
| "UnhealthyThreshold": "5" | |
| }, | |
| "Listeners": [ | |
| { | |
| "InstancePort": "80", | |
| "LoadBalancerPort": "80", | |
| "Protocol": "HTTP" | |
| } | |
| ] | |
| }, | |
| "Type": "AWS::ElasticLoadBalancing::LoadBalancer" | |
| }, | |
| "WebServerLC": { | |
| "Metadata": { | |
| "AWS::CloudFormation::Authentication": { | |
| "default": { | |
| "buckets": [ | |
| { | |
| "Ref": "S3Bucket" | |
| } | |
| ], | |
| "roleName": { | |
| "Ref": "InstanceRole" | |
| }, | |
| "type": "s3" | |
| } | |
| }, | |
| "AWS::CloudFormation::Init": { | |
| "configSets" : { | |
| "setup" : ["setupCfn", "deploySite"], | |
| "deploy" : ["stopSite", "deploySite", "startSite"] | |
| }, | |
| "setupCfn": { | |
| "files": { | |
| "c:\\cfn\\cfn-hup.conf": { | |
| "content": { | |
| "Fn::Join": [ | |
| "", | |
| [ | |
| "[main]\n", | |
| "stack=", | |
| { | |
| "Ref": "AWS::StackId" | |
| }, | |
| "\n", | |
| "region=", | |
| { | |
| "Ref": "AWS::Region" | |
| }, | |
| "\n", | |
| "interval=1" | |
| ] | |
| ] | |
| } | |
| }, | |
| "c:\\cfn\\hooks.d\\cfn-auto-reloader.conf": { | |
| "content": { | |
| "Fn::Join": [ | |
| "", | |
| [ | |
| "[cfn-auto-reloader-hook]\n", | |
| "triggers=post.update\n", | |
| "path=Resources.WebServerLC.Metadata.AWS::CloudFormation::Init\n", | |
| "action=cfn-init.exe -v -c deploy -s ", | |
| { | |
| "Ref": "AWS::StackId" | |
| }, | |
| " -r WebServerLC", | |
| " --region ", | |
| { | |
| "Ref": "AWS::Region" | |
| }, | |
| "\n" | |
| ] | |
| ] | |
| } | |
| } | |
| }, | |
| "services": { | |
| "windows": { | |
| "cfn-hup": { | |
| "enabled": "true", | |
| "ensureRunning": "true", | |
| "files": [ | |
| "c:\\cfn\\cfn-hup.conf", | |
| "c:\\cfn\\hooks.d\\cfn-auto-reloader.conf" | |
| ] | |
| } | |
| } | |
| } | |
| }, | |
| "stopSite": { | |
| "commands" : { | |
| "1_stop_site" : { | |
| "command" : "iisreset /stop" | |
| } | |
| } | |
| }, | |
| "startSite": { | |
| "commands" : { | |
| "1_start_site" : { | |
| "command" : "iisreset /start" | |
| } | |
| } | |
| }, | |
| "deploySite": { | |
| "sources": { | |
| "c:\\inetpub\\site": { | |
| "Fn::Join": [ | |
| "", | |
| [ | |
| "http://", | |
| { | |
| "Ref": "S3Bucket" | |
| }, | |
| ".s3.amazonaws.com/", | |
| { | |
| "Ref": "Build" | |
| }, | |
| ".zip" | |
| ] | |
| ] | |
| } | |
| } | |
| } | |
| }, | |
| "Build": { | |
| "Ref": "Build" | |
| } | |
| }, | |
| "Properties": { | |
| "IamInstanceProfile": { | |
| "Ref": "InstanceProfile" | |
| }, | |
| "ImageId": { | |
| "Fn::FindInMap": [ | |
| "AWSRegionArch2AMI", | |
| { | |
| "Ref": "AWS::Region" | |
| }, | |
| { | |
| "Fn::FindInMap": [ | |
| "AWSInstanceType2Arch", | |
| { | |
| "Ref": "InstanceType" | |
| }, | |
| "Arch" | |
| ] | |
| } | |
| ] | |
| }, | |
| "InstanceType": { | |
| "Ref": "InstanceType" | |
| }, | |
| "KeyName": { | |
| "Ref": "KeyPairName" | |
| }, | |
| "SecurityGroups": [ | |
| { | |
| "Ref": "SecurityGroupWeb" | |
| }, | |
| { | |
| "Ref": "SecurityGroupRDP" | |
| } | |
| ], | |
| "UserData": { | |
| "Fn::Base64": { | |
| "Fn::Join": [ | |
| "", | |
| [ | |
| "<powershell>\n", | |
| "Add-WindowsFeature Web-WebServer -includeAllSubFeature -logpath $env:temp\\Web-WebServer_feature.log \n", | |
| "Add-WindowsFeature Web-Mgmt-Tools -includeAllSubFeature -logpath $env:temp\\Web-Mgmt-Tools_feature.log \n", | |
| "remove-website -name \"Default Web Site\" \n", | |
| "new-website -name site -port 80 -physicalpath c:\\inetpub\\site -ApplicationPool \".NET v4.5\" -force \n", | |
| "</powershell>\n", | |
| "<script>\n", | |
| "cfn-init.exe -v -c setup -s ", | |
| { | |
| "Ref": "AWS::StackId" | |
| }, | |
| " -r WebServerLC", | |
| " --region ", | |
| { | |
| "Ref": "AWS::Region" | |
| }, | |
| "\n", | |
| "cfn-signal.exe -e %ERRORLEVEL% \"", | |
| { "Fn::Base64" : { "Ref" : "WebServerLCWaitHandle" }}, | |
| "\"", | |
| "</script>\n" | |
| ] | |
| ] | |
| } | |
| } | |
| }, | |
| "Type": "AWS::AutoScaling::LaunchConfiguration" | |
| }, | |
| "WebServerLCWaitHandle" : { | |
| "Type" : "AWS::CloudFormation::WaitConditionHandle" | |
| }, | |
| "WebServerLCWaitCondition" : { | |
| "Type" : "AWS::CloudFormation::WaitCondition", | |
| "DependsOn" : "WebServerLC", | |
| "Properties" : { | |
| "Handle" : { "Ref" : "WebServerLCWaitHandle" }, | |
| "Timeout" : "1800" | |
| } | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment