【问题标题】:Issue with Subnet Selections子网选择问题
【发布时间】:2020-08-01 18:08:15
【问题描述】:

我正在尝试创建应用程序负载均衡器,但无法选择特定子网。选择特定子网是一项要求,因为每种类型都有多个。

    # dmz_subnet_1 = ec2.Subnet.from_subnet_attributes(self,'DMZSubnetSelect1',availability_zone=region + 'a',route_table_id=vpc.pub_rt.ref,subnet_id=vpc.epic_dmz_1.ref)
    # dmz_subnet_2 = ec2.Subnet.from_subnet_attributes(self,'DMZSubnetSelect2',availability_zone=region + 'b',route_table_id=vpc.pub_rt.ref,subnet_id=vpc.epic_dmz_2.ref)

    # dmz_subnet_1 = ec2.Subnet.from_subnet_id(self,'DMZSubnetSelect1',subnet_id=vpc.epic_dmz_1.ref)
    # dmz_subnet_2 = ec2.Subnet.from_subnet_id(self,'DMZSubnetSelect2',subnet_id=vpc.epic_dmz_2.ref)

    # dmz_subnet_1 = ec2.Subnet.from_subnet_id(self,'DMZSubnetSelect1',subnet_id=vpc.epic_dmz_1.logical_id)
    # dmz_subnet_2 = ec2.Subnet.from_subnet_id(self,'DMZSubnetSelect2',subnet_id=vpc.epic_dmz_2.logical_id)        

    subnet_select = ec2.SubnetSelection(subnets=[dmz_subnet_1, dmz_subnet_2])

    test_ext_elb = elb.ApplicationLoadBalancer(self,
        id='Test External ELB',
        http2_enabled=True,
        ip_address_type=elb.IpAddressType.IPV4,
        security_group=vpc.epic_prd_dmz_sg,
        vpc=vpc.vpc,
        internet_facing=True,
        load_balancer_name='testingexternalelb',
        vpc_subnets=subnet_select
    )

顶部的 6 行注释是我尝试过的不同变体。在 elb.ApplicationLoadBalancer 函数中调用都会导致这个错误:

Traceback (most recent call last):
  File "app.py", line 45, in <module>
    elb_stack = EpicElbStack(app, "epic-elb", env=cdk_env, vpc=vpc_stack, cache=cache_stack, core=core_stack, region=region)
  File "C:\repos\aws\epic-cdk\epiccdk\lib\site-packages\jsii\_runtime.py", line 66, in __call__
    inst = super().__call__(*args, **kwargs)
  File "C:\repos\aws\epic-cdk\epic_cdk\epic_elb_stack.py", line 196, in __init__
    test_ext_elb = elb.ApplicationLoadBalancer(self,
  File "C:\repos\aws\epic-cdk\epiccdk\lib\site-packages\jsii\_runtime.py", line 66, in __call__
    inst = super().__call__(*args, **kwargs)
  File "C:\repos\aws\epic-cdk\epiccdk\lib\site-packages\aws_cdk\aws_elasticloadbalancingv2\__init__.py", line 13673, in __init__
    jsii.create(ApplicationLoadBalancer, self, [scope, id, props])
  File "C:\repos\aws\epic-cdk\epiccdk\lib\site-packages\jsii\_kernel\__init__.py", line 224, in create
    response = self.provider.create(
  File "C:\repos\aws\epic-cdk\epiccdk\lib\site-packages\jsii\_kernel\providers\process.py", line 333, in create
    return self._process.send(request, CreateResponse)
  File "C:\repos\aws\epic-cdk\epiccdk\lib\site-packages\jsii\_kernel\providers\process.py", line 318, in send
    raise JSIIError(resp.error) from JavaScriptError(resp.stack)
jsii.errors.JSIIError: baseProps.vpc.selectSubnets is not a function

我从这个答案中找到了示例代码:AWS CDK subnet selections

但由于某种原因,它对我不起作用。也许对 CDK 的更新改变了一些东西?

【问题讨论】:

    标签: python amazon-web-services amazon-vpc aws-cdk


    【解决方案1】:

    回答这个问题,这样它就不会悬而未决,我相信 OP 现在已经继续前进了。

    我假设您创建的 VPC 无法调用函数 selectSubnets。

    例如,如果您使用构造创建 VPC:

    vpc = aws_ec2.cfnVPC(...) 
    

    该构造将没有所需的 selectSubnets 函数。但是,如果您使用:

    vpc = aws_ec2.Vpc(...)
    

    会的。

    这会带来其他问题,因为 aws_ec2.Vpc(...) 构造会创建其他资源,例如默认情况下的公共子网和私有子网,因此可能需要使用更多合适的函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 2016-09-26
      • 2011-06-08
      • 2010-09-25
      • 1970-01-01
      相关资源
      最近更新 更多