WebhookのEndpointをLambdaでつくる

WebhookのEndpointをLambdaでつくる

Category
Description
エンジニアの皆さんWebhook使っていますか?というかほとんどのエンジニアが自然と使っていますよね。
Author
Published
Published July 4, 2020
Last Updated
Last Updated July 4, 2020
Writings
この記事は約4分で読めます

はじめに

エンジニアの皆さん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にしておきます。
notion image
ソースコードはとりあえずログを表示するだけのコードです。
import json def lambda_handler(event, context): payload = json.dumps(event) print('Payload ' + payload)

API Gatewayの作成

API Gatewayを検索してAPIを作成します。
notion image
今回はRESTを選択してAPIを作成。
そしたら、アクションを選択してメソッドの作成を選択。
notion image
ここで先ほど作成したLambdaとつなげましょう。関数の名前とリンクしているようです。
notion image
Lambdaのページに行ってつながっているか確認しましょう。こんな図になっていたらOKです。
notion image
あとはAPIをデプロイするだけです。
notion image
エンドポイントが公開されることになるのでセキュリティ無設定で公開すること早めておきましょう。今回は検証なのでそのままです。

ローカルで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に通知したりと幅が広がるので知っておくとお得ですね🤗

参考