AWS cloudformation : how to properly create a redis cache cluster

11,807

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"] } ]
      }
    },
Share:
11,807
Bruno
Author by

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, 2022

Comments

  • Bruno
    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 :

    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 the NumCacheNodes parameter in order to create two resources.

    redis can't use :

    • NumCacheNodes
    • AZMode and PreferredAvailabilityZones

    so I don't know how to make this solution multi-AZ...