AWS CloudWatch Synthetics 検証

CloudWatch Synthetics

料金

無料利用枠:1 か月あたり 100 回の Canary 実行
料金:Canary 実行ごと0.0019USD
あと CloudWatchLogs、 CloudWatchAlerm、APIコール 分とか S3 とかもかかりそう

モニタリングの作成

カナリアの作成

Canaryの作成

監視を行うための処理(スクリプト)は

  • 設計図を使用する
  • スクリプトをアップロードする
  • S3からインポート

の選択肢がある

とりあえずテンプレートから触ってみる
設計図を選ぶと

  • ハートビートのモニタリング
  • API Canary
  • リンク切れチェッカー
  • GUI ワークフロービルダー

があるのでとりあえずハートビートのモニタリングをしてみる

ビルダーに URL を指定するわけだけど、きっとこれ認証とかアクセス制御してたら出来ないんだろなぁ
URLを入力すると自動でスクリプトに反映される
テンプレートのスクリプトは JS で書かれているので他の記事でも見たけどバックグラウンドは Lambda で動いてる

var synthetics = require('Synthetics');
const log = require('SyntheticsLogger');

const pageLoadBlueprint = async function () {

    // INSERT URL here
    const URL = "https://hogehoge.com/";

    let page = await synthetics.getPage();
    const response = await page.goto(URL, {waitUntil: 'domcontentloaded', timeout: 30000});
    //Wait for page to render.
    //Increase or decrease wait time based on endpoint being monitored.
    await page.waitFor(15000);
    await synthetics.takeScreenshot('loaded', 'loaded');
    let pageTitle = await page.title();
    log.info('Page title: ' + pageTitle);
    if (response.status() !== 200) {
        throw "Failed to load page!";
    }
};

exports.handler = async () => {
    return await pageLoadBlueprint();
};

スクリプトを見てみると、応答タイムアウトかな? await page.waitFor(15000)
何をもってエラーかどうか判定するための if (response.status() !== 200) がある
この辺は環境や用途に応じて調整するポイント

ライブラリは

  • Syntheticsライブラリバージョン1.0
  • Puppeteer-coreバージョン1.14.0
  • Puppeteer-core 1.14.0に一致するChromiumバージョン

で構成されていてLambdaコードは、最大メモリが1 GB、10分後、またはカナリアの頻度値のいずれか短い方でタイムアウトするらしい

実行間隔
最短でも1分間隔、最大で1時間間隔まで

データ保持
範囲は1〜600日 カスタム値があるのである程度自由に設定できそう
ログは CloudWatchLogs に出るっぽい

データ・ストレージ
テストランデータが出力されるらしい(実際に最後まで手順進めてみたけど何も出力されなかった)
この作業は初回しか設定できず、Canary 作成後は確認もできない

しきい値とアクセス許可
しきい値は判断項目がスクリプト内にあるのでいいが、IAMロールが新しく作らせてくれない
しょうがないので S3、 CloudWatchLogs、 CloudWatchメトリクス発行 らへんの権限を持っているロールを事前に作っておく

動作確認

とりあえず作成するとすぐに動き出す
ちなみに対象のURLはアクセス制限があるのであっさりと失敗になった

なぜ失敗したか、が監視のキモだがちゃんと見れるようになってる
ただスクリーンショットやHARファイル、ログのプレビューにはめちゃくちゃ時間かかる

メトリクスでは Lambda の実行状況とか

設定では設定内容と実行間隔やしきい値、スクリプトを再修正できる

通知

監視失敗時にアラート通知したい場合は「Thresholds」にてアラームを有効化する必要がある

有効化すると作成した Canary の設定編集からしきい値を有効化できるようになる

有効化すると自動でアラームが作成されるので
SNSにトピックを発行したり
AutoScaling を起動したり
EC2 アクションを実行したりできる

Lambda構成のカスタマイズ

Canaryで作成した監視用Lambda関数は下記のように登録されている

Canaryは外部監視を出来ることが売りだが、VPCエンドポイントとか作って内部監視
NATGWとか使って固定IP化して一般公開以外のサイト監視にも対応など

結局やってることは Lambda 作って Cloudwatch でアラート監視しましょなので色々できそう


使ってみて思ったことは、 Lambda + CloudWatch で頑張れば実装できる 細かい監視設定を
マネージドで自動化して作成できますよ!というサービスなんだな

その分細かい要望や要件に柔軟に対応できるようになっている
どうせなら Connect とかと連携して電話連絡できるようにしてくれるといいなー

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)
Share Comments
comments powered by Disqus