新卒エンジニアによる全部俺カレンダー2022 1日目投稿記事です。
概要
作業に集中する時やリラックスする時によく飲むコーヒー・・。
頭が冴えてスッキリするのですが、ついつい飲み過ぎてカフェイン依存症にならないか健康面的に心配になってきました。
そこで自分がどのくらいコーヒーを飲んだか可視化してみようと思い、Slackコマンドを作成してみました。
使用技術
Slack API
AWS Lambda + API Gateway
NewRelic
用意するもの
- Slackのアカウント / ワークスペース
- AWSアカウント
- NewRelicのアカウント(無料版でOK)
Slack APIでの設定
Command: 好きなコマンド名(英字)
Request URL: API Gatewayのエンドポイントを設定
今回は/newrelic
という名前でコマンドを作成していきます。
Lambda関数の作成
今回ランタイムはPython3.9を使用。
設定 > 環境変数で NewRelicのAPI KeyとEvent APIのエンドポイントURLをあらかじめ設定しておく。
import json
import os
from urllib.parse import parse_qs
import requests
import boto3
NEWRELIC_KEY = os.environ["NEWRELIC_KEY"]
NEWRELIC_ENDPOINT = os.environ["NEWRELIC_ENDPOINT"]
def lambda_handler(event, context):
headers = {"X-Insert-Key": NEWRELIC_KEY}
d = {}
# NRQLで指定するイベント名
d["eventType"] = "health"
# NRQLで取得する属性名
d["count_coffee"] = 1
# NewRelicにイベントを送信
res = requests.post(NEWRELIC_ENDPOINT, headers=headers, json=d)
# コマンド実行時に返すメッセージ
message = '記録完了! \n コーヒーの飲み過ぎはほどほどに。'
return {
"response_type": "ephemeral",
"text": message
}
API Gatewayの設定
Lambda関数のトリガーとしてAPI Gatewayを作成する。
(※ API Gatewayの概要・基本的な使い方は割愛します)
APIの作成から REST API を選択
アクション → メソッドの作成からPOSTメソッドを作成
統合リクエストの設定を行う。
- 統合タイプ: Lambda関数
- Lambda関数: 今回の手順で作成するLambda関数名
続いてマッピングテンプレートの設定を行う。
Slack APIのContent-Typeである**application/x-www-form-urlencoded**
を指定する。
テンプレートの生成から「メソッドリクエストのパススルー」を選択
Slackコマンドを使ってみる
Lambda関数で設定した、コマンド実行時のメッセージが返って来れば成功です。
NewRelicでコーヒー摂取量を可視化
Slackコマンドによって、NewRelic上のhealth
というイベントにcount_coffee
という属性でコーヒー摂取量を記録しました。
実際に自分がどのくらいコーヒーを飲んでいるか、NewRelic上で可視化してみます。
NewRelic > Dashboardに行き、ダッシュボードを作成します。
作成したダッシュボードの右上の+ボタンをクリックし、Add Chartでグラフを作成します。
以下のNRQLを貼り付けてグラフを作成します。
SELECT sum(count_coffee) from health since 7 week ago TIMESERIES 1 week
こんな感じでグラフで自分のコーヒー摂取量がグラフで可視化されます・・・!
Slack API, Lambda, NewRelicを組み合わせると、このようなちょっとしたライフログ的なものが作れます。
参考