Выбор подсети AWS CDK

Привет, я работаю над AWS CDK, чтобы создать балансировщик нагрузки. Я знаком с образованием облаков. Во время создания Load Balancer я хочу предоставить подсети, как показано ниже.

LB:
    Type: AWS::ElasticLoadBalancingV2::LoadBalancer
    Properties:
      Tags:
        -
          Key: "Name"
          Value: !Ref "AWS::StackName"
      Subnets:
        -
          Fn::ImportValue: "infra-vpc-base::SubnetIdPrivateAz1"
        -
          Fn::ImportValue: "infra-vpc-base::SubnetIdPrivateAz2"

Я попытался создать LB в cdk, как показано ниже.

lb = elbv2.ApplicationLoadBalancer(
        self, "LB",
        load_balancer_name="Load Balancer CDK",
        vpc = vpc,
        internet_facing= False,
        security_group= mws_vpc_sg_alb,
        vpc_subnets= ???
    )

В приведенном выше коде vpc_subnets я хочу указать две подсети. В приведенном выше коде vpc_subnets имеет тип typing.optional [aws_cdk.aws_ec2.SubnetSelection] = none.

Может ли кто-нибудь помочь мне выбрать подсеть в AWS CDK?


person Niranjan    schedule 09.01.2020    source источник


Ответы (4)


это из группы автоматического масштабирования, но должно быть таким же:

vpc_subnets=ec2.SubnetSelection(subnet_type=ec2.SubnetType('PUBLIC'))
person justaguy    schedule 09.01.2020
comment
Это работает, спасибо, но если я хочу передать подсети вместо типа подсети, как я могу пройти? - person Niranjan; 09.01.2020
comment
Например, если я хочу выбрать отдельные подсети - person Niranjan; 09.01.2020
comment
попробуйте это: vpc.select_subnets (subnet_type = ec2.SubnetType.PUBLIC) .subnets [0] - person justaguy; 09.01.2020

Код ниже исправил мою проблему.

    subnetid1 = ec2.Subnet.from_subnet_attributes(self,'subnetid1', availability_zone = 'apse2-az1', subnet_id = 'subnet-9bb42fed')
    subnetid2 = ec2.Subnet.from_subnet_attributes(self,'subnetid2', availability_zone = 'apse2-az1', subnet_id = 'subnet-cfbfceab')
    vpc_subnets_selection = ec2.SubnetSelection(subnets = [subnetid1, subnetid2])


    #create application load balancer
    lb = elbv2.ApplicationLoadBalancer(
        self, "MWSLoadBalancer",
        load_balancer_name="MerchWebServices Load Balancer CDK",
        vpc = vpc,
        internet_facing= False,
        security_group= mws_vpc_sg_alb,
        vpc_subnets= vpc_subnets_selection
    )
person Niranjan    schedule 09.01.2020
comment
как вам удалось использовать интерфейс SubnetSelection ?? Когда я пытаюсь использовать интерфейс SubnetSelection, он не отображается. Я получаю сообщение об ошибке компиляции - свойство SubnetSelection не существует для типа typeof import (/ Users / sunnyarya / workspaces / aws-resource-provisioner / node_modules / @ aws-cdk / aws-ec2 / lib / index) ' - person sunny arya; 03.11.2020
comment
Я столкнулся с той же проблемой на TypeScript, я просто создал экземпляр SubnetSelection, как это {..., taskSubnets / vpcSubnets: {subnets: [yoursubnets]}} - person Junhao; 29.04.2021

Другой способ найти подсети в VPC - не нужно жестко кодировать идентификаторы:

vpc_subnets=ec2.SubnetSelection(
            subnets=vpc.select_subnets(subnet_name='Private').subnets
        )
person Janusz    schedule 11.03.2021

Сейчас from_subnet_id():

from aws_cdk import aws_ec2 as cdk_ec2


subnet_ids = ["subnet-firstsubnet", "subnet-secndsubnet"]
subnets = []
for idx, subnet_id in enumerate(subnet_ids):
    subnets.append(
        cdk_ec2.Subnet.from_subnet_id(
            scope=self,
            id=f"subnet{idx}",
            subnet_id=subnet_id
        )
    )

Будет создан список ISubnet, которые затем можно использовать с другими методами, такими как SubnetSelection, который, в свою очередь, может быть передан некоторым конструкциям. Например, FargateService принимает аргумент vpc_subnets, который может использовать приведенный выше список следующим образом (игнорируя другие аргументы):

FargateService(
    (...)
    vpc_subnets=cdk_ec2.SubnetSelection(subnets=subnets)
)

В чем разница с ответом Ниранджана? Я не знаю, поскольку AZ и RouteID являются необязательными для from_subnet_attributes(). Я просто оставлю этот ответ здесь, потому что в нем есть дополнительные ссылки.

person bgdnlp    schedule 27.08.2020
comment
как вам удалось использовать интерфейс SubnetSelection ?? Когда я пытаюсь использовать интерфейс SubnetSelection, он не отображается. Я получаю сообщение об ошибке компиляции - свойство SubnetSelection не существует для типа typeof import (/ Users / sunnyarya / workspaces / aws-resource-provisioner / node_modules / @ aws-cdk / aws-ec2 / lib / index) ' - person sunny arya; 03.11.2020
comment
@sunnyarya в реализации Python CDK, SubnetSelection - это класс, который может быть создан - person lionbigcat; 02.03.2021
comment
В Typescript создайте объект SubnetSelection, создав экземпляр обычного объекта с полем подсети в нем. Например. {подсети: [your_subnets]} - person Junhao; 29.04.2021