@CDK/python 如何获取 CDK 创建的资源的 ARN

@CDK/python How to get ARN of a resources created by CDK

我正在尝试获取由 CDK 创建的负载均衡器 ARN

负载平衡器是使用

创建的
        lb = lbv2.CfnLoadBalancer(self, "LB",
                                    name = config.loadbalancer.name,
                                    scheme= "internet-facing",
                                    security_groups=[core.Fn.ref(config.loadbalancer.sgname)],
                                    subnets = [public_subnets[0],public_subnets[1]],
                                    type = config.loadbalancer.type
                                    )

正在尝试检索负载均衡器和侦听器组的 ARN

        lb_listeners= lbv2.CfnListener(self, "LBlisteners",
                                       default_actions = [{"Type":"forward","TargetGroupArn":target_groups.listenerArn, "Order" : 1}],
                                       load_balancer_arn = core.Fn.ref("Lb"))

两种方法都失败了 target_groups.listenerArn 并使用 core.Fn.ref("Lb")

重新引用它

Cfn 函数通常不具有与完全充实的 cdk 构造相同的挂钩。 Cfn(意思是 CloudFormation)是用于将尚未为 CDK 开发的东西放入 CDK 的逃生舱口,并且几乎只是直接推动。需要注意的是,您不能指望必须使用 cfn 的任何构造才能与所有其他构造一起工作 - 根本不存在挂钩。

首先,您似乎在使用 Python,它通常{construct}_arn 类似于 table_arn 或 function_arn。 (蛇案)

其次,如果你有一个不错的 linter 和智能感知,当你放下点时它应该弹出一个潜在属性列表。您应该能够进行部分匹配,并且 arn 将是一个。

最后,cdk 文档说的很清楚:https://docs.aws.amazon.com/cdk/api/latest/python/aws_cdk.aws_elasticloadbalancingv2/CfnListener.html#aws_cdk.aws_elasticloadbalancingv2.CfnListener.attr_listener_arn

所以实际上,您可能需要使用:

lb_listeners= lbv2.CfnListener(self, "LBlisteners",
                                   default_actions = [{"Type":"forward","TargetGroupArn":target_groups.listenerArn, "Order" : 1}],
                                   load_balancer_arn = lb.attr_listener_arn)

(core.Fn.ref() 是另一个逃生舱口函数,通常只应在真正了解未完成构造的细节时使用)