GitHub Actions と GitHub Pages で簡易 Web API ヘルスチェッカー作成
今私のほうで、オープンデータを提供するWeb APIのリストを作成しています。
このリストをメンテナンスする上で、提供終了したAPIを見つけ出して削除するのは結構大変です。
また、どのAPIが現在使えないかがぱっとわかれば、利用する側からしても便利だと思いました。
そこで、GitHub Actions で定期的にヘルスチェックを行い、GitHub Pages でその状況を一覧として見れるプログラムを作りました。
今回は、web-page-checkerについて紹介します。
web-page-checker で出来ること
一般的なヘルスチェック(死活監視)で思い浮かぶのは、障害発生時に即座に通知されるような仕組みだと思います。
web-page-checker では、即座に状況がわかるように高頻度でチェックをするためのものではなく、たまに利用する WebページやAPIについて、せいぜい1日に一回程度の頻度でチェックし、ざっくりとした状況が確認できることを想定して作成しました。
このくらいの頻度であれば、GitHub Actions を使っても大丈夫かなと思います。
活用事例
Qiita:利用可能なSPARQLエンドポイントリスト(2021年7月版) の Web API の状況は以下のページで確認ができます。
GitHub Actions により定期チェックされ、例えばアクセス不能な場合×
が表示されます。
使い方
リポジトリ作成
使い方は簡単です。GitHub Actions に関する設定だけ若干面倒です。
まず、自身のGitHubリポジトリにweb-page-checker をフォークして、ローカルにcloneします。
GitHub Actions を利用するため、必ずフォークしてください。
その後 npm install
も行います。
$ git clone git@github.com:[アカウント名]/web-page-checker.git
$ cd web-page-checker
$ npm install
試しにここで npm start
を実行します。
$ npm start
docs
ディレクトリ内の index.html
をブラウザで開いて見ましょう。
以下のように表示されます。
チェックリスト変更
チェックする URL は urllist.yaml
で管理しています。
- name: Web site
url: https://uedayou.net/
- name: API server
url: https://api-jrslod.uedayou.net/sparql
params:
output: json
query: "prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> select * where{ ?s rdfs:label ?label. } limit 10"
例えばここに、https://uedayou.net/loa/ もチェック対象に加えようとすると以下のように追加します。
- name: Web site
url: https://uedayou.net/
- name: API server
url: https://api-jrslod.uedayou.net/sparql
params:
output: json
query: "prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> select * where{ ?s rdfs:label ?label. } limit 10"
- name: loa site
url: https://uedayou.net/loa/
その後、npm start
を実行すると、index.html
の表示が以下のように変わります。
GETパラメータを指定したい場合は、params
にパラメータを追加すればパラメータ付きでチェックします。
- name: API server
url: https://api-jrslod.uedayou.net/sparql
params:
output: json
query: "prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> select * where{ ?s rdfs:label ?label. } limit 10"
チェックしたいURLの追加が完了したら、GitHub に push しておいてください。
GitHub Actions 設定
GitHub Actions の実行スクリプトは以下のようになっています。
このスクリプトは、リポジトリに追加されたデプロイ用の認証情報を使って、gh-pages
ブランチにWebページを自動的にデプロイするようになっています。
認証情報の設定方法は、
を参照してください。
具体的には、秘密鍵・公開鍵作成から秘密鍵を登録の作業が必要です。
name: check
on:
push:
branches:
- 'master'
#schedule:
# - cron: '0 0 * * *'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 1
- uses: actions/setup-node@v1
with:
node-version: 14.x
- name: check
run: |
npm install
npm run start
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./docs
上記のスクリプトは、master
ブランチの push イベントに応じて実行されます。
例えば、
#schedule:
# - cron: '0 0 * * *'
のコメントを外すと、毎日9時過ぎにURLのチェックが実行されます。
GitHub Actions が正常に実行されると、Actions タブで以下のように表示されると思います。
GitHub Pages の設定と確認
GitHub Actions の実行が終わると GitHub Pages の設定さえすれば、チェックリストがWebページとして見れると思います。
デフォルトであれば、以下を開くとチェックリストが表示されます。
https://[アカウント名].github.io/web-page-checker/
懸念点
GitHub Actions は 60日以上リポジトリの活動がない場合は、スケジュール機能が停止するそうです。
https://zenn.dev/hellorusk/articles/fc6d4696f5b269
一応、gh-pages
ブランチには自動的に push されるので、この制約にはかからないと思いますが...
まとめ
GitHub Actions と GitHub Pages を使って簡易的な Webページ/API のヘルスチェックの仕組みを作ってみました。
似たようなことはほかでもやってると思いますし、もっと高性能なものもあると思いますが、似たようなニーズがあれば、こちらを試すメリットはあるかなと思います。
Discussion