この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、CX事業本部 IoT事業部の若槻です。
Amazon CloudWatch Syntheticsを使用すると、WebサイトやAPIのURLの監視(外形監視)を行うことができます。
今回は、Amazon CloudWatch SyntheticsによるURL監視のアラームをメール通知する構成をAWS CDKで実装してみました。
構成
10分に1回のCanary実行が一度でも失敗したらアラーム状態となりメール通知が行われます。
構築
CDKコード
lib/aws-cdk-app-stack.ts
import * as path from 'path';
import * as cdk from '@aws-cdk/core';
import * as cloudwatch from '@aws-cdk/aws-cloudwatch';
import * as cloudwatchActions from '@aws-cdk/aws-cloudwatch-actions';
import * as sns from '@aws-cdk/aws-sns';
import * as synthetics from '@aws-cdk/aws-synthetics';
export class AwsCdkAppStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props: cdk.StackProps) {
super(scope, id, props);
//CloudWatch Synthetics Canary
const canary = new synthetics.Canary(this, 'WebsiteCanary', {
canaryName: `website-canary`,
schedule: synthetics.Schedule.rate(cdk.Duration.minutes(10)),
runtime: synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_2,
test: synthetics.Test.custom({
code: synthetics.Code.fromAsset(
path.join(__dirname, `../src/lambda/website-canary-handler`)
),
handler: 'index.handler',
}),
environmentVariables: {
URL: 'https://dev.classmethod.jp/',
},
});
//SNSトピック
const canaryFailNotificationTopic = new sns.Topic(
this,
`canary-fail-notification-topic`
);
//CloudWatch Alarm
const canaryAlarm = new cloudwatch.Alarm(this, 'canary-alarm', {
alarmName: 'canary-alarm',
metric: canary.metricFailed(),
evaluationPeriods: 1,
threshold: 1,
statistic: cloudwatch.Statistic.SUM,
comparisonOperator:
cloudwatch.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
period: cdk.Duration.minutes(10),
});
//AlarmにSNSトピックに通知するアクションを追加
canaryAlarm.addAlarmAction(
new cloudwatchActions.SnsAction(canaryFailNotificationTopic)
);
}
}
- Canary、SNSトピック、CloudWatch Alarmのリソースを作成しています。
- Canaryの監視対象とするサイトのURLは環境変数
URL
でスクリプトに渡しています。 - CloudWatch Alarmの評価期間はCanaryの実行間隔と同じ10分間とし、評価期間中のCanary実行のFail回数が1回以上であればアラーム状態となるようにすることにより、Canary実行が一回でも失敗すれば通知がされるようにしています。
CDKデプロイしてリソースを作成します。
サブスクリプションの登録
作成されたSNSトピックのサブスクリプションとしてメールアドレスを登録します。
アラームを発生させてみる
Canaryの監視対象URLを404となるものに変更し、CDKデプロイして変更を反映させます。
lib/aws-cdk-app-stack.ts
const canary = new synthetics.Canary(this, 'WebsiteCanary', {
canaryName: `website-canary`,
schedule: synthetics.Schedule.rate(cdk.Duration.minutes(10)),
runtime: synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_2,
test: synthetics.Test.custom({
code: synthetics.Code.fromAsset(
path.join(__dirname, `../src/lambda/website-canary-handler`)
),
handler: 'index.handler',
}),
environmentVariables: {
URL: 'https://dev.classmethod.jp/hoge',
},
});
最新のCanary実行が失敗してアラームが発生しています。
サブスクリプションに登録したアドレスにアラーム通知がメールで届きました。
アラームのタイムラインでも現在の状態がアラーム状態となっています。
アラームの履歴を見ると詳細な時系列を確認できます。
参考
以上