正如标题所说,我该怎么做?我想将我的 Cloudwatch dashobard(主要包含查询结果小部件)转换为 cdk。aws-cloudwatch 库目前只有 AlarmWidget、GraphWidget、SingleValueWidget 和 TextWidget。
如果没有直接的方法来做到这一点,是否至少有某种黑客行为?
谢谢
正如标题所说,我该怎么做?我想将我的 Cloudwatch dashobard(主要包含查询结果小部件)转换为 cdk。aws-cloudwatch 库目前只有 AlarmWidget、GraphWidget、SingleValueWidget 和 TextWidget。
如果没有直接的方法来做到这一点,是否至少有某种黑客行为?
谢谢
如果不支持该小部件类型,您可以使用CfnDashboard构造而不是仪表板。使用该构造,您可以将原始仪表板主体设置为 json。
如果您更喜欢添加小部件的更高级别的方法,您可以自己实现IWidget接口。您没有指定您使用的是哪种语言,这是 python 中的一个示例:
from aws_cdk import (
aws_cloudwatch as cw,
core
)
import jsii
import json
@jsii.implements(cw.IWidget)
class QueryResultWidget:
def __init__(self, properties, width=24, height=6):
self.widget = {
"type": "log",
"width": width,
"height": height,
"properties": properties
}
def position(self, x, y):
self.widget["x"] = x
self.widget["y"] = y
def to_json(self):
return [self.widget]
class DashboardStack(core.Stack):
def __init__(self, app: core.App, id: str, **kwargs) -> None:
super().__init__(app, id, **kwargs)
dashboard = cw.Dashboard(self, "Dashboard")
dashboard.add_widgets(QueryResultWidget({
"query": "SOURCE '/aws/lambda/some_lambda' | fields @timestamp, @message\n| sort @timestamp desc\n| limit 20",
"region": "eu-west-1",
"stacked": False,
"view": "table"
}))
app = core.App()
DashboardStack(app, "DashboardStack")
app.synth()
在 aws-cdk v1.37.0 中添加了LogQueryWidget (请参阅发行说明)。