Open kirin-ri opened 2 weeks ago
import json
def lambda_handler(event, context):
# 受け取ったパラメータを処理
params = event.get("params", {})
filter = params.get("filter", "default")
limit = params.get("limit", 5)
# ダミーデータを返却
return {
"statusCode": 200,
"headers": {
"Content-Type": "application/json"
},
"body": json.dumps({
"filter": filter,
"limit": limit,
"data": [{"value": i} for i in range(limit)]
})
}
import * as cdk from "aws-cdk-lib";
import { Construct } from "constructs";
import * as cloudwatch from "aws-cdk-lib/aws-cloudwatch";
export class CustomWidgetStack extends cdk.Stack {
constructor(scope: Construct, id: string) {
super(scope, id);
// Custom Widget の作成
const customWidget = new cloudwatch.CustomWidget({
title: "Custom Lambda Widget",
functionArn: "arn:aws:lambda:us-west-2:123456789012:function:MyCustomWidgetFunction", // Lambda 関数の ARN
params: {
filter: "errors",
limit: 10,
}, // Lambda 関数に渡すパラメータ
height: 6, // ウィジェットの高さ
width: 12, // ウィジェットの幅
updateOnRefresh: true, // リフレッシュ時に更新
updateOnResize: false, // リサイズ時に更新しない
updateOnTimeRangeChange: true, // 時間範囲変更時に更新
});
// ダッシュボードの作成とカスタムウィジェットの追加
const dashboard = new cloudwatch.Dashboard(this, "MyCustomDashboard", {
dashboardName: "CustomDashboard",
widgets: [[customWidget]], // カスタムウィジェットを追加
});
}
}
import json
def lambda_handler(event, context):
try:
# パラメータの取得
params = event.get("params", {})
filter_value = params.get("filter", "default")
limit = params.get("limit", 5)
# ダミーデータの生成
data = [{"value": i} for i in range(limit)]
# 正しいレスポンス形式で返す
return {
"statusCode": 200,
"headers": {
"Content-Type": "application/json"
},
"body": json.dumps({
"filter": filter_value,
"limit": limit,
"data": data
})
}
except Exception as e:
# エラーハンドリング
return {
"statusCode": 500,
"headers": {
"Content-Type": "application/json"
},
"body": json.dumps({"error": str(e)})
}
import * as cloudwatch from "aws-cdk-lib/aws-cloudwatch";
import * as cdk from "aws-cdk-lib";
const app = new cdk.App();
const stack = new cdk.Stack(app, "MyStack");
// サンプルウィジェット
const sampleTextWidget = new cloudwatch.TextWidget({
markdown: "### Sample Widget",
width: 12
});
// ColumnWidget の使用例
const columnWidget = new cloudwatch.ColumnWidget({
width: 24, // カラム全体の幅
widgets: [
sampleTextWidget, // テキストウィジェット
new cloudwatch.SpacerWidget({ width: 24, height: 3 }) // スペーサーウィジェット
]
});
// RowWidget の使用例
const rowWidget = new cloudwatch.RowWidget({
widgets: [
sampleTextWidget, // テキストウィジェット
new cloudwatch.SpacerWidget({ width: 6, height: 3 }) // スペーサーウィジェット
]
});
// ダッシュボードに追加
new cloudwatch.Dashboard(stack, "MyDashboard", {
dashboardName: "MyCustomDashboard",
widgets: [
[columnWidget], // カラムウィジェットを 1 行目に追加
[rowWidget] // ロウウィジェットを 2 行目に追加
]
});
const tableWidget = new cloudwatch.TableWidget({
title: "Full Table Example", // タイトル
metrics: [cpuUtilizationMetric, networkInMetric], // 表示するメトリクス
width: 12, // ウィジェットの幅
height: 6, // ウィジェットの高さ
fullPrecision: true, // 小数点以下を完全に表示
period: cdk.Duration.minutes(10), // デフォルトの期間
region: "us-west-2", // 表示するメトリクスのリージョン
start: "2023-01-01T00:00:00Z", // 開始時刻
end: "2023-12-31T23:59:59Z", // 終了時刻
liveData: true, // ライブデータを表示
showUnitsInLabel: true, // ラベルに単位を表示
thresholds: [
cloudwatch.TableThreshold.above(80, cloudwatch.Color.RED), // 80%以上を赤
cloudwatch.TableThreshold.between(50, 80, cloudwatch.Color.ORANGE), // 50〜80%をオレンジ
cloudwatch.TableThreshold.below(50, cloudwatch.Color.GREEN), // 50%未満を緑
],
summary: {
columns: [cloudwatch.TableSummaryColumn.AVERAGE, cloudwatch.TableSummaryColumn.MAXIMUM], // 平均値と最大値
hideNonSummaryColumns: true, // サマリー列のみ表示
sticky: true, // サマリー列を固定
},
});