Hasuraとは何?という方はこちらを読んでいただけると幸いです。
Hasura GitHub Deployment(Beta)の概要
Hasuraでは、マイグレーション履歴やパーミッション等の情報をメタデータとして保持しています。
手元のメタデータをサーバーに反映させるには、hasura CLIを使ってmigrate applyやmetadata applyといったコマンドを流す必要があります。
稼働しているHasuraサーバーに対してメタデータを反映させるには、以下のような運用が考えられます。
- 手動でHasura CLIを使って
hasuraコマンドを流す -
<version>.cli-migrations-<version>タグのついたDockerイメージを使用して、コンテナ起動時にmetadata情報が読み込まれるようにして自動化 - サーバレス関数を使ってHasura CLIを動かすなどして、なんとかしてパイプラインに組み込んで自動化
ただ、いずれの方法もどこかで運用に難があり、ベストプラクティスとはあまり言えません。
ここで、Hasura GraphQL Engineのクラウド版にて、GitHub Deployment機能が追加されました。
GitHub上のリポジトリ・ブランチを指定してHasura Cloud上のプロジェクトと連携させることで、git commitにフックしてディレクトリ内のマイグレーション情報やメタデータ情報を自動的に反映させることができます。
この機能は現在Beta版として公開されており、無料で使用できます。
動作
この機能の使い方は、公式ドキュメントにも記載されています(英語)。
動作環境
GitHubアカウントをHasura Cloudに紐づける
Hasura Cloudのプロジェクト設定から、[Git Deploy] → [Linked GitHub Account]

すると、認証を求められるので、GitHubアカウントにHasura Cloudアプリをインストールします。
ここで、リンクするリポジトリの制限ができます。

デプロイ設定
インストールすると、GitHubアカウントとHasura Cloudプロジェクトが紐づけられます。

ここで、
- 連携するリポジトリ
- 連携するブランチ
- Hasuraのメタデータが置かれているディレクトリ
- Deployment Mode
を設定します。
Deployment Modeでは、Automatic / Manualから選ぶことができます。
- Automatic: ターゲットとなるブランチのcommitにトリガーして、自動的にデプロイを行う
- Manual: デプロイは自動的にトリガーされない。手動で[Deploy Now]を押すことで、最新のコミットの状態でデプロイが行われる。
デプロイ
ターゲットとなるブランチ(今回の例ではmaster)に変更をpush/mergeすると、自動的にデプロイパイプライン処理が走ります。
※Deployment Modeを「Manual」にした場合は手動
進行状況はHasura Cloud上で確認でき、[メタデータファイルのパース]、[メタデータ・マイグレーションの適用]、[ヘルスチェック]等のステップに分かれていることがわかります。
もし各段階で何らかの不整合が起こった場合、その時点でのステップで処理は中断されます。失敗の詳細はログに吐かれているので、そこから原因解明するになります。

おわりに
リポジトリ連携設定をしてしまえば簡単にデプロイパイプラインを構築できるため、GitHubでプロジェクト管理している場合のHasuraのCI/CDとして、これからのスタンダードになっていくかなと感じました。かなり便利な機能なので、筆者が業務で使用しているGitLabとも連携してほしいところです。
そして最後に。こちらはまだBeta版の扱いのため、細かな仕様上の問題やバグがあることが予想されます。見つけた場合はissueやdiscussionで報告していきましょう。
