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
Beispiel #2
0
 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"),
         ))
Beispiel #3
0
 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(',')))
Beispiel #4
0
        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(
Beispiel #5
0
            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)],
)
Beispiel #6
0
 def create_subnet_group(self):
     t = self.template
     t.add_resource(
         SubnetGroup(SUBNET_GROUP,
                     Description="%s subnet group." % self.name,
                     SubnetIds=Ref("Subnets")))