AWS cloudformation : how to properly create a redis cache cluster
I managed to do this using AWS::ElastiCache::ReplicationGroup
, the NumCacheClusters
parameter provide the possibility to have numerous servers. Beware : it seem that you have to handle the connection to master/slave yourself (but in case of a master's failure, aws should normally detect it and change the dns of a slave to permit you point do not change your configuration). here is a sample :
"hubElastiCacheReplicationGroup" : {
"Type" : "AWS::ElastiCache::ReplicationGroup",
"Properties" : {
"ReplicationGroupDescription" : "Hub WebServer redis cache cluster",
"AutomaticFailoverEnabled" : "false",
"AutoMinorVersionUpgrade" : "true",
"CacheNodeType" : "cache.t2.small",
"CacheParameterGroupName" : "default.redis3.2",
"CacheSubnetGroupName" : { "Ref": "cachesubnethubprivatecachesubnetgroup" },
"Engine" : "redis",
"EngineVersion" : "3.2.4",
"NumCacheClusters" : { "Ref" : "ElasticacheRedisNumCacheClusters" },
"PreferredMaintenanceWindow" : "sun:04:00-sun:05:00",
"SecurityGroupIds" : [ { "Fn::GetAtt": ["sgHubCacheSG", "GroupId"] } ]
}
},
Bruno
Life is full of surprises : I leaved an unsatisfying post of director in a (low) tech firm form an enthusiastic post of web engineer in a wonderful startup. Having to (re)discover the basis 10 years later, it's rafraishing how things have beautifully evolved !
Updated on June 15, 2022Comments
-
Bruno almost 2 years
I want to create an elasticache instance using redis.
I think that I should use it "cluster mode disabled" because everything will fit into one server. In order to not have a SPOF, I want to create a read replica that will be promoted by AWS in case of a failure of the master. If possible, it would be great to balance the read only operations between master and slave, but it is not mandatory.
I created a functioning master/read-replica using the aws console then used cloudformer to create the cloudformation json conf. Cloudformer has created me two unlinked
AWS::ElastiCache::CacheCluster
, but by reading the doc. I don't understand how to link them... For now I have this configuration :{ "cachehubcache001": { "Type": "AWS::ElastiCache::CacheCluster", "Properties": { "AutoMinorVersionUpgrade": "true", "AZMode": "single-az", "CacheNodeType": "cache.t2.small", "Engine": "redis", "EngineVersion": "3.2.4", "NumCacheNodes": "1", "PreferredAvailabilityZone": { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "Az1B"]}, "PreferredMaintenanceWindow": "sun:04:00-sun:05:00", "CacheSubnetGroupName": { "Ref": "cachesubnethubprivatecachesubnetgroup" }, "VpcSecurityGroupIds": [ { "Fn::GetAtt": [ "sgiHubCacheSG", "GroupId" ] } ] } }, "cachehubcache002": { "Type": "AWS::ElastiCache::CacheCluster", "Properties": { "AutoMinorVersionUpgrade": "true", "AZMode": "single-az", "CacheNodeType": "cache.t2.small", "Engine": "redis", "EngineVersion": "3.2.4", "NumCacheNodes": "1", "PreferredAvailabilityZone": { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "Az1A"]}, "PreferredMaintenanceWindow": "sun:02:00-sun:03:00", "CacheSubnetGroupName": { "Ref": "cachesubnethubprivatecachesubnetgroup" }, "VpcSecurityGroupIds": [ { "Fn::GetAtt": [ "sgiHubCacheSG", "GroupId" ] } ] } }, }
I know that it is wrong, but I can't figure out how to create a correct replica. I can't understand the AWS doc, for a start I can't figure out wich Type I should use between :
- http://docs.aws.amazon.com/fr_fr/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html
- http://docs.aws.amazon.com/fr_fr/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html
Since cloudformer created
AWS::ElastiCache::CacheCluster
I'll go with it, but I've got the feeling that it should have created only one resource, and used theNumCacheNodes
parameter in order to create two resources.redis can't use :
NumCacheNodes
-
AZMode
andPreferredAvailabilityZones
so I don't know how to make this solution multi-AZ...