Lambda의 운용·보수에 사용할 수 있는 IOpipe 입문

IOpipe란?



IOpipe는 AWS의 Lambda invocation 카운트, 오류 등을 모니터링하고 경고를 통보할 수 있는 서버리스 아키텍처용 DevOps 플랫폼입니다.
지금까지는 cloudwatchlogs의 trigger등을 구사해 slack에 통지하거나, 태스크 관리 툴에 기표하거나, 메일로 통지해 왔다고 생각합니다만, IOpipe를 도입하는 것으로, 좋은 느낌에 할 수 있습니다 .
자세한 내용은 여기

기능 정보



가입 후 아래의 순서로 튜토리얼을 진행합니다.
- チームの作成
- プロジェクトの作成
- Lambdaのモニタリング画面の確認
- アラートの設定

팀 만들기



직접 팀을 만들거나 초대를 받으면 다른 팀과 조인할 수 있습니다.
팀에 프로젝트가 연결되어있는 것 같습니다.

프로젝트 만들기



실제로 애플리케이션 모니터링을 위해 프로젝트를 만듭니다.
프로젝트를 만들면 토큰이 생성됩니다.
토큰을 기존 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 Duration , Errors , Invocation Count , Custom Metric , Custom Number Metric , Trace Measure , Process ID 중에서 선택할 수 있습니다.
선택 후에는 Equal To , Grater Than 등으로 임계값을 설정할 수 있습니다.
이러한 규칙을 여러 조합할 수도 있습니다.


 후크 기능



경고 발생 시 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

기업


멤버 수
1팀당 1명까지
무제한
무제한

프로젝트 수
1 프로젝트까지
5 프로젝트까지
무제한

함수 호출 횟수
한달에 100만회
한달에 500만회
무제한

데이터 보존 기간
7일간
30일
커스텀 할 수있는 것 같습니다.


그 밖에도 플랜에 따라 사용할 수 있는 기능도 다른 것 같습니다.
신경이 쓰이는 분은 여기 를 확인해 주세요.

요약



Lambda등의 서버리스 구성의 어플리케이션은 무엇을 어떻게 보수·운용하는 것인가. 매우 어렵다고 생각합니다.
지금까지는, 원래 서버가 없는데 무엇을 감시하는지, 에러만 통지하면 좋은 것 등, 각처에서 논의되고 있었다고 생각합니다.
이 툴을 활용하는 것으로, 뭔가 할 수 있을 것 같은 생각이 듭니다.

좋은 웹페이지 즐겨찾기