日立が注目する2つのOSS「Kuma」と「Hasura」
このようなポイントから茂木氏が最近注目しているOSSが、サービスメッシュ「Kuma」とGraphQLエンジン「Hasura」である。
Kumaは、APIゲートウェイで有名なKong社が公開したOSS。名前は日本語のクマ(クマ)から取られており、CNCF(Cloud Native Computing Foundation)のサンドボックスプロジェクトに採用されている。最新バージョンは1.4.1、GitHubのスター数は2.5K、Apacheライセンスは2.0である。
サービスメッシュとは、サービス間の通信を代替するソフトウェアやそのパターンを表すものだ。「サイドカープロキシをサービスの横に配置することで、サービス間の通信を抽象化し、各サービス間の通信を一元的に管理できるようになります」(茂木氏)
Kumaの特徴は、ユニバーサルモードを搭載していること。一般的なサービスメッシュはKubernetes環境で動作することが一般的だが、このユニバーサルモードを搭載していることで、「Kubernetes環境以外のVMやDockerでも動作させることができますし、KubernetesとVMのマルチゾーンという構成も可能です」と茂木氏は話す。
また、Kumaは配布されているバイナリーを実行してコントロールプレーンに登録すれば、セットアップが完了するという使い勝手の簡単さも特徴と言える。機能もシンプルで、ポリシーと呼ばれるさまざまな機能はyamlファイルで管理。「必要な機能はほぼそろっているが、複雑な機能はなく、最小限の機能セットとなっています」と茂木氏は説明する。
日立では、このKumaをどのように使おうとしているのか。その例として最初に茂木氏が挙げたのが「mTLS」である。mTLSを手作業で行うとCAの構築や鍵・証明書の配布、定期的な更新、有効期限の管理など、面倒な作業が多数ある。だが、KumaのmTLS機能を使えば、コントロールプレーンに対してmTLSを有効化するだけで、サービスに対して証明書の配布や有効期限の更新などが自動化される。セキュリティ面でも有用に活用できる。
第二の活用例が、トラフィックパーミッション機能を活用して、サービス間の通信を管理し、外部からの攻撃など意図しない通信を遮断するというもの。この機能を使えば、特定の外部サービスのみ通信可能にすることもできる。
第三の活用例が既存のサービスへのオブザーバビリティの付与。一般的にオブザーバビリティを実施するには、アプリケーションに手を加えることが必要になるが、サービスメッシュを入れれば、メトリクスやログなどの情報が可視化できるようになる。「一般的に利用されているPrometheusやLoki、Jaegerにサービスメッシュからデータを送り、それをGrafanaのダッシュボードに表示するという仕組みを、アプリケーションを改修することなく追加することができます」(茂木氏)
KumaではGrafanaのプラグインも開発されているので、容易にオブザーバビリティを実現できる。
次に茂木氏が注目OSSとして挙げたのが、「Hasura」である。HasuraはGraphQLエンジンで、DBMSからGraphQL APIを作成する機能も有している。現在、世界でもかなり注目度が高まっているOSSだ。また、Hasuraは「Hasura Cloud」というSaaS版も提供されている。Hasuraの最新バージョンは2.2.0。GitHubのスター数は25.5K。Apacheライセンスは2.0である。
GraphQLとは、APIのためのクエリー言語。一般的なAPIとは異なり、リクエストを投げて、それに合わせてレスポンスを作成するという仕組みになっている。GraphQLを使うメリットは、クライアント側が本当に必要な情報のみを指定して情報を取得するため、通信量を削減できることだ。
Hasuraの一番の特徴は、DBMSを簡単にGraphQL化できること。DBMSを接続すると、そのDBMSスキーマから自動でGraphQLスキーマを作成してくれる。また、複数のデータベースのリレーションも設定可能。また、ActionsやRemote Schemasという機能が提供されていることも特徴だ。これにより、RESTやGraphQLなどのほかのAPIとの接続が可能になっている。さらに、EventやScheduled Triggersという機能が提供されていることで、GraphQLを通じて得たデータが変更されたりすると、Webhookで通知してくれる。
日立では、Hasuraを次のような場面で活用しようとしている。最初に茂木氏が挙げたのは、DBMSをREST APIとして公開する場面での活用。APIゲートウェイとの組み合わせることで、簡単にDBMSに入っているREST Endpointが公開可能になる。APIゲートウェイを通じてREST APIのリクエストを受けると、HasuraのREST Endpointに対応したGraphQLのクエリーを作成し、それを基にHasuraがデータベースからデータを取得。さらにそのデータを基にレスポンスを作成することができるようになる。
「この構成にするメリットは、REST APIのレスポンス内容を増やしたい場合に、アプリケーションの内容を更新することなく、Hasuraの設定だけですむようになること」と茂木氏は語る。また、Kong社のソリューションでもRESTからGraphQLに変換する機能が提供されており、Hasuraを使わずに同様の構成を作ることができる。
第二のHasura活用場面として茂木氏が挙げたのが、JSON Web Token(JWT)を使ったアクセス制御である。Keycloakとの連携により、JWTのロールを使ってAPIへのアクセスを制御する。「しかもJWTを受け取った後に、テーブル単位や行単位、列単位など細かくアクセス制御を設定できるのも特徴です」(茂木氏)
最後に茂木氏が紹介したのが、3ファクターアプリケーション(3factor app)というアーキテクチャである。このアーキテクチャはGraphQLとサーバレスファンクションを組み合わせることで、スケーラブルなシステムを構築できるようになる。
「GraphQLのAPIを通じて、データベースが変更されると、Hasuraの機能によりWebフックが発行されます。各サーバレスファンクションがWebhookを受けると、プロセスを開始して、その処理した結果をデータベースに再度格納することができます」(茂木氏)
GraphQLにはSubscribeという、情報に変更があった際に通知を受け取る機能が提供されており、それを使うことで、画面の表示を変えるということもできる。また、この3factor appはサーバレスファンクション部分をステートレスに設計すれば、全体の性能を上げることもできるようになる。
「お客さまのビジネスを支えるソリューションを提供するため、常に新しい技術をアップデートしています。OSSに関する質問やOSSを活用した案件などで相談したいことがあれば、ぜひ私たちに問い合わせてください」(茂木氏)