如何通过AWS API获取指定区域内特定Transit Gateway的BytesOut指标?
解决方法
你的代码已经通过Dimensions中的TransitGateway维度指定了具体TGW ID来获取指标,要实现单个区域内特定Transit Gateway的BytesOut指标查询,只需做以下调整:
1. 参数化TGW ID,替换硬编码值
修改函数,新增tgwId参数来接收目标TGW的ID,替代原代码中硬编码的XXXXXXX:
async getCloudWatchMetrics({ startTime, endTime = new Date(), tgwId }: { startTime: Date; endTime?: Date; tgwId: string; }): Promise<MetricDataResults> { const params = { StartTime: startTime, EndTime: endTime, MetricDataQueries: [ { Id: "bytesout0", Label: `BytesOut-${tgwId}`, // 标签带上TGW ID,便于区分结果 MetricStat: { Metric: { Namespace: "AWS/TransitGateway", MetricName: "BytesOut", Dimensions: [ { Name: "TransitGateway", Value: tgwId, // 使用传入的目标TGW ID }, ], }, Period: 300, Stat: "Average", }, }, ], }; const res = await this.CloudWatch.getMetricData(params).promise(); return res.MetricDataResults; }
2. 确保CloudWatch客户端绑定目标区域
由于你每个区域使用独立密钥,初始化CloudWatch客户端时必须指定目标区域,这样查询的才是该区域内的TGW指标:
import { CloudWatch } from 'aws-sdk'; // 初始化对应区域的CloudWatch客户端 const cloudWatchClient = new CloudWatch({ region: '目标区域ID', // 例如 'us-west-2' credentials: { /* 该区域对应的密钥信息 */ } }); // 调用函数时传入指定TGW ID const metrics = await cloudWatchClient.getCloudWatchMetrics({ startTime: new Date(Date.now() - 3600000), // 查询过去1小时的数据 tgwId: 'tgw-12345678' // 目标Transit Gateway的ID });
3. (可选)先获取区域内所有TGW列表
如果不确定目标区域内有哪些TGW,可通过EC2 API先获取该区域的TGW清单,再筛选出目标ID:
import { EC2 } from 'aws-sdk'; const ec2Client = new EC2({ region: '目标区域ID', credentials: { /* 对应区域的密钥 */ } }); // 获取当前区域内所有Transit Gateway const tgwList = await ec2Client.describeTransitGateways().promise(); console.log('区域内的Transit Gateway清单:', tgwList.TransitGateways.map(tgw => ({ ID: tgw.TransitGatewayId, 名称: tgw.Tags?.find(tag => tag.Key === 'Name')?.Value || '无名称标签' })));
内容的提问来源于stack exchange,提问作者VusalIs
相关产品推荐
相关产品推荐

