Last active
December 28, 2015 14:39
Revisions
-
sredhar revised this gist
Nov 17, 2013 . 1 changed file with 1 addition and 44 deletions.There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -105,50 +105,7 @@ "php-pear" : [] } }, "commands" : { "00_install_memcached_client" : { "command" : "pecl install https://s3.amazonaws.com/elasticache-downloads/ClusterClient/PHP/latest-64bit" -
sredhar created this gist
Nov 17, 2013 .There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,212 @@ { "AWSTemplateFormatVersion" : "2013-11-07", "Description" : "AWS CloudFormation Template for mail. Creates a Auto Scaling group of web tier with load balancer, RDS and Elasticache cluster.", "Parameters" : { "KeyName" : { "Description" : "Name of an existing Amazon EC2 KeyPair for SSH access to the Web Server", "Type" : "String" }, "InstanceType" : { "Description" : "Atmail WebServer EC2 instance type", "Type" : "String", "Default" : "m1.small", "AllowedValues" : [ "t1.micro","m1.small","m1.medium","m1.large","m1.xlarge", "m3.xlarge", "m3.2xlarge", "m2.xlarge","m2.2xlarge","m2.4xlarge","c1.medium","c1.xlarge","cc1.4xlarge","cc2.8xlarge","cg1.4xlarge", "hi1.4xlarge", "hs1.8xlarge"], "ConstraintDescription" : "must be a valid EC2 instance type." }, "CacheNodeType" : { "Default" : "cache.m1.small", "Description" : "The compute and memory capacity of the nodes in the Cache Cluster", "Type" : "String", "AllowedValues" : [ "cache.m1.small", "cache.m1.large", "cache.m1.xlarge", "cache.m2.xlarge", "cache.m2.2xlarge", "cache.m2.4xlarge", "cache.c1.xlarge" ], "ConstraintDescription" : "must select a valid Cache Node type." }, "NumberOfCacheNodes" : { "Default": "1", "Description" : "The number of Cache Nodes the Cache Cluster should have", "Type": "Number", "MinValue": "1", "MaxValue": "10", "ConstraintDescription" : "must be between 5 and 10." } }, "Mappings" : { "AWSInstanceType2Arch" : { "t1.micro" : { "Arch" : "PV64" }, "m1.small" : { "Arch" : "PV64" }, "m1.medium" : { "Arch" : "PV64" }, "m1.large" : { "Arch" : "PV64" }, "m1.xlarge" : { "Arch" : "PV64" }, "m3.xlarge" : { "Arch" : "PV64" }, "m3.2xlarge" : { "Arch" : "PV64" } }, "AWSRegionArch2AMI" : { "us-east-1" : { "PV64" : "ami-1624987f", "CLU64" : "ami-08249861", "GPU64" : "ami-02f54a6b" }, "us-west-2" : { "PV64" : "ami-2a31bf1a", "CLU64" : "ami-2431bf14", "GPU64" : "NOT_YET_SUPPORTED" } } }, "Resources" : { "CacheCluster" : { "Type": "AWS::ElastiCache::CacheCluster", "Properties": { "CacheNodeType" : { "Ref" : "CacheNodeType" }, "CacheSecurityGroupNames" : [ { "Ref" : "CacheSecurityGroup" } ], "Engine" : "memcached", "NumCacheNodes" : { "Ref" : "NumberOfCacheNodes" } } }, "CacheSecurityGroup": { "Type": "AWS::ElastiCache::SecurityGroup", "Properties": { "Description" : "Lock cache down to Web Server access only" } }, "CacheSecurityGroupIngress": { "Type": "AWS::ElastiCache::SecurityGroupIngress", "Properties": { "CacheSecurityGroupName" : { "Ref" : "CacheSecurityGroup" }, "EC2SecurityGroupName" : { "Ref" : "WebServerSecurityGroup" } } }, "WebServerSecurityGroup" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : "Enable HTTP and SSH access", "SecurityGroupIngress" : [ {"IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : { "Ref" : "SSHLocation"} }, {"IpProtocol" : "tcp", "FromPort" : "80", "ToPort" : "80", "CidrIp" : "0.0.0.0/0"} ] } }, "WebServerHost": { "Type" : "AWS::EC2::Instance", "Metadata" : { "AWS::CloudFormation::Init" : { "config" : { "packages" : { "yum" : { "httpd" : [], "gcc-c++" : [], "php" : [], "php-pear" : [] } }, "files" : { "/var/www/html/index.php" : { "content" : { "Fn::Join" : ["", [ "<?php\n", "echo '<h1>AWS CloudFormation sample application for Amazon ElastiCache</h1>';\n", "\n", "$server_endpoint = '", { "Fn::GetAtt" : [ "CacheCluster", "ConfigurationEndpoint.Address" ]}, "';\n", "$server_port = ", { "Fn::GetAtt" : [ "CacheCluster", "ConfigurationEndpoint.Port" ]}, ";\n", "\n", "/**\n", " * The following will initialize a Memcached client to utilize the Auto Discovery feature.\n", " * \n", " * By configuring the client with the Dynamic client mode with single endpoint, the\n", " * client will periodically use the configuration endpoint to retrieve the current cache\n", " * cluster configuration. This allows scaling the cache cluster up or down in number of nodes\n", " * without requiring any changes to the PHP application. \n", " */\n", "\n", "$dynamic_client = new Memcached();\n", "$dynamic_client->setOption(Memcached::OPT_CLIENT_MODE, Memcached::DYNAMIC_CLIENT_MODE);\n", "$dynamic_client->addServer($server_endpoint, $server_port);\n", "\n", "$tmp_object = new stdClass;\n", "$tmp_object->str_attr = 'test';\n", "$tmp_object->int_attr = 123;\n", "\n", "$dynamic_client->set('key', $tmp_object, 10) or die ('Failed to save data to the cache');\n", "echo '<p>Store data in the cache (data will expire in 10 seconds)</p>';\n", "\n", "$get_result = $dynamic_client->get('key');\n", "echo '<p>Data from the cache:<br/>';\n", "\n", "var_dump($get_result);\n", "\n", "echo '</p>';\n", "?>\n" ]]}, "mode" : "000644", "owner" : "apache", "group" : "apache" } }, "commands" : { "00_install_memcached_client" : { "command" : "pecl install https://s3.amazonaws.com/elasticache-downloads/ClusterClient/PHP/latest-64bit" }, "01_enable_auto_discovery" : { "command" : "echo 'extension=amazon-elasticache-cluster-client.so' > /etc/php.d/memcached.ini" } }, "services" : { "sysvinit" : { "httpd" : { "enabled" : "true", "ensureRunning" : "true" }, "sendmail" : { "enabled" : "false", "ensureRunning" : "false" } } } } } }, "Properties": { "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" }, { "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ]}]}, "InstanceType" : { "Ref" : "InstanceType" }, "SecurityGroups" : [ {"Ref" : "WebServerSecurityGroup"} ], "KeyName" : { "Ref" : "KeyName" }, "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bash -v\n", "yum update -y aws-cfn-bootstrap\n", "# Setup the PHP sample application\n", "/opt/aws/bin/cfn-init ", " --stack ", { "Ref" : "AWS::StackName" }, " --resource WebServerHost ", " --region ", { "Ref" : "AWS::Region" }, "\n", "# Signal the status of cfn-init\n", "/opt/aws/bin/cfn-signal -e $? '", { "Ref" : "WebServerWaitHandle" }, "'\n" ]]}} } }, "WebServerWaitHandle" : { "Type" : "AWS::CloudFormation::WaitConditionHandle" }, "WebServerWaitCondition" : { "Type" : "AWS::CloudFormation::WaitCondition", "DependsOn" : "WebServerHost", "Properties" : { "Handle" : {"Ref" : "WebServerWaitHandle"}, "Timeout" : "300" } } }, "Outputs" : { "WebsiteURL" : { "Value" : { "Fn::Join" : ["", ["http://", { "Fn::GetAtt" : [ "WebServerHost", "PublicDnsName" ]} ]] }, "Description" : "Application URL" } } }