--- AWSTemplateFormatVersion: 2010-09-09 # A CloudFormation template to create/configure an AWS ElastiCache Cluster based on parameters, # along with an associated security group and subnet group. # # You can specify either redis or memcached as an engine, the node (aka instance) type, and # the number of nodes. # # From the Startup Kit Templates, this template requires the name of an existing vpc.cfn.yml stack as # a parameter. # # This template is released under Apache Version 2.0, and can be forked, copied, modified, # customized, etc. to match your application/system requirements. Description: SASKV5N ElastiCache and related resources Parameters: # ElastiCache stack creation prerequisite: First create a VPC stack - see README for more info NetworkStackName: Description: Active CloudFormation stack containing VPC resources Type: String MinLength: 1 MaxLength: 255 AllowedPattern: "^[a-zA-Z][-a-zA-Z0-9]*$" ClusterName: Description: Custom name of the cluster. Auto generated if you don't supply your own. Type: String AllowedPattern: "^[a-zA-Z][-a-zA-Z0-9]*$" CacheNodeType: Description: Cache node instance class, e.g. cache.t2.micro(free tier). See https://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/CacheNodes.SelectSize.html Type: String Default: cache.t2.micro ConstraintDescription: Node instance class not supported AllowedValues: - cache.t2.micro - cache.t2.small - cache.t2.medium - cache.m4.large - cache.m4.xlarge - cache.m4.2xlarge - cache.m4.4xlarge - cache.m4.10xlarge - cache.r4.large - cache.r4.xlarge - cache.r4.2xlarge - cache.r4.4xlarge - cache.r4.8xlarge - cache.r4.16xlarge CacheEngine: Description: The underlying cache engine, either Redis or Memcached Type: String Default: redis ConstraintDescription: Node instance class not supported AllowedValues: - redis - memcached CacheNodeCount: Description: Number of nodes in the cluster. Only used with memcached engine, for redis this value will be set to 1. Type: Number MinValue: 1 MaxValue: 15 ConstraintDescription: Node count must be between 1 and 15 Default: 1 AutoMinorVersionUpgrade: Description: Whether or not minor version upgrades to the cache engine should be applied automatically during the maintenance window. Type: String Default: true AllowedValues: - true - false Conditions: IsRedis: !Equals [ !Ref CacheEngine, redis] Resources: SecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: ElastiCache Security Group VpcId: Fn::ImportValue: !Sub ${NetworkStackName}-VpcID SecurityGroupIngress: - IpProtocol: tcp FromPort: !If [ IsRedis, 6379, 11211] ToPort: !If [ IsRedis, 6379, 11211] Tags: - Key: Name Value: !Sub "${AWS::StackName}-ElastiCacheSecurityGroup" SubnetGroup: Type: AWS::ElastiCache::SubnetGroup Properties: Description: Cache Subnet Group SubnetIds: - Fn::ImportValue: !Sub ${NetworkStackName}-PrivateSubnet1ID - Fn::ImportValue: !Sub ${NetworkStackName}-PrivateSubnet2ID ElastiCacheCluster: Type: AWS::ElastiCache::CacheCluster Properties: AutoMinorVersionUpgrade: !Ref AutoMinorVersionUpgrade Engine: !Ref CacheEngine CacheNodeType: !Ref CacheNodeType ClusterName : !Ref ClusterName NumCacheNodes: !If [ IsRedis, 1, !Ref CacheNodeCount] CacheSubnetGroupName: !Ref SubnetGroup VpcSecurityGroupIds: - !GetAtt SecurityGroup.GroupId Tags: - Key: Name Value: !Ref AWS::StackName Outputs: ElastiCacheStackName: Description: ElastiCache Stack Name Value: !Ref AWS::StackName Export: Name: !Sub ${AWS::StackName}-ElastiCacheName ElastiCacheClusterArn: Description: ElastiCache Cluster Arn Value: !Sub arn:aws:elasticache:${AWS::Region}:${AWS::AccountId}:cluster/${ElastiCacheCluster} Export: Name: !Sub ${AWS::StackName}-ElastiCacheClusterArn ElastiCacheClusterId: Description: ElastiCache Cluster ID Value: !Ref ElastiCacheCluster Export: Name: !Sub ${AWS::StackName}-ElastiCacheClusterID ElastiCacheEngine: Description: ElastiCache engine Value: !Ref CacheEngine Export: Name: !Sub ${AWS::StackName}-ElastiCacheEngine ElastiCacheAddress: Description: ElastiCache endpoint address Value: !If [ IsRedis, !GetAtt ElastiCacheCluster.RedisEndpoint.Address, !GetAtt ElastiCacheCluster.ConfigurationEndpoint.Address] Export: Name: !Sub ${AWS::StackName}-ElastiCacheAddress ElastiCachePort: Description: ElastiCache port Value: !If [ IsRedis, 6379, 11211] Export: Name: !Sub ${AWS::StackName}-ElastiCachePort