AWS CDK Python调用ALB metric_http_code_elb报AttributeError
问题描述
Python环境下使用AWS CDK开发,引用已有ALB资源并调用其metric_http_code_elb方法时,抛出如下属性错误:
AttributeError: '<class 'aws_cdk.Resource'>+<class 'aws_cdk.aws_elasticloadbalancingv2._IApplicationLoadBalancerProxy'>' object has no attribute 'metric_http_code_elb'.
复现代码
load_balancer = elbv2.ApplicationLoadBalancer.from_lookup( self, "ALB", load_balancer_arn="arn:aws:elasticloadbalancing:ap-south-1:345396902820:loadbalancer/app/QA-Env-Public-ALB/573f88222ed64875" ) http_5xx_metric = load_balancer.metric_http_code_elb()
根因分析
from_lookup方法返回的是IApplicationLoadBalancer接口的代理对象,不是ApplicationLoadBalancer实体类实例metric_http_code_elb这类指标便捷构造方法,仅在ALB实体类上实现,接口代理类未定义对应方法,直接调用就会触发属性不存在的报错
解决方案
放弃调用实例自带的指标方法,手动构造CloudWatch指标对象即可,效果和内置方法完全一致,参考实现:
from aws_cdk import Duration from aws_cdk import aws_cloudwatch as cw load_balancer = elbv2.ApplicationLoadBalancer.from_lookup( self, "ALB", load_balancer_arn="arn:aws:elasticloadbalancing:ap-south-1:345396902820:loadbalancer/app/QA-Env-Public-ALB/573f88222ed64875" ) http_5xx_metric = cw.Metric( namespace="AWS/ApplicationELB", metric_name="HTTPCode_ELB_5XX_Count", dimensions_map={ "LoadBalancer": load_balancer.load_balancer_full_name }, period=Duration.minutes(1), statistic="Sum" )
提示:其他ALB相关指标(包括目标组维度、监听器维度的指标)都可以通过该方式手动构造,只需要对应调整指标名、维度参数即可。
内容的提问来源于stack exchange,提问作者shikha singh
相关产品推荐
相关产品推荐

