def create_root_template(new_resources): """ Function to create the root template and add the new resources to it. :param list<ecs_composex.elasticache.elasticache_stack.CacheCluster> new_resources: :return: the root template for ElasticCache :rtype: troposphere.Template """ root_template = init_root_template() for resource in new_resources: resource.db_subnet_group = SubnetGroup( f"{resource.logical_name}SubnetGroup", Description="ElasticCacheSubnetGroup", SubnetIds=Ref(STORAGE_SUBNETS) if not resource.subnets_override else Ref(resource.subnets_override), ) resource.db_sg = SecurityGroup( f"{resource.logical_name}Sg", GroupDescription=Sub(f"SG for docdb-{resource.logical_name}"), GroupName=Sub(f"${{{AWS_STACK_NAME}}}.elasticache.{resource.logical_name}"), VpcId=Ref(VPC_ID), ) root_template.add_resource(resource.db_sg) root_template.add_resource(resource.db_subnet_group) if resource.properties: create_cluster_from_properties(resource, root_template) elif resource.parameters and not resource.properties: create_cluster_from_parameters(resource, root_template) if isinstance(resource.cfn_resource, CacheCluster): if resource.cfn_resource.Engine == "memcached": resource.init_memcached_outputs() resource.add_memcahed_config(root_template) elif resource.cfn_resource.Engine == "redis": resource.init_redis_outputs() resource.add_redis_config(root_template) elif isinstance(resource.cfn_resource, ReplicationGroup): resource.init_redis_replica_outputs() resource.add_redis_replica_config(root_template) resource.generate_outputs() root_template.add_output(resource.outputs) return root_template
def _add_processor_databases(self): # Add the security group for Redis access self.LambdaProcessorSG = self.add_resource( SecurityGroup( "LambdaProcessorSG", GroupDescription="Lambda Message Processor", VpcId=Ref(self.ProcessorVPCId), )) self.RedisClusterSG = self.add_resource( SecurityGroup( "RedisClusterSG", SecurityGroupIngress=[ SecurityGroupRule(IpProtocol="tcp", FromPort=6379, ToPort=6379, SourceSecurityGroupId=GetAtt( self.LambdaProcessorSG, "GroupId")) ], GroupDescription="Allow HTTP traffic to redis", VpcId=Ref(self.ProcessorVPCId), )) self.RedisClusterSubnetGroup = self.add_resource( SubnetGroup( "RedisClusterSubnetGroup", Description="Subnet group for Redis Cluster", SubnetIds=[Ref(self.MessageAPISubnetId)], )) self.RedisCluster = self.add_resource( CacheCluster( "RedisPushMessages", Engine="redis", CacheNodeType="cache.m3.medium", NumCacheNodes=1, CacheSubnetGroupName=Ref(self.RedisClusterSubnetGroup), VpcSecurityGroupIds=[ GetAtt(self.RedisClusterSG, "GroupId"), ], Tags=self._instance_tags("push-messages", "push-messages"), ))
def create_subnet_group(self): t = self.template t.add_resource( SubnetGroup(SUBNET_GROUP, Description="%s subnet group." % self.name, SubnetIds=self.get_variables()["Subnets"].split(',')))
SubnetId=Ref("DBSubnet2"), RouteTableId=Ref("DBRouteTable2"), )) DBRouteTableAssociation3 = t.add_resource( SubnetRouteTableAssociation( "DBRouteTableAssociation3", SubnetId=Ref("DBSubnet3"), RouteTableId=Ref("DBRouteTable3"), )) ElastiCacheSubnetGroup = t.add_resource( SubnetGroup( "ElastiCacheSubnetGroup", SubnetIds=[Ref("DBSubnet1"), Ref("DBSubnet2"), Ref("DBSubnet3")], Description=Ref("AWS::StackName"), )) RDSSubnetGroup = t.add_resource( DBSubnetGroup( "RDSSubnetGroup", SubnetIds=[Ref("DBSubnet1"), Ref("DBSubnet2"), Ref("DBSubnet3")], DBSubnetGroupDescription=Ref("AWS::StackName"), )) VPC = t.add_resource( VPC(
ToPort="6379", CidrIp=container_a_subnet_cidr, ), SecurityGroupRule( IpProtocol="tcp", FromPort="6379", ToPort="6379", CidrIp=container_b_subnet_cidr, ), ], ) cache_subnet_group = SubnetGroup( "CacheSubnetGroup", template=template, Description="Subnets available for the Cache Cluster", SubnetIds=[Ref(container_a_subnet), Ref(container_b_subnet)], ) cache_cluster = CacheCluster( "RedisCacheCluster", template=template, CacheNodeType='cache.t2.micro', CacheSubnetGroupName=Ref(cache_subnet_group), Engine='redis', NumCacheNodes=1, Port="6379", PreferredAvailabilityZone="eu-west-1a", VpcSecurityGroupIds=[Ref(db_security_group)], )
def create_subnet_group(self): t = self.template t.add_resource( SubnetGroup(SUBNET_GROUP, Description="%s subnet group." % self.name, SubnetIds=Ref("Subnets")))