如何在AWS CDK中获取已导入ALB的LoadBalancerName属性
解决方案
根本不需要手动解析ARN,也不用纠结IApplicationLoadBalancer接口没暴露loadBalancerName属性的问题,CDK已经内置了更稳妥的实现方式:
优先使用ALB内置的指标构造方法
ALB构造类自带所有官方CloudWatch指标的生成方法,框架会自动填充正确的维度值,完全不需要手动获取ALB名称拼维度:
const existingLb = albv2.ApplicationLoadBalancer.fromLookup(this, `alb`, { loadBalancerArn: "arn:aws:elasticloadbalancing:REGION:ACC_ID:loadbalancer/app/THE_NAME_OF_THE_ALB/blablabla", }); // 直接生成5XX目标响应码指标,自动匹配正确维度 const alb5xxMetric = existingLb.metricHttpCodeTargetTarget5xxCount({ period: Duration.minutes(1), statistic: "Sum", // 其余指标参数按需配置即可 });
所有常用的ALB指标(请求数、延迟、活跃连接数等)都有对应的内置方法,比手动构造Metric对象容错率高很多,不会出现维度名、维度值写错导致指标查不到数据的问题。
确实需要获取ALB名称的场景
如果是指标配置以外的场景必须拿到ALB名称,用CDK官方提供的ARN解析工具即可,不要自己手写字符串拆分逻辑:
import { Arn, ArnFormat } from "aws-cdk-lib"; const arnParts = Arn.split(existingLb.loadBalancerArn, ArnFormat.SLASH_RESOURCE_NAME); // ALB ARN的资源部分格式为 app/<ALB名称>/<随机后缀>,取第二段即可 const loadBalancerName = arnParts.resourceName?.split("/")[1];
官方解析工具会自动处理ARN的格式校验,兼容性远高于自定义的split逻辑,不会因为ARN格式调整出现解析失败的问题。
内容的提问来源于stack exchange,提问作者Nicollas Braga
相关产品推荐
相关产品推荐

