日立のOSSへの取り組みを支えるOSSソリューションセンタとは
デジタルシステムやサービスの開発において、OSSを活用したいが、正しい活用をするのはなかなか難しい。このような課題を抱えている開発現場も多い。日立ではこのような課題を解決し、日立が展開するさまざまな事業分野にOSSを活用するため、OSS活動を積極的に行っている。
1つはOSSへの貢献活動だ。「OSSコミュニティに参画し、パッチの投稿や不具合やバグのフィードバックをするなどOSSの開発を実施しているほか、調査・検証という点では、OSSをユーザー視点で利用し、OSSの調査、検証を実施しています。また普及・促進という点では、コミュニティの運営やイベント企画、Web発信などを行っています。これらの活動を通して、エンタープライズから組み込み、社会インフラ系まで幅広い分野で、OSSの技術発展や普及に貢献しています」(茂木氏)
この幅広い分野でOSSを活用できることが、「日立の特徴」と茂木氏は言う。日立は金融や公共、通信、産業・流通、電力・鉄道、ヘルスケアといったさまざまな分野でOSSを活用しており、特に金融や公共の基幹システムにOSSを導入するという実績も持つ。
このようなOSSによる日立グループのビジネス貢献というミッションを掲げて、活動しているのが、茂木氏の所属するOSSソリューションセンタである。OSSソリューションセンタの活動は大きく「サービス」「プロセス」「コミュニティ」に分かれる。
第一のサービスでは、OSSの活用ノウハウやサポート・ソリューションの提供を通して、案件対応や事業化を支援。OSS人財の育成も含まれる。第二のプロセスは、OSSを安心して事業で活用するためのインフラやガイドの提供を行う。「例えば社内のプロセス改革や、OSSを扱う上で避けては通れないライセンスなど、コンプライアンス関連の情報提供も行います」(茂木氏)
第三のコミュニティとは、先述したOSSコミュニティに参加して貢献するほか、標準化活動に取り組んでいる。
日立ではお客さまにOSSのメリットを最大化してもらえるよう、次のOSS関連サービスを提供している。例えば、「適切なOSSを選定の仕方がわからない」「ライセンスをどう扱えばいいのかわからない」といった悩みには、コンサルティングサービスやツール群を提供。
「高可用システムを構築するためのシステム全体のパラメータ設計がわかるか不安」という悩みに対しては、安定稼働や長期運用に向けた設計・構築を支援するOSSプロフェッショナルサービスを提供。「脆弱性の情報をどこから入手すればよいのかわからない。問題が発生したときに、自力で解決できるか不安」という悩みには、事例やノウハウの提供やソースコードの中身まで確認する調査を行う、OSSサポートサービスを提供している。
例えば、API管理基盤導入サービスもその一例だ。認可サーバーにRed Hat Single Sign-On(SSO)、APIゲートウェイにNGINX Plusを用いることで、安全にAPIを公開できるサービスである。
このように日立グループにおいてOSSの積極的な活用を支援しているOSSソリューションセンタ。同センタで茂木氏は主に日々登場する新しいOSSから社会インフラを支える技術を探すため、調査・探索に携わっている。その調査・探索のポイントは、大きく3つある。
第一のポイントは安定して利用できる技術であること。「商用・コミュニティのサポートが受けられるかどうかを確認します」と茂木氏は話す。第二のポイントはコミュニティの活性度で、開発が活発に行われているか、Issueがどれくらい上がっており、そのうちどのくらい解決されているかなどから判断している。第三のポイントはライセンス。ビジネスで利用できるライセンスなのかというところもチェックが必要だ。
日立が注目する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を活用した案件などで相談したいことがあれば、ぜひ私たちに問い合わせてください」(茂木氏)