ゴマちゃんフロンティア

アザラシが大好きなエンジニアの開発日記です

AWSの「Lambda + CloudWatchイベント」でサイトの監視をさせてみたお話

time 2020/01/10

今回は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にエラーと見なされなければなんでも良いかと。

Slackの「Webhook URL」の取得は以下の記事を参考にしました。
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はすごく便利です。十分な無料枠が設けられていることもあり、個人でも使いやすいですね。

down

コメントする