kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

lambda + golangでweb死活監視

aws lambdaをつかってweb監視を行なっています。言語はgolangを使用。通知はslackを使用。

eventsで5分単位に実行するweb監視の組み方です。

serverless.yml

provider:
  name: aws
  runtime: go1.x
  lambdaHashingVersion: 20201221

  stage: dev
  region: ap-northeast-1

functions:
  check:
    handler: bin/check
    events:
      - schedule: rate(5 minutes)

コード

package main

import (
    "github.com/aws/aws-lambda-go/lambda"
)

func Handler() (string, error) {
    check(target)
    return "OK", nil
}

function check(){
    // 処理内容
}

function notification(){
}

func main() {
    lambda.Start(Handler)
}

lambda実行のコード。Handleの返り値は変更可能。

監視のコード自体は前の記事を参照。

deploy

make deploy

deployが完了し、aws lambdaに関数が追加されていればOK。

トリガーにeventが入っていれば、時間でのイベント処理が実行されるようになる。

local実行

local:
    sls invoke local --docker -f check -d {}

まとめ

lambda+golangでのhttp死活監視でエラーがある場合にslackに通知が送られてくるようになりました。

サーバーを用意するのが面倒なためlambdaで構築できるのはありがたいですね。

golangの場合サーバーの設定があまり必要ないのでサーバーの設定面でいうと、スクリプト言語より楽ですがメンテナンス等を考えると気軽なserverless系での構築は望ましいですね。

役割が監視のため止まることが少ない構成で考える必要もあり、serverless系での構築は良かったと思います。

料金もそんなにかからないはず。