Created
April 23, 2021 18:50
-
-
Save efekarakus/fe694581c88e03eedb38f17b8ddc68a7 to your computer and use it in GitHub Desktop.
Addon template to create an Elasticache cluster
This file contains 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 characters
Parameters: | |
App: | |
Type: String | |
Description: Your application's name. | |
Env: | |
Type: String | |
Description: The environment name your service, job, or workflow is being deployed to. | |
Name: | |
Type: String | |
Description: The name of the service, job, or workflow being deployed. | |
Resources: | |
# Subnet group to control where the Redis gets placed | |
RedisSubnetGroup: | |
Type: AWS::ElastiCache::SubnetGroup | |
Properties: | |
Description: Group of subnets to place Redis into | |
SubnetIds: !Split [ ',', { 'Fn::ImportValue': !Sub '${App}-${Env}-PrivateSubnets' } ] | |
# Security group to add the Redis cluster to the VPC, | |
# and to allow the Fargate containers to talk to Redis on port 6379 | |
RedisSecurityGroup: | |
Type: AWS::EC2::SecurityGroup | |
Properties: | |
GroupDescription: "Redis Security Group" | |
VpcId: { 'Fn::ImportValue': !Sub '${App}-${Env}-VpcId' } | |
# Enable ingress from other ECS services created within the environment. | |
RedisIngress: | |
Type: AWS::EC2::SecurityGroupIngress | |
Properties: | |
Description: Ingress from Fargate containers | |
GroupId: !Ref 'RedisSecurityGroup' | |
IpProtocol: tcp | |
FromPort: 6379 | |
ToPort: 6379 | |
SourceSecurityGroupId: { 'Fn::ImportValue': !Sub '${App}-${Env}-EnvironmentSecurityGroup' } | |
# The cluster itself. | |
Redis: | |
Type: AWS::ElastiCache::CacheCluster | |
Properties: | |
Engine: redis | |
CacheNodeType: cache.m4.large | |
NumCacheNodes: 1 | |
CacheSubnetGroupName: !Ref 'RedisSubnetGroup' | |
VpcSecurityGroupIds: | |
- !GetAtt 'RedisSecurityGroup.GroupId' | |
# Redis endpoint stored in SSM so that other services can retrieve the endpoint. | |
RedisEndpointAddressParam: | |
Type: AWS::SSM::Parameter | |
Properties: | |
Name: !Sub '/${App}/${Env}/${Name}/redis' # Other services can retrieve the endpoint from this path. | |
Type: String | |
Value: !GetAtt 'Redis.RedisEndpoint.Address' | |
Outputs: | |
RedisEndpoint: | |
Description: The endpoint of the redis cluster | |
Value: !GetAtt 'Redis.RedisEndpoint.Address' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment