6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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のモニタリング

下記のような画面でモニタリングできます。
スクリーンショット 2018-09-06 12.15.00.png

上記のモニタリング画面では、指定した時間帯、または直近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等でしきい値を設定できます。
こういったルールを複数組み合わせることも可能です。
スクリーンショット 2018-09-06 13.30.56.png

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

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?