IOpipeとは

IOpipeは、AWSのLambdaのinvocationのカウントだったり、エラーだったりをモニタリングしたり、アラートをあげて通知したりできるサーバーレスアーキテクチャ用のDevOpsプラットフォームです。
これまでは、cloudwatchlogsのtriggerなどを駆使してslackに通知したり、タスク管理ツールに起票したり、メールで通知したりしてきたと思いますが、IOpipeを導入することで、いい感じにやれます。
詳細はこちら

機能について

サインアップ後、下記の手順でチュートリアルを行っていきます。

- チームの作成
- プロジェクトの作成
- Lambdaのモニタリング画面の確認
- アラートの設定

チームの作成

自分でチームを作成したり、招待をもらうことで他のチームにjoinすることができます。
チームに対してプロジェクトが紐づいているようです。

プロジェクトの作成

実際にアプリケーションのモニタリング用にプロジェクトを作成します。
プロジェクトを作成するとトークンが生成されます。
トークンを従来のLambdaにSDKと一緒に噛ませることでIOpipeにデータを送信するといった仕組みです。
自分で用意したLmabda関数にSDKをインストールします。

現在は、 Node.js, Python, Java に対応。

①まずはサーバーレスの環境用意

yarn add serverless
yarn add @iopipe/iopipe

②任意のserverless.ymlを準備

service: testiopipe
provider:
  name: aws
  runtime: nodejs8.10
  profile: <profile>
  stage: <stage>
  region: <region>

functions:
  hello:
    handler: handler.hello
    events:
      - http:
          path: /
          method: get
          cors: true

③コードの準備

var iopipe = require("@iopipe/iopipe")({
  token: ""
});
module.exports.hello = iopipe(async (event, context) => {
  return {
    statusCode: 200,
    body: JSON.stringify({
      message: event
    })
  };
});

以上!

Invocationのモニタリング

下記のような画面でモニタリングできます。

上記のモニタリング画面では、指定した時間帯、または直近15m,1h,4h, 24hでのinvocation数、success数、error数が確認できます。

アラート機能

アラート機能では、各ファンクションに対してルールを割り当て、それに対してアラートを検知し通知することができます。

ルールを作成します。
選べるメトリックの種類は、
Invocation Duration, Errors, Invocation Count, Custom Metric, Custom Number Metric, Trace Measure, Process ID の中から選択が可能です。
選択後は、Equal To, Grater Than等でしきい値を設定できます。
こういったルールを複数組み合わせることも可能です。

hook機能

アラート発生時にhook先にeventを送信することができます。
現在は、Email, Slack, Webhook, Lambda Function の4つが対応しているので、割と何でもできます。

送信されるイベントデータには下記のようなデータが含まれています。

{
    "created": 1536055382323,
    "event": {
        "id": "<uuidv4っぽいやつ>",
        "url": "<endpoint>"
    },
    "func": {
        "name": "Alert matching function iopipetest-test-fatality"
    },
    "functionIds": ["<arn>"],
    "global": false,
    "hook": {
        "id": "<uuidv4っぽいやつ>",
        "value": "<endpoint>",
        "created": ,
        "type": "webhook"
    },
    "hooks": [{
        "id": "<uuidv4っぽいやつ>",
        "value": "",
        "created": ,
        "type": "slack_channel"
    }, {
        "id": "<uuidv4っぽいやつ>",
        "value": "<endpoint>",
        "created": ,
        "type": "webhook"
    }],
    "id": "<uuidv4っぽいやつ>",
    "latestEventFunctions": [],
    "latestEventId": "<uuidv4っぽいやつ>",
    "muteUntil": ,
    "name": "TEST IOpipe Alert",
    "project": {
        "teamName": "MyTeam",
        "teamId": "<uuidv4っぽいやつ>",
        "id": "<uuidv4っぽいやつ>",
        "name": "MyProject",
        "token": "<token>",
        "active": true,
        "created": 
    },
    "ruleConjunction": "or",
    "rules": [{
        "id": "<uuidv4っぽいやつ>",
        "metric": "count",
        "operand": "10",
        "operator": "gt",
        "result": false,
        "range": 300000,
        "total": 0,
        "name": null,
        "funcs": []
    }, {
        "id": "<uuidv4っぽいやつ>",
        "metric": "errors",
        "operand": "1",
        "operator": "gte",
        "result": true,
        "range": 300000,
        "total": 1,
        "name": null,
        "funcs": [{
            "id": "<lambda arn>",
            "total": 1,
            "result": null
        }]
    }],
    "status": "alarm",
    "statusTimestamp": 1536137758986,
    "timestamp": 1536138774900,
    "transition": true,
    "transitionFromNow": "a few seconds ago"
}

料金について

現在は、Startupプラン(無料)、Teamプラン(有料)、 Enterpriseプラン(有料)と3パターンあります。

Startup Team Enterprise
メンバー数 1チームにつき1人まで 無制限 無制限
プロジェクト数 1プロジェクトまで 5プロジェクトまで 無制限
関数呼び出し回数 月に100万回 月に500万回 無制限
データ保存期間 7日間 30日間 カスタム出来るらしい

他にもプランにより使える機能も異なるようです。
気になる方はこちらを確認してください。

まとめ

Lambda等のサーバーレス構成のアプリケーションって何をどう保守・運用するのか。とても難しいと思います。
これまでは、そもそもサーバーが無いのに何を監視するのか、エラーだけ通知すればいいのか等、各所で議論されていたと思います。
このツールを活用することで、何か出来そうな気がしてます。

元記事こちら

Lambdaの運用・保守に使えるかもしれないIOpipe入門