はじめに
エンジニアの皆さんWebhook使っていますか?というかほとんどのエンジニアが自然と使っていますよね。
今回はSlackなどのWebhook EndpointをAWS Lambdaで自作してしまおうという内容です!
内容
そもそもWebhookとは
Webアプリケーションでイベントが実行された際、外部サービスにHTTP POSTで通知する仕組みです。
Slackなどの特定のイベントが発火されたら別のAPIサーバに対してHTTP POSTのリクエストを行う仕組みのことですね。
AWS API GatewayとLambdaを使用してPostエンドポイントの作成
まずはAWS Consoleにサインインしましょう。
Lambdaの作成
Lambdaを作成します。Lambdaとは一言でいうと関数のことです。「WebhookをトリガーにLambdaで処理を行う」ための肝心の処理部分をLambdaで作成します。
今回は手動で作成することが前提です。
Lambdaを作成して、「一から作成」をクリックしてLambdaを作成しましょう。
名前とかは何でもいいのでとりあえずPythonにしておきます。
ソースコードはとりあえずログを表示するだけのコードです。
import json def lambda_handler(event, context): payload = json.dumps(event) print('Payload ' + payload)
API Gatewayの作成
API Gatewayを検索してAPIを作成します。
今回はRESTを選択してAPIを作成。
そしたら、アクションを選択してメソッドの作成を選択。
ここで先ほど作成したLambdaとつなげましょう。関数の名前とリンクしているようです。
Lambdaのページに行ってつながっているか確認しましょう。こんな図になっていたらOKです。
あとはAPIをデプロイするだけです。
エンドポイントが公開されることになるのでセキュリティ無設定で公開すること早めておきましょう。今回は検証なのでそのままです。
ローカルでPostして動作するか確認する
curlでPostしてみましょう。
$ curl -X POST -H "Content-Type: application/json" -d '{"message":"it is test"}' https://{your-api-gateway-domain}.us-east-1.amazonaws.com/
ログにPostしたデータが表示されているはずです。
まとめ
最速で5分もかからずにAPI Postエンドポイントを作成することができました。ちょっとした処理とかだったらすぐ作れるのでホント便利ですねー。
ここまでできたらあとは、esa.ioの記事作成のイベントをwebhookでAWS側で保存したり、Slackに通知したりと幅が広がるので知っておくとお得ですね🤗