2020/11/09
今回はAWSのLambdaとCloudWatchイベントを組み合わせ、私のブログに対して簡単な監視をさせてみました。
というのもこのブログ、今まで監視の仕組みが入っていなかったんですね。
なので仕事中や移動中に関わらず「自分でブログを定期的に見る」という、人力のセルフ監視をしておりました。
しかしもちろん限界があり、何度か証明書のエラーに気付かずダウンさせてしまったので、AWSを使って監視させようと思った次第です。
Lambda関数の作成
まずは「サイトにリクエストを投げ、異常があればSlackに通知する」Lambda関数を作成します。
本記事ではランタイムをRubyにしています。
必要なのはHTTPリクエストだけで、どのランタイムでも簡単に実装できるかと思いますので、そこはお好みで。
require 'net/http' require 'json' def lambda_handler(event:, context:) target_uri = URI("https://gomafrontier.com") response = Net::HTTP.get_response(target_uri) if (response.code != '200') then webhook_uri = URI("webhookのURL") http = Net::HTTP.new(webhook_uri.host, webhook_uri.port) http.use_ssl = true error_message = target_uri.host + " 監視エラー\n" + response.code + ' ' + response.message params = { text: "<!channel>\n" + error_message } headers = { "Content-Type" => "application/json" } http.post(webhook_uri.path, params.to_json, headers) end { response: response.code + ' ' + response.message } end
ブログのURLにGETリクエストを投げ、HTTPステータスコードが200以外であればSlackのWebhook URLにメッセージを投げます。
レスポンスは適当です。Lambda側で完結するので、CloudWatchにエラーと見なされなければなんでも良いかと。
https://qiita.com/vmmhypervisor/items/18c99624a84df8b31008
CloudWatchのイベント作成
AWSで「何かを定期的に実行中する」仕組みはいろいろありますが、今回はシンプルにLambdaを叩くだけで良いので、CloudWatchのイベントを設定しました。
実行周期はお好みで。私の場合は1時間にしました。
監視という意味では数分おきくらいにチェックするべきですが、実行させすぎるとLambdaやCloudWatchの無料分を越えてしまう可能性があるので注意です。
このあたりはサイトがどのくらいクリティカルなサービスかによるかと。
ターゲットは先ほど作成したLambda関数を指定してください。
説明もお好みで。後々分かればなんでもいいと思います。
作成後にイベント一覧でアクティブになっていることを確認します。
テスト
テストとして、前述のLambda関数のif (response.code != '200') then
を==
に書き換えて保存し、CloudWatchのイベント実行を待ちます。
上手くいけばこのような通知がきます。確認中したらLambda関数のif文を元に戻しておきましょう。
あとがき
そんなわけで、Lambda+CloudWatchで簡単な監視の仕組みを作ってみました!
ちょっとした機能を作るのにLambdaはすごく便利です。十分な無料枠が設けられていることもあり、個人でも使いやすいですね。