こんにちは。社内でCloudWatch Syntheticsで外形監視(Web監視)を設定する機会があったので、やり方を紹介します!

CloudWatchで外形監視(Web監視)を行うには、2パターンがあります。一つ目はURL監視で、二つ目はWebシナリオ監視です。今日はURL監視の設定手順と監視を行う際のコストについて、お伝えします。

CloudWatch Synthetics とは

ウェブサイトや API のエンドポイントに対して、 SeleniumやPuppetterと同様に利用ユーザーと同じアクションを実行して、パフォーマンスや可用性をモニタリングできます。 

CloudWatch Synthetics では、Canary を設定します。Canaryとは スケジュールに沿って実行されるスクリプトです。Canary では Node.js、Pythonのスクリプトや実行間隔、通知などの設定をします。 スクリプトの作成は、AWS が提供するブループリントを使用する方法やChromeの拡張機能を利用することで、 操作に応じたスクリプトが生成されます。また、CloudWatch Synthetics のライブラリを組み込んで作成する方法があります。

URL死活監視を設定してみる

(1) Cloud Watchから「Synthetics Canaries」を選びます。

(2) Canaryを作成するには、AWSから提供される設計図を利用するか、独自のスクリプトをアップロード、もしくはS3からインポートすることができます。

今回は「設計図を使用する」を選び、「ハートビートのモニタリング」を選びます。

(3) Canary ビルダーでは、Canaryの名称を入力し、監視したいURLを入力します。

(4) Canaryのスクリプトを実行するランタイムバージョンを選びます。ここでは、デフォルトの「syn-nodejs-puppeteer-3.2」のままとします。

(5) スクリプトが実行されるスケジュールとデータの保存期間を選びます。

(6) Canaryの実行結果の保管場所(S3)とIAMロールの設定を行い、作成します。

(7) しばらく待つと、Canaryが作成されました。

(8) 実行がされ、URL監視が成功すると、ステータスが「成功」に変わります。

(9) 可用性タブから監視の結果を確認することができます。実行されたStepはこんな感じで表示されます。

(10) スクリーンショットを設定しておくと、結果を確認することも可能です。

(11) スクリプトの実行ログも確認が可能です。(S3にも保管されます)

利用料金

東京リージョンは、Canary 実行あたり 0.0019USDかかります。

5 分ごとに 1 回実行する 5 つの Canary を作成し、Canary によって生成されたメトリクスのうち 5 つにアラームを追加してデータを 1 か月間保存した想定で利用料金を算出してみます。東京リージョンでの料金算出をしてみました。

5 Canary * 12回実行/1時間 * 24時間/日 * 31日/1ヵ月 = 44,640 Canary 実行

CloudWatch の月額料金

Canary 実行料金 = 44,640 Canary 実行 *  0.0019USD

1 か月あたり 84.82USD
1 か月あたり 5 回のアラーム = 5 * 0.10 USD = 1 か月あたり 0.50 USD
CloudWatch の合計月額料金 = 84.82 USD + 0.50 USD =85.32USD

月額追加料金

Canary 実行ごとに AWS Lambda 関数も実行され、ログと結果が CloudWatch Logs と指定された Amazon S3 バケットに書き込まれます。AWS LambdaAmazon S3CloudWatch Logs などの AWS のサービスの料金はサービスの料金ページを参照お願いします。

Lambda 料金 = リクエスト料金 + 時間料金
44,640 実行からのリクエスト * 1,000,000 あたり 0.2 USD + 20 秒間 * 44,640 Canary 実行 * 1 GB のメモリサイズ * 1 秒あたり 0.000016667/GB
= 0.01 USD + 14.88 USD = 1 か月あたり 14.89 USD

CloudWatch Logs 料金 = 収集料金 + ストレージ料金
実行あたり 0.00015 GB の収集 * 44,640 実行 * GB あたり 0.76USD + 実行あたり 0.00015 GB のストレージ * 44,640 Canary 実行 * 1 か月あたり 0.025 USD/GB
= 5.09 USD + 0.17USD = 1 か月あたり 5.26 USD

S3 料金 = プットリクエスト料金 + ストレージ料金
= 44,640 実行のプットリクエスト * 1,000 リクエストあたり 0.005 USD + 実行あたり 0.001 GB のストレージ * 44,640 Canary 実行 * 1か月 * 1 か月あたり 0.025USD/GB
= 0.22 USD + 1.12 USD = 1 か月あたり 1.34 USD

追加月額料金 = 14.89 USD + 5.26 USD + 1.34 USD = 21.19USD

合計月額料金 = 85.32 USD + 21.19 USD = 106.51USD

まとめ

CloudWatch Syntheticsを活用することで、URL死活監視やWebシナリオ監視が簡単にできますね。

ここからは、やってみての所感です。スクリプトの知識は「ほぼ」不要で設定できます。 Webシナリオ監視でログイン操作を伴う場合は、セキュリティ面の考慮が必要だと感じます。 パスワードを保護するために、Parameter StoreやSecret Managerを活用していきたいところですね。