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