From a288b370f516bf6b0a1ce711770f6f6c66793883 Mon Sep 17 00:00:00 2001 From: Kanagaraj Manickam Date: Tue, 22 Sep 2015 16:18:54 +0530 Subject: Fixes zuul failure template-validate is now updated to validate the template by using stack create validation path, which causes some of the existing templates in this repository to fail. so this patch is added to mark them as invalid and skip them as part of template validation. It was failing becuase of circular reference among the resources in these invalid templates. depends-on: I15891196be94d1e100869edeba0a7ef557edb36a Change-Id: I6a003f35495bb43e0ca2a824eb9e503c4059c37a --- cfn/F17/AutoScalingMultiAZSample.template | 286 ---------------------- cfn/F17/AutoScalingMultiAZSample.yaml | 277 --------------------- cfn/F17/invalid/AutoScalingMultiAZSample.template | 286 ++++++++++++++++++++++ cfn/F17/invalid/AutoScalingMultiAZSample.yaml | 277 +++++++++++++++++++++ 4 files changed, 563 insertions(+), 563 deletions(-) delete mode 100644 cfn/F17/AutoScalingMultiAZSample.template delete mode 100644 cfn/F17/AutoScalingMultiAZSample.yaml create mode 100644 cfn/F17/invalid/AutoScalingMultiAZSample.template create mode 100644 cfn/F17/invalid/AutoScalingMultiAZSample.yaml (limited to 'cfn') diff --git a/cfn/F17/AutoScalingMultiAZSample.template b/cfn/F17/AutoScalingMultiAZSample.template deleted file mode 100644 index 3271591..0000000 --- a/cfn/F17/AutoScalingMultiAZSample.template +++ /dev/null @@ -1,286 +0,0 @@ -{ - "AWSTemplateFormatVersion" : "2010-09-09", - - "Description" : "AWS CloudFormation Sample Template", - - "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" : [ "F17" ] - } - }, - - "Mappings" : { - "AWSInstanceType2Arch" : { - "m1.tiny" : { "Arch" : "32" }, - "m1.small" : { "Arch" : "64" }, - "m1.medium" : { "Arch" : "64" }, - "m1.large" : { "Arch" : "64" }, - "m1.xlarge" : { "Arch" : "64" } - }, - "DistroArch2AMI": { - "F17" : { "32" : "F17-i386-cfntools", "64" : "F17-x86_64-cfntools" } - } - }, - - "Resources" : { - "CfnUser" : { - "Type" : "AWS::IAM::User" - }, - "WebServerKeys" : { - "Type" : "AWS::IAM::AccessKey", - "Properties" : { - "UserName" : {"Ref": "CfnUser"} - } - }, - "WebServerGroup" : { - "Type" : "AWS::AutoScaling::AutoScalingGroup", - "Properties" : { - "AvailabilityZones" : { "Fn::GetAZs" : ""}, - "LaunchConfigurationName" : { "Ref" : "LaunchConfig" }, - "MinSize" : "1", - "MaxSize" : "3", - "LoadBalancerNames" : [ { "Ref" : "ElasticLoadBalancer" } ] - } - }, - - "WebServerScaleUpPolicy" : { - "Type" : "AWS::AutoScaling::ScalingPolicy", - "Properties" : { - "AdjustmentType" : "ChangeInCapacity", - "AutoScalingGroupName" : { "Ref" : "WebServerGroup" }, - "Cooldown" : "60", - "ScalingAdjustment" : "1" - } - }, - - "WebServerScaleDownPolicy" : { - "Type" : "AWS::AutoScaling::ScalingPolicy", - "Properties" : { - "AdjustmentType" : "ChangeInCapacity", - "AutoScalingGroupName" : { "Ref" : "WebServerGroup" }, - "Cooldown" : "60", - "ScalingAdjustment" : "-1" - } - }, - - "MEMAlarmHigh": { - "Type": "AWS::CloudWatch::Alarm", - "Properties": { - "AlarmDescription": "Scale-up if MEM > 50% for 1 minute", - "MetricName": "MemoryUtilization", - "Namespace": "system/linux", - "Statistic": "Average", - "Period": "60", - "EvaluationPeriods": "1", - "Threshold": "50", - "AlarmActions": [ { "Ref": "WebServerScaleUpPolicy" } ], - "Dimensions": [ - { - "Name": "AutoScalingGroupName", - "Value": { "Ref": "WebServerGroup" } - } - ], - "ComparisonOperator": "GreaterThanThreshold" - } - }, - "MEMAlarmLow": { - "Type": "AWS::CloudWatch::Alarm", - "Properties": { - "AlarmDescription": "Scale-down if MEM < 15% for 1 minute", - "MetricName": "MemoryUtilization", - "Namespace": "system/linux", - "Statistic": "Average", - "Period": "60", - "EvaluationPeriods": "1", - "Threshold": "15", - "AlarmActions": [ { "Ref": "WebServerScaleDownPolicy" } ], - "Dimensions": [ - { - "Name": "AutoScalingGroupName", - "Value": { "Ref": "WebServerGroup" } - } - ], - "ComparisonOperator": "LessThanThreshold" - } - }, - - "ElasticLoadBalancer" : { - "Type" : "AWS::ElasticLoadBalancing::LoadBalancer", - "Properties" : { - "AvailabilityZones" : { "Fn::GetAZs" : "" }, - "Listeners" : [ { - "LoadBalancerPort" : "80", - "InstancePort" : "80", - "Protocol" : "HTTP" - } ], - "HealthCheck" : { - "Target" : "HTTP:80/", - "HealthyThreshold" : "3", - "UnhealthyThreshold" : "5", - "Interval" : "30", - "Timeout" : "5" - } - } - }, - - "LaunchConfig" : { - "Type" : "AWS::AutoScaling::LaunchConfiguration", - "Metadata" : { - "AWS::CloudFormation::Init" : { - "config" : { - "files" : { - "/etc/cfn/cfn-credentials" : { - "content" : { "Fn::Join" : ["", [ - "AWSAccessKeyId=", { "Ref" : "WebServerKeys" }, "\n", - "AWSSecretKey=", {"Fn::GetAtt": ["WebServerKeys", - "SecretAccessKey"]}, "\n" - ]]}, - "mode" : "000400", - "owner" : "root", - "group" : "root" - }, - "/tmp/setup.mysql" : { - "content" : { "Fn::Join" : ["", [ - "CREATE DATABASE ", { "Ref" : "DBName" }, ";\n", - "GRANT ALL PRIVILEGES ON ", { "Ref" : "DBName" }, - ".* TO '", { "Ref" : "DBUsername" }, "'@'localhost'\n", - "IDENTIFIED BY '", { "Ref" : "DBPassword" }, "';\n", - "FLUSH PRIVILEGES;\n", - "EXIT\n" - ]]}, - "mode" : "000644", - "owner" : "root", - "group" : "root" - }, - "/tmp/stats-crontab.txt" : { - "content" : { "Fn::Join" : ["", [ - "MAIL=\"\"\n", - "\n", - "* * * * * /opt/aws/bin/cfn-push-stats --watch ", - { "Ref" : "MEMAlarmHigh" }, " --mem-util\n", - "* * * * * /opt/aws/bin/cfn-push-stats --watch ", - { "Ref" : "MEMAlarmLow" }, " --mem-util\n" - ]]}, - "mode" : "000600", - "owner" : "root", - "group" : "root" - } - }, - "packages" : { - "yum" : { - "python-psutil": [], - "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\n", - "/opt/aws/bin/cfn-init -s ", { "Ref" : "AWS::StackName" }, - " -r LaunchConfig ", - " --region ", { "Ref" : "AWS::Region" }, "\n", - - "# Setup MySQL root password and create a user\n", - "mysqladmin -u root password '", { "Ref" : "DBRootPassword" }, "'\n", - - "mysql -u root --password='", { "Ref" : "DBRootPassword" }, - "' < /tmp/setup.mysql\n", - - "sed -i \"/Deny from All/d\" /etc/httpd/conf.d/wordpress.conf\n", - "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\n", - "systemctl restart httpd.service\n", - - "# install crontab\n", - "crontab /tmp/stats-crontab.txt\n" - ]]}} - } - } - }, - - "Outputs" : { - "URL" : { - "Description" : "The URL of the website", - "Value" : { "Fn::Join" : [ "", [ "http://", { "Fn::GetAtt" : [ "ElasticLoadBalancer", "DNSName" ]}, "/wordpress"]] } - } - } -} diff --git a/cfn/F17/AutoScalingMultiAZSample.yaml b/cfn/F17/AutoScalingMultiAZSample.yaml deleted file mode 100644 index bc4ca4b..0000000 --- a/cfn/F17/AutoScalingMultiAZSample.yaml +++ /dev/null @@ -1,277 +0,0 @@ -HeatTemplateFormatVersion: '2012-12-12' -Description: AWS CloudFormation Sample Template -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] -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} - WebServerGroup: - Type: AWS::AutoScaling::AutoScalingGroup - Properties: - AvailabilityZones: {'Fn::GetAZs': ''} - LaunchConfigurationName: {Ref: LaunchConfig} - MinSize: '1' - MaxSize: '3' - LoadBalancerNames: - - {Ref: ElasticLoadBalancer} - WebServerScaleUpPolicy: - Type: AWS::AutoScaling::ScalingPolicy - Properties: - AdjustmentType: ChangeInCapacity - AutoScalingGroupName: {Ref: WebServerGroup} - Cooldown: '60' - ScalingAdjustment: '1' - WebServerScaleDownPolicy: - Type: AWS::AutoScaling::ScalingPolicy - Properties: - AdjustmentType: ChangeInCapacity - AutoScalingGroupName: {Ref: WebServerGroup} - Cooldown: '60' - ScalingAdjustment: '-1' - MEMAlarmHigh: - Type: AWS::CloudWatch::Alarm - Properties: - AlarmDescription: Scale-up if MEM > 50% for 1 minute - MetricName: MemoryUtilization - Namespace: system/linux - Statistic: Average - Period: '60' - EvaluationPeriods: '1' - Threshold: '50' - AlarmActions: - - {Ref: WebServerScaleUpPolicy} - Dimensions: - - Name: AutoScalingGroupName - Value: {Ref: WebServerGroup} - ComparisonOperator: GreaterThanThreshold - MEMAlarmLow: - Type: AWS::CloudWatch::Alarm - Properties: - AlarmDescription: Scale-down if MEM < 15% for 1 minute - MetricName: MemoryUtilization - Namespace: system/linux - Statistic: Average - Period: '60' - EvaluationPeriods: '1' - Threshold: '15' - AlarmActions: - - {Ref: WebServerScaleDownPolicy} - Dimensions: - - Name: AutoScalingGroupName - Value: {Ref: WebServerGroup} - ComparisonOperator: LessThanThreshold - ElasticLoadBalancer: - Type: AWS::ElasticLoadBalancing::LoadBalancer - Properties: - AvailabilityZones: {'Fn::GetAZs': ''} - Listeners: - - {LoadBalancerPort: '80', InstancePort: '80', - Protocol: HTTP} - HealthCheck: {Target: 'HTTP:80/', HealthyThreshold: '3', - UnhealthyThreshold: '5', Interval: '30', Timeout: '5'} - LaunchConfig: - Type: AWS::AutoScaling::LaunchConfiguration - 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 - /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 - /tmp/stats-crontab.txt: - content: - Fn::Join: - - '' - - - 'MAIL="" - - ' - - ' - - ' - - '* * * * * /opt/aws/bin/cfn-push-stats --watch ' - - {Ref: MEMAlarmHigh} - - ' --mem-util - - ' - - '* * * * * /opt/aws/bin/cfn-push-stats --watch ' - - {Ref: MEMAlarmLow} - - ' --mem-util - - ' - mode: '000600' - owner: root - group: root - packages: - yum: - python-psutil: [] - 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 - - ' - - '/opt/aws/bin/cfn-init -s ' - - {Ref: 'AWS::StackName'} - - ' -r LaunchConfig ' - - ' --region ' - - {Ref: 'AWS::Region'} - - ' - - ' - - '# Setup MySQL root password and create a user - - ' - - mysqladmin -u root password ' - - {Ref: DBRootPassword} - - ''' - - ' - - mysql -u root --password=' - - {Ref: DBRootPassword} - - ''' < /tmp/setup.mysql - - ' - - 'sed -i "/Deny from All/d" /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 crontab - - ' - - 'crontab /tmp/stats-crontab.txt - - ' -Outputs: - URL: - Description: The URL of the website - Value: - Fn::Join: - - '' - - - http:// - - Fn::GetAtt: [ElasticLoadBalancer, DNSName] - - /wordpress - diff --git a/cfn/F17/invalid/AutoScalingMultiAZSample.template b/cfn/F17/invalid/AutoScalingMultiAZSample.template new file mode 100644 index 0000000..3271591 --- /dev/null +++ b/cfn/F17/invalid/AutoScalingMultiAZSample.template @@ -0,0 +1,286 @@ +{ + "AWSTemplateFormatVersion" : "2010-09-09", + + "Description" : "AWS CloudFormation Sample Template", + + "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" : [ "F17" ] + } + }, + + "Mappings" : { + "AWSInstanceType2Arch" : { + "m1.tiny" : { "Arch" : "32" }, + "m1.small" : { "Arch" : "64" }, + "m1.medium" : { "Arch" : "64" }, + "m1.large" : { "Arch" : "64" }, + "m1.xlarge" : { "Arch" : "64" } + }, + "DistroArch2AMI": { + "F17" : { "32" : "F17-i386-cfntools", "64" : "F17-x86_64-cfntools" } + } + }, + + "Resources" : { + "CfnUser" : { + "Type" : "AWS::IAM::User" + }, + "WebServerKeys" : { + "Type" : "AWS::IAM::AccessKey", + "Properties" : { + "UserName" : {"Ref": "CfnUser"} + } + }, + "WebServerGroup" : { + "Type" : "AWS::AutoScaling::AutoScalingGroup", + "Properties" : { + "AvailabilityZones" : { "Fn::GetAZs" : ""}, + "LaunchConfigurationName" : { "Ref" : "LaunchConfig" }, + "MinSize" : "1", + "MaxSize" : "3", + "LoadBalancerNames" : [ { "Ref" : "ElasticLoadBalancer" } ] + } + }, + + "WebServerScaleUpPolicy" : { + "Type" : "AWS::AutoScaling::ScalingPolicy", + "Properties" : { + "AdjustmentType" : "ChangeInCapacity", + "AutoScalingGroupName" : { "Ref" : "WebServerGroup" }, + "Cooldown" : "60", + "ScalingAdjustment" : "1" + } + }, + + "WebServerScaleDownPolicy" : { + "Type" : "AWS::AutoScaling::ScalingPolicy", + "Properties" : { + "AdjustmentType" : "ChangeInCapacity", + "AutoScalingGroupName" : { "Ref" : "WebServerGroup" }, + "Cooldown" : "60", + "ScalingAdjustment" : "-1" + } + }, + + "MEMAlarmHigh": { + "Type": "AWS::CloudWatch::Alarm", + "Properties": { + "AlarmDescription": "Scale-up if MEM > 50% for 1 minute", + "MetricName": "MemoryUtilization", + "Namespace": "system/linux", + "Statistic": "Average", + "Period": "60", + "EvaluationPeriods": "1", + "Threshold": "50", + "AlarmActions": [ { "Ref": "WebServerScaleUpPolicy" } ], + "Dimensions": [ + { + "Name": "AutoScalingGroupName", + "Value": { "Ref": "WebServerGroup" } + } + ], + "ComparisonOperator": "GreaterThanThreshold" + } + }, + "MEMAlarmLow": { + "Type": "AWS::CloudWatch::Alarm", + "Properties": { + "AlarmDescription": "Scale-down if MEM < 15% for 1 minute", + "MetricName": "MemoryUtilization", + "Namespace": "system/linux", + "Statistic": "Average", + "Period": "60", + "EvaluationPeriods": "1", + "Threshold": "15", + "AlarmActions": [ { "Ref": "WebServerScaleDownPolicy" } ], + "Dimensions": [ + { + "Name": "AutoScalingGroupName", + "Value": { "Ref": "WebServerGroup" } + } + ], + "ComparisonOperator": "LessThanThreshold" + } + }, + + "ElasticLoadBalancer" : { + "Type" : "AWS::ElasticLoadBalancing::LoadBalancer", + "Properties" : { + "AvailabilityZones" : { "Fn::GetAZs" : "" }, + "Listeners" : [ { + "LoadBalancerPort" : "80", + "InstancePort" : "80", + "Protocol" : "HTTP" + } ], + "HealthCheck" : { + "Target" : "HTTP:80/", + "HealthyThreshold" : "3", + "UnhealthyThreshold" : "5", + "Interval" : "30", + "Timeout" : "5" + } + } + }, + + "LaunchConfig" : { + "Type" : "AWS::AutoScaling::LaunchConfiguration", + "Metadata" : { + "AWS::CloudFormation::Init" : { + "config" : { + "files" : { + "/etc/cfn/cfn-credentials" : { + "content" : { "Fn::Join" : ["", [ + "AWSAccessKeyId=", { "Ref" : "WebServerKeys" }, "\n", + "AWSSecretKey=", {"Fn::GetAtt": ["WebServerKeys", + "SecretAccessKey"]}, "\n" + ]]}, + "mode" : "000400", + "owner" : "root", + "group" : "root" + }, + "/tmp/setup.mysql" : { + "content" : { "Fn::Join" : ["", [ + "CREATE DATABASE ", { "Ref" : "DBName" }, ";\n", + "GRANT ALL PRIVILEGES ON ", { "Ref" : "DBName" }, + ".* TO '", { "Ref" : "DBUsername" }, "'@'localhost'\n", + "IDENTIFIED BY '", { "Ref" : "DBPassword" }, "';\n", + "FLUSH PRIVILEGES;\n", + "EXIT\n" + ]]}, + "mode" : "000644", + "owner" : "root", + "group" : "root" + }, + "/tmp/stats-crontab.txt" : { + "content" : { "Fn::Join" : ["", [ + "MAIL=\"\"\n", + "\n", + "* * * * * /opt/aws/bin/cfn-push-stats --watch ", + { "Ref" : "MEMAlarmHigh" }, " --mem-util\n", + "* * * * * /opt/aws/bin/cfn-push-stats --watch ", + { "Ref" : "MEMAlarmLow" }, " --mem-util\n" + ]]}, + "mode" : "000600", + "owner" : "root", + "group" : "root" + } + }, + "packages" : { + "yum" : { + "python-psutil": [], + "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\n", + "/opt/aws/bin/cfn-init -s ", { "Ref" : "AWS::StackName" }, + " -r LaunchConfig ", + " --region ", { "Ref" : "AWS::Region" }, "\n", + + "# Setup MySQL root password and create a user\n", + "mysqladmin -u root password '", { "Ref" : "DBRootPassword" }, "'\n", + + "mysql -u root --password='", { "Ref" : "DBRootPassword" }, + "' < /tmp/setup.mysql\n", + + "sed -i \"/Deny from All/d\" /etc/httpd/conf.d/wordpress.conf\n", + "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\n", + "systemctl restart httpd.service\n", + + "# install crontab\n", + "crontab /tmp/stats-crontab.txt\n" + ]]}} + } + } + }, + + "Outputs" : { + "URL" : { + "Description" : "The URL of the website", + "Value" : { "Fn::Join" : [ "", [ "http://", { "Fn::GetAtt" : [ "ElasticLoadBalancer", "DNSName" ]}, "/wordpress"]] } + } + } +} diff --git a/cfn/F17/invalid/AutoScalingMultiAZSample.yaml b/cfn/F17/invalid/AutoScalingMultiAZSample.yaml new file mode 100644 index 0000000..bc4ca4b --- /dev/null +++ b/cfn/F17/invalid/AutoScalingMultiAZSample.yaml @@ -0,0 +1,277 @@ +HeatTemplateFormatVersion: '2012-12-12' +Description: AWS CloudFormation Sample Template +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] +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} + WebServerGroup: + Type: AWS::AutoScaling::AutoScalingGroup + Properties: + AvailabilityZones: {'Fn::GetAZs': ''} + LaunchConfigurationName: {Ref: LaunchConfig} + MinSize: '1' + MaxSize: '3' + LoadBalancerNames: + - {Ref: ElasticLoadBalancer} + WebServerScaleUpPolicy: + Type: AWS::AutoScaling::ScalingPolicy + Properties: + AdjustmentType: ChangeInCapacity + AutoScalingGroupName: {Ref: WebServerGroup} + Cooldown: '60' + ScalingAdjustment: '1' + WebServerScaleDownPolicy: + Type: AWS::AutoScaling::ScalingPolicy + Properties: + AdjustmentType: ChangeInCapacity + AutoScalingGroupName: {Ref: WebServerGroup} + Cooldown: '60' + ScalingAdjustment: '-1' + MEMAlarmHigh: + Type: AWS::CloudWatch::Alarm + Properties: + AlarmDescription: Scale-up if MEM > 50% for 1 minute + MetricName: MemoryUtilization + Namespace: system/linux + Statistic: Average + Period: '60' + EvaluationPeriods: '1' + Threshold: '50' + AlarmActions: + - {Ref: WebServerScaleUpPolicy} + Dimensions: + - Name: AutoScalingGroupName + Value: {Ref: WebServerGroup} + ComparisonOperator: GreaterThanThreshold + MEMAlarmLow: + Type: AWS::CloudWatch::Alarm + Properties: + AlarmDescription: Scale-down if MEM < 15% for 1 minute + MetricName: MemoryUtilization + Namespace: system/linux + Statistic: Average + Period: '60' + EvaluationPeriods: '1' + Threshold: '15' + AlarmActions: + - {Ref: WebServerScaleDownPolicy} + Dimensions: + - Name: AutoScalingGroupName + Value: {Ref: WebServerGroup} + ComparisonOperator: LessThanThreshold + ElasticLoadBalancer: + Type: AWS::ElasticLoadBalancing::LoadBalancer + Properties: + AvailabilityZones: {'Fn::GetAZs': ''} + Listeners: + - {LoadBalancerPort: '80', InstancePort: '80', + Protocol: HTTP} + HealthCheck: {Target: 'HTTP:80/', HealthyThreshold: '3', + UnhealthyThreshold: '5', Interval: '30', Timeout: '5'} + LaunchConfig: + Type: AWS::AutoScaling::LaunchConfiguration + 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 + /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 + /tmp/stats-crontab.txt: + content: + Fn::Join: + - '' + - - 'MAIL="" + + ' + - ' + + ' + - '* * * * * /opt/aws/bin/cfn-push-stats --watch ' + - {Ref: MEMAlarmHigh} + - ' --mem-util + + ' + - '* * * * * /opt/aws/bin/cfn-push-stats --watch ' + - {Ref: MEMAlarmLow} + - ' --mem-util + + ' + mode: '000600' + owner: root + group: root + packages: + yum: + python-psutil: [] + 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 + + ' + - '/opt/aws/bin/cfn-init -s ' + - {Ref: 'AWS::StackName'} + - ' -r LaunchConfig ' + - ' --region ' + - {Ref: 'AWS::Region'} + - ' + + ' + - '# Setup MySQL root password and create a user + + ' + - mysqladmin -u root password ' + - {Ref: DBRootPassword} + - ''' + + ' + - mysql -u root --password=' + - {Ref: DBRootPassword} + - ''' < /tmp/setup.mysql + + ' + - 'sed -i "/Deny from All/d" /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 crontab + + ' + - 'crontab /tmp/stats-crontab.txt + + ' +Outputs: + URL: + Description: The URL of the website + Value: + Fn::Join: + - '' + - - http:// + - Fn::GetAtt: [ElasticLoadBalancer, DNSName] + - /wordpress + -- cgit v1.2.1