将AWS CloudWatch Metrics Insight查询转换为CDK Metric



我正在修改https://github.com/cdk-patterns/serverless/tree/main/the-eventbridge-etl/typescript因为我想在我的CloudFormation Stack中添加一个显示Fargate vCPU使用情况的仪表板小部件。我已经能够升级该应用程序以使用CDK v2,并且已经确认了部署/功能。但是,我无法在仪表板中获得vCPU小部件来显示任何数据。

如果我在AWS CloudWatch的Source字段中手动配置小部件,则查询如下:

{
"metrics": [
[ { "expression": "SELECT COUNT(ResourceCount) FROM SCHEMA("AWS/Usage", Class,Resource,Service,Type) WHERE Service = 'Fargate' AND Resource = 'vCPU'", "label": "Query1", "id": "q1" } ],
[ "AWS/Usage", "ResourceCount", "Service", "Fargate", "Type", "Resource", { "id": "m1" } ]
],
"view": "timeSeries",
"title": "ExtractECSJob",
"region": "us-west-2",
"timezone": "Local",
"stat": "Sum",
"period": 300
}

然而,当我尝试使用CDK时,使用以下TypeScript代码:

const extractECSWidget = new GraphWidget({
title: "ExtractECSJob",
left: [
new Metric({
namespace: "AWS/Usage",
metricName: "ResourceCount",
statistic: "Sum",
period: Duration.seconds(300),
dimensionsMap: {
"Service": "Fargate",
"Type": "Resource",
"Resource": "vCPU"
}
})
]
});

这并不能转化为以上内容,并且在这个小部件中没有显示任何信息。新的来源如下:

{
"view": "timeSeries",
"title": "ExtractECSJob",
"region": "us-west-2",
"metrics": [
[ "AWS/Usage", "ResourceCount", "Resource", "vCPU", "Service", "Fargate", "Type", "Resource", { "stat": "Sum" } ]
],
"period": 300
}

如何将上述度量源定义映射到CDK源构造?

我尝试使用MathExpression,但使用了以下内容:

let metrics = new MathExpression({
expression: "SELECT COUNT('metricName') FROM SCHEMA('"AWS/Usage"', 'Class','Resource','Service','Type') WHERE Service = 'Fargate' AND Resource = 'vCPU'",
usingMetrics: {}
})
const extractECSWidget = new GraphWidget({
title: "ExtractECSJob",
left: [
metrics
]
});

我在cdk diff:期间收到警告

[Warning at /EventbridgeEtlStack/EventBridgeETLDashboard] Math expression 'SELECT COUNT(metricName) FROM SCHEMA($namespace, Class,Resource,Service,Type) WHERE Service = 'Fargate' AND Resource = 'vCPU'' references unknown identifiers: metricName, namespace, lass, esource, ervice, ype, ervice, argate, esource, vCPU. Please add them to the 'usingMetrics' map.

我应该在usingMetrics映射中放入什么?感谢您的帮助。

多亏了AWS的支持,我才得以解决这个问题。更新后的代码如下所示:

let metrics = new MathExpression({
expression: "SELECT COUNT(ResourceCount) FROM SCHEMA("AWS/Usage", Class,Resource,Service,Type) WHERE Service = 'Fargate' AND Resource = 'vCPU'",
usingMetrics: {},
label: "Query1"
})
let metric2 = new Metric({
namespace: "AWS/Usage",
metricName: "ResourceCount",
period: cdk.Duration.seconds(300),
dimensionsMap: {
"Service": "Fargate",
"Type": "Resource",
}
})
const extractECSWidget = new GraphWidget({
title: "ExtractECSJobTest",
left: [metrics, metric2],
region: "us-west-2",
statistic: "Sum",
width: 24
});
dashboardStack.addWidgets(
extractECSWidget
);

当运行cdk deploy时,我仍然会收到同样的警告(关于被引用的未知标识符(,但小部件正在按预期运行。

CDK尚未支持此功能。我已经打开了问题https://github.com/aws/aws-cdk/issues/22844我在基于查询的度量创建警报时也遇到了同样的问题。我找到了1级构造CfnAarm的解决方法也许Widget也有同样的解决方法。

最新更新