@CDK/python Как получить доступ к ресурсам, созданным CDK

#python #aws-cdk #aws-load-balancer

Вопрос:

Я пытаюсь получить балансировщик нагрузки ARN, созданный CDK

Балансировщик нагрузки создается с помощью

         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")

Комментарии:

1. Ошибка AttributeError: 'CfnTargetGroup' object has no attribute 'listenerArn

Ответ №1:

Функции Cfn, как правило, не имеют всех тех же крючков, что и полностью реализованные конструкции cdk. Cfn (что означает CloudFormation) — это аварийные люки, которые используются для размещения в CDK вещей, которые еще не были разработаны для CDK, и в значительной степени являются прямыми толчками. Это предостережение, чтобы сказать, что вы не можете ожидать, что какая — либо конструкция, с которой вы должны использовать cfn, будет работать с любой другой конструкцией-крючков просто нет.

Во-первых, как представляется, вы используете Python, его обычно {construct}_arn, как table_arn или function_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 () — это еще одна функция аварийного люка, которую, как правило, следует использовать только тогда, когда вы действительно вникаете в суть незавершенных конструкций)

Комментарии:

1. Большое вам спасибо за помощь. это сработало, и я усвоил это на собственном горьком опыте, используя конструкцию L1 cfn , которая не так полезна для передачи вещей другим.

2. Рад, что это сработало. Старайтесь держаться подальше от конструкций L1, если сможете, у полностью реализованных есть отличные крючки, которые облегчают это. Если ответ был полезным, пожалуйста, подумайте о том, чтобы отметить его как таковой