自分専用のWebhookエンドポイントを作成してローカルにも転送してくれるWebhook Relayの使い方

はじめに
ローカルで動かしているサーバーやボットなどでHTTPリクエストをインターネット経由で受け取りたい場合、通常だと固定IPアドレスの取得やファイアウォールの設定など少々手間がかかります。Webhook Relayはその名の通り、Webhookを代わりに受け取ってローカル内のサーバやその他のインターネット上のWebhookのエンドポイントにHTTPリクエストをリレー(転送)してくれるサービスです。この記事では、Webhook Relayの使い方を簡単にまとめます。
Webhook Relayについて
Webhook Relayの公式サイトは以下になります。
Expose applications running on your local web server, on any network with an Internet connection without public IP, adding DNS records or opening ports Web Relay
Webhook Relayは月額課金の有料サービスですが、無料プランも用意されています。無料プラン(転送が月に150回まで)で十分試せるので一度使ってみると良いかもしれません。 なお、Webhook Relayでは、コマンドラインツール、Dockerのコンテナ、Node-red用のノードなどが用意されています。この記事ではコマンドラインツールを使います。
前提と環境
この記事では、Ubuntu18.04で試しました。なお、Webhook RelayはWindows、macOSでも使用可能です。
- OS : Ubuntu18.04
Webhook Relayのアカウントとアクセストークンを作成する
Webhook Relayのサインアップページからアカウントを作成します。
サインアップすると以下のようにダッシュボードが表示されます。アクセストークンを作成するために左サイドメニューにあある「Access tokens」をクリックします。
ここでは作成済のアクセストークンが表示されますが、初回の場合は当然ながら何も作成されていません。「CREATE TOKEN+」をクリックします。
以下のように新しく作成されたアクセストークンのキーとシークレット文字列が表示されるのでメモしておきます。
また、上記に記載されているコマンドを後ほど実行します。以上でアカウントとアクセストークンの作成が完了です。 なお、以降の手順に移る前に、Webhook Relayから届いているメール内のリンクをクリックして、メールアドレスの確認作業を完了させておいてください。この作業が完了していないと後ほどエラーとなります。
バケットを作成する
Webhook Relayでは、片方向のWebhookを転送するためにバケットというものを作成する必要があります。以降の手続きでどういうものか分かると思いますのでとりあえずバケットを作成します。 左サイドメニューにある「Buckets」をクリックすると、以下のようにバケットの一覧ページが表示されます。ここで「CREATE BUCKET +」をクリックします。
バケット名を入力し、「SUBMIT」をクリックします。
なお、ここで以下のように表示される場合はメールアドレスの確認ができていないので、Webhook Relayから届いているメール内のリンクをクリックしてメールアドレスの確認を完了させてください。
バケットを作成すると以下のようにバケットのダッシュボードが表示されます。ここで「Default public endpoint」がWebhookのエンドポイントになります。すなわち、このエンドポイントに対して例えばHTTP POSTリクエストを送信すると、それをローカル内のサーバーやインターネット上に公開されている別のサービスのWebhookのエンドポイントに転送することができます。
Webhook RelayのエンドポイントをInputと呼んでおり、転送先をOutputとしています。無料プランではInputもOutputも1つしか使用できませんが、有料プランならばそれぞれ追加することができます。 なお、上記画像内の「Default public endpoint」の横にある歯車マークをクリックすると以下のようにそのエンドポイントの設定ダイアログが開きます。ここでHTTPレスポンスのステータスコードや内容を設定できます。
エンドポイントの認証方法を設定する
デフォルトではWebhook Relayのエンドポイントは認証などはなく誰からのHTTPリクエストでも受け付けます。Webhook Relayでは、エンドポイントの認証方法としてベーシック認証とトークン認証も設定できます。 認証方法を変更するには、以下のように「BUCKET NAME & AUTHENTICATION」をクリックします。
ドロップダウンメニューから「basic」(ベーシック認証)、「token」(トークン認証)を選択できます。ベーシック認証ならばユーザ名とパスワード、トークン認証ならばトークンをそれぞれ指定し、「SAVE」をクリックして完了です。
Outputを設定する
Webhook Relayが受け取ったHTTPリクエストをローカル環境に転送したい場合は、以下のように「Output」部分で「internal network」にチェックを入れておきます。インターネット上のエンドポイントの場合はチェックを外します。「Output destination」には転送先となるローカルのサーバアドレス、インターネット上の他のエンドポイントに転送する場合はそのエンドポイントのURLを入力します。
なお、ローカル内のサーバに転送したい場合などはとりあえず「Output destination」を空にしておいても大丈夫です。
Webhook Relayのコマンドラインツールをインストールする
Linux(64bit)の場合は以下でWebhook Relayのコマンドラインツールをダウンロードできます。WindowsやmacOS、32bit版のLinux等の場合のダウンロード、インストール方法はこちらの公式ドキュメントに記載されています。
ダウンロードしたファイルに以下で実行権限を付与します。
以下のようにrelay
コマンドでバージョンを表示できればインストールが完了です。
続いて以下のコマンドで各自のWebhook Relatのアカウントにログインします。
以下が実際の実行例です。
以降でコマンドラインツールの使い方を説明します。
Webhook Relayに届いたHTTPリクエストをローカルで動作するHTTPサーバに転送する
まず最初の例として、Webhook Relayで受け取ったHTTPリクエスト(前節で出てきた「Default public endpoint」に届いたHTTPリクエスト)をローカル内で動作するサーバに転送してみます。これを実現するには以下のコマンドを使用します。以下はWebhook Relayのエージェントを起動して、Webhook Relayのエンドポイントに届いたHTTPリクエストに応じて動作させるためのコマンドです。
実際の使用例は以下です。
上記を実行すると、以下のように表示されて待機状態になります。
Webhook Relayのエンドポイント(前節で出てきた「Default public endpoint」)にHTTPリクエストが届くと、そのHTTPリクエストがhttp://localhost:8000
に転送されます。ただし、http://localhost:8000
では届いたHTTPリクエストを処理できるように何かしら実装しているとします。ローカルのHTTPサーバではなく、例えばWebhook RelayのエンドポイントにHTTPリクエストが届いたことをトリガにシェルスクリプトを実行したい場合は後述します。
Webhookをトリガにしてシェルスクリプトを実行する
Webhook Relayから転送されてきたHTTPリクエストをトリガにして任意のシェルスクリプトを実行することも可能です。以下のようなコマンドになります。
以下が使用例です。実行すると待機状態になります。
なお、上記のtouch.sh
の中身は適当に以下のようにしました。touch
コマンドでタイムスタンプをファイル名とした空のファイルを作成するだけのシェルスクリプトになります。
待機状態のところで、「Default public endpoint」にPOSTリクエストを送信してみます。すると以下のように端末に表示され、ディレクトリにタイムスタンプがファイル名になっている空のファイルが作成されます。
なお、HTTPリクエストの送信にはInsomnia等を使うと簡単です。
APIサーバの開発時にブラウザやコマンドを使って毎回動作確認したりデバッグしたりするのは大変だと思います。そこで便利なのがAPIサーバにHTTPリクエストを送ってそのレスポンス内容を確認できるAPIクライントです。この記事では、機能も充実していて、UIも綺麗なInsomniaの簡単な使い方をまとめます。
また、シェルスクリプトでなくても以下のようにPythonなどのスクリプトも実行できるようです。
まとめ
Webhookをローカルやその他の外部サービスに転送できるWebhook Relayについてまとめました。Webhook Relayを使うことで自由に使えるエンドポイントを用意でき、ローカル内で動作するサーバーやボットなどに外部からトリガすることができます。スマートホームや色々な自動化に利用できそうです。なお、Webhook Relayはできることが多く、この記事に書いたような片方向の転送ではなく双方向の転送も可能です。また、エンドポイントに届いたHTTPリクエストのフィルタ機能などもあります。詳しくは以下の公式ドキュメントを見てみてください。
Forward webhooks to localhost during development, testing or in production - Web Relay
関連記事
- 公開日:2020/02/16 更新日:2020/02/16
圧縮、暗号化、リモート対応の差分バックアップを作成できる「Borg Backup」の使い方
圧縮、暗号化に対応し差分バックアップを作成できるソフトウェアである「Borg Backup」をUbuntuにインストールして使ってみたのでその手順をまとめます。「Borg Backup」はLinux、macOSに対応しています。
- 公開日:2020/02/13 更新日:2020/02/13
モダンで美しいRSS&ポッドキャストリーダー「Winds」をUbuntuで使用する
RSSリーダーアプリは色々ありますが、結構見た目が古く更新されていないものも多いです。Windsはモダンな見た目で綺麗な上、WebサイトのRSSフィードだけでなくポッドキャストのフィードにも対応しています。この記事ではWindsをUbuntuにインストールして使用する手順をまとめます。
- 公開日:2020/02/07 更新日:2020/02/07
Jitsiで特定ユーザーのみビデオチャットを作成できるように設定を変更する
URLを発行するだけでブラウザでビデオチャットを開始できるオープンソースのJitsiで、特定ユーザーのみが新しいチャットルームを作成できるよう設定を変更したのでその手順をまとめます。
- 公開日:2020/02/07 更新日:2020/02/07
URL発行のみでビデオチャットやビデオ会議を開始できるオープンソース「Jitsi」
URL1つを発行するだけでその他のアカウント登録等不要にビデオチャットや複数人でのビデオ会議をブラウザで開始できる「Jitsi」を実際にインストールして使ってみたのでその手順をまとめます。
- 公開日:2019/12/23 更新日:2019/12/23
複数デバイス間でローカルのファイルを無制限に同期できるSyncthingをLinuxで使用する手順
Syncthingはローカルにあるファイルを複数のデバイス間で同期することができるオープンソースソフトウェアです。クラウド経由でファイルを同期するのではなく、ローカル同士で同期します。この記事ではUbuntuとAndroidでSyncthingを使用してファイルを同期するまでをまとめます。
開発アプリ
