#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, если сможете, у полностью реализованных есть отличные крючки, которые облегчают это. Если ответ был полезным, пожалуйста, подумайте о том, чтобы отметить его как таковой