Beispiel #1
0
    def add_subnet(self,
                   name,
                   cidr_block,
                   is_public=False,
                   use_nat=False,
                   nat_to=None):
        """Add a subnet.

        :param name: subnet logical name in the stack
        :type name: str
        :param cidr_block: address range of the subnet. Should be a subnet
            of the vpc address range (no check done).
        :type cidr_block: str
        :param is_public: if True create a public subnet. This means that
            a route is created automatically to the vpc internet gateway.
            (default: False)
        :type is_public: bool
        :param use_nat: if True and is_public is True, then add a NAT
            gateway that can be reused by private subnets.
            (default: False)
        :type use_nat: bool
        :param nat_to: if is_public is False and nat_to is a string,
            then create a route to the NAT gateway of the designed
            public subnet.
        :type nat_to: None | str
        """
        # Create the subnet
        self.add(SubnetStack(name, self.vpc, cidr_block))

        if is_public:
            # Public subnet
            # Connect to the internet
            self[name].add(Route(name + 'InternetRoute',
                                 self[name].route_table,
                                 "0.0.0.0/0",
                                 self.gateway,
                                 self.gate_attach))
            if use_nat:
                # Add if needed a NAT gateway
                self[name].add(EIP(name + 'NatEIP', self.gate_attach))
                self[name].add(NatGateway(name + 'NatGateway',
                                          self[name][name + 'NatEIP'],
                                          self[name].subnet))
        elif nat_to:
            assert nat_to in self, 'invalid subnet name: %s' % nat_to
            assert nat_to + 'NatGateway' in self[nat_to], \
                'subnet %s has no NAT gateway' % nat_to
            self[name].add(Route(name + 'NatRoute',
                                 self[name].route_table,
                                 "0.0.0.0/0",
                                 self[nat_to][nat_to + 'NatGateway'],
                                 self.gate_attach))
Beispiel #2
0
def test_nat_gateway():
    """Create a NATGateway."""
    s = Stack(name="MyStack")
    s += VPC("BuildVPC", "10.10.0.0/16")
    s += Subnet("BuildPublicSubnet", s["BuildVPC"], "10.10.10.0/24")
    s += Subnet("BuildPrivateSubnet", s["BuildVPC"], "10.10.20.0/24")
    s += InternetGateway("Gate")
    s += VPCGatewayAttachment("GateAttach", s["BuildVPC"], s["Gate"])
    s += RouteTable("RT", s["BuildVPC"])
    s += Route("PRoute", s["RT"], "0.0.0.0/0", s["Gate"], s["GateAttach"])
    s += SubnetRouteTableAssociation("RTSAssoc", s["BuildPublicSubnet"], s["RT"])
    s += EIP("NatEip", s["GateAttach"])
    s += NatGateway("NatGate", s["NatEip"], s["BuildPublicSubnet"])

    s += RouteTable("NATRT", s["BuildVPC"])
    s += Route("NATRoute", s["NATRT"], "0.0.0.0/0", s["NatGate"], s["GateAttach"])
    s += SubnetRouteTableAssociation("NatRTSAssoc", s["BuildPrivateSubnet"], s["NATRT"])
    assert s.body
Beispiel #3
0
def test_nat_gateway():
    """Create a NATGateway."""
    s = Stack(name='MyStack')
    s += VPC('BuildVPC', '10.10.0.0/16')
    s += Subnet('BuildPublicSubnet', s['BuildVPC'], '10.10.10.0/24')
    s += Subnet('BuildPrivateSubnet', s['BuildVPC'], '10.10.20.0/24')
    s += InternetGateway('Gate')
    s += VPCGatewayAttachment('GateAttach', s['BuildVPC'], s['Gate'])
    s += RouteTable('RT', s['BuildVPC'])
    s += Route('PRoute', s['RT'], '0.0.0.0/0', s['Gate'], s['GateAttach'])
    s += SubnetRouteTableAssociation('RTSAssoc', s['BuildPublicSubnet'],
                                     s['RT'])
    s += EIP('NatEip', s['GateAttach'])
    s += NatGateway('NatGate', s['NatEip'], s['BuildPublicSubnet'])

    s += RouteTable('NATRT', s['BuildVPC'])
    s += Route('NATRoute', s['NATRT'], '0.0.0.0/0', s['NatGate'],
               s['GateAttach'])
    s += SubnetRouteTableAssociation('NatRTSAssoc', s['BuildPrivateSubnet'],
                                     s['NATRT'])
    assert s.body
Beispiel #4
0
def test_create_network():
    s = Stack(name='teststack')

    s = Stack(name='MyStack')
    s += VPC('BuildVPC', '10.10.0.0/16')
    s += InternetGateway('Gate')
    s += Subnet('BuildPublicSubnet', s['BuildVPC'], '10.10.10.0/24')
    s += Subnet('BuildPrivateSubnet', s['BuildVPC'], '10.10.20.0/24')
    s += VPCGatewayAttachment('GateAttach',
                              s['BuildVPC'],
                              s['Gate'])
    s += RouteTable('RT', s['BuildVPC'])
    s += Route('PRoute', s['RT'],
               '0.0.0.0/0',
               s['Gate'],
               s['GateAttach'])
    s += SubnetRouteTableAssociation('RTSAssoc',
                                     s['BuildPublicSubnet'],
                                     s['RT'])
    assert s.body
Beispiel #5
0
def test_create_network():
    s = Stack(name="teststack")

    s = Stack(name="MyStack")
    s += VPC("BuildVPC", "10.10.0.0/16")
    s += InternetGateway("Gate")
    s += Subnet("BuildPublicSubnet", s["BuildVPC"], "10.10.10.0/24")
    s += Subnet("BuildPrivateSubnet", s["BuildVPC"], "10.10.20.0/24")
    s += VPCGatewayAttachment("GateAttach", s["BuildVPC"], s["Gate"])
    s += RouteTable("RT", s["BuildVPC"])
    s += Route("PRoute", s["RT"], "0.0.0.0/0", s["Gate"], s["GateAttach"])
    s += SubnetRouteTableAssociation("RTSAssoc", s["BuildPublicSubnet"], s["RT"])
    p = PolicyDocument().append(
        Allow(
            to="GetObject",
            on="arn:aws:s3:::abucket/*",
            apply_to=Principal(PrincipalKind.SERVICE, "ec2.amazonaws.com"),
        )
    )

    s += VPCEndpoint("S3EndPoint", "s3", s["BuildVPC"], [s["RT"]], policy_document=p)
    assert s.body
Beispiel #6
0
def test_create_network():
    s = Stack(name='teststack')

    s = Stack(name='MyStack')
    s += VPC('BuildVPC', '10.10.0.0/16')
    s += InternetGateway('Gate')
    s += Subnet('BuildPublicSubnet', s['BuildVPC'], '10.10.10.0/24')
    s += Subnet('BuildPrivateSubnet', s['BuildVPC'], '10.10.20.0/24')
    s += VPCGatewayAttachment('GateAttach', s['BuildVPC'], s['Gate'])
    s += RouteTable('RT', s['BuildVPC'])
    s += Route('PRoute', s['RT'], '0.0.0.0/0', s['Gate'], s['GateAttach'])
    s += SubnetRouteTableAssociation('RTSAssoc', s['BuildPublicSubnet'],
                                     s['RT'])
    p = PolicyDocument().append(
        Allow(to='GetObject',
              on='arn:aws:s3:::abucket/*',
              apply_to=Principal(PrincipalKind.SERVICE, 'ec2.amazonaws.com')))

    s += VPCEndpoint('S3EndPoint',
                     's3',
                     s['BuildVPC'], [s['RT']],
                     policy_document=p)
    assert s.body