見出し画像

ガバメントクラウドにおけるモダン化の意味と定義

デジタル庁ガバメントクラウドチーム
町田 宏介(クラウドマイグレーションユニット/クラウドアーキテクト)

デジタル庁ではガバメントクラウドの整備を行い、迅速、柔軟、セキュアでコスト効率の高いシステム構築を行える基盤を、国・地方・独立行政法人等に向け提供を行っています。

ガバメントクラウドは、「デジタルの活用により、一人ひとりのニーズに合ったサービスを選ぶことができ、多様な幸せが実現できる社会」の実現に貢献するため、データの安全な連携を可能とし、ニーズに合わせて柔軟に対応できる情報システムを実現する共通基盤を目指しています。

上記を実現するためには、新しい技術を活用し、システムの価値を高める必要があります。一方、公共情報システムには安定性も求められます。そのため、ガバメントクラウドでは最先端の実験的な技術ではなく、ある程度一般化した新しい技術を活用する方針を採っています。これを「モダン化」と呼び、その具体的な内容を以降で説明します。

システムの「モダン化」にはさまざまな実現方法が考えられると思いますが、2025年現在のガバメントクラウドにおけるモダン化について1つの目指すべき方向として以降で記載する5つを定義しました。ここでの定義以外の「モダン化」のあり方についても今後議論していければと思います。

モダン化の定義 概要

ガバメントクラウドでは2025年現在、以下の5つを「モダン化」として定義しています。

  1. APIベースのシステム構成

  2. ステートレスなアーキテクチャ

  3. マネージドサービスの活用

  4. 運用のコード化、自動化

  5. サービスレベルの定義、計測

1と2は「アーキテクチャのモダン化」、4と5は「運用のモダン化」に関わることです。3はアーキテクチャのモダン化、運用のモダン化双方に関わります。

1. APIベースのシステム構成

あるサービスを構成するシステム間を疎結合化して、APIベースでデータ連携します。

具体的には以下のようなアーキテクチャとします。

非同期処理とする

非同期処理とは、複数のシステムが互いの処理完了を待たずに、それぞれが独立して処理を進める方式です。

一方のシステムで処理に時間がかかる場合でも、呼び出し元は待機せずに、次の処理を継続できます。処理が完了しなかった場合に備えて、APIの呼び出しを一度終了させてリトライすることも必要です。

フロントエンド・バックエンドアーキテクチャ

フロントエンドはUI/UXに責任を持ち、バックエンドはデータ管理に責任を持ちます。それぞれの役割を明確に分けて、フロントエンドとバックエンドはAPIで連携します。

このようなアーキテクチャにし、フロントエンドとバックエンドを疎結合化することで、開発やデプロイを独立して実施できます。これによって機能改善など開発速度が向上します。

バッチ処理をイベントドリブン化する

オンプレミスはコンピューティングリソースに限りがあることから、オンライン業務の負荷が低い夜間にまとめて処理する夜間バッチが多く用いられています。一方、クラウドのコンピューティングリソースはオンプレミスと比べて遥かに多くありますので、大量処理に備えたリソース平準化のための夜間バッチの必要性はありません。

また、夜間バッチはエラーハンドリングが複雑になることが多く、かつ翌朝までに処理が終わらないと翌日のオンライン業務に支障が出るので、年に数回起こるか起こらないかの障害対応のためにオペレーターが監視し続ける必要があります。

そこで、イベントドリブンなバッチ処理アーキテクチャにすれば、APIでリクエストを受け付けたことをトリガーにバックエンドのアプリケーションが処理することで処理がシンプルになり、リトライやエラーハンドリングが容易になります。

ある時点のデータで一括処理が必要でもあり、夜間バッチを完全になくすことはできませんが、イベントドリブンアーキテクチャを実現することで、常に最新データでサービスを提供できるので、ユーザー体験の向上も見込めます。

2. ステートレスなアーキテクチャ

ステートレスとは、状態(ステート)を保持しない(レス)ことです。ステートレスなアーキテクチャによって、同じシステムを構成するどのサーバで処理しても同じ結果を返すことができます。

ステートレスなアーキテクチャにすることによって、以下のようにコンテナやオートスケールを活用できます。

コンテナを活用する

コンテナはソフトウェアのバイナリだけでなく、ライブラリなどの実行環境を含めてパッケージングする技術です。環境変数はコンテナ起動時に渡すことで、コンテナ自体はステートレスなアーキテクチャにします。

また、アプリケーションのバージョンアップやパッチ適用などが必要な場合は、コンテナイメージを再ビルドして作り直します。

オートスケールを活用する

コンテナやインスタンスをステートレスにすることで、稼働済みのコンテナやインスタンスとは独立して追加、削除できます。よって、負荷や事前に設定したスケジュールに応じてコンテナやインスタンスを自動的に増減させるオートスケールを活用できます。

ステートレスなアーキテクチャにし、コンテナやオートスケールを活用することで、コストの最適化もできます。逆に、ステート”フル”なままのアプリケーションのコンテナ化は、コンテナの価値を十分に活かせていないと言えます。

3. マネージドサービスの活用

クラウドにはビルトインされたマネージドサービスが多く用意されています。仮想マシンにログインして監視サーバやデータベースなどを構築するのではなく、予め用意されたマネージドサービスを目的に応じて活用することで構築や運用が容易になります。

作らない

監視機能・ログ管理機能・バックアップ機能・セキュリティ機能などの非機能要件に関わるものや、データベースはマネージドサービスで構築します。

共有ストレージをオブジェクトストレージ化する

アプリケーションサーバから使用する共有ストレージやファイルサーバは、NFSファイルサーバをそのままクラウドサービスに置き換えると、一般的には高価かつ密結合になってしまいます。

共有ストレージをオブジェクトストレージに置き換え、APIベースで連携することで、疎結合かつ安価にできます。

また、マネージドサービスは一般的にリクエスト数やデータ量などの使用量に応じた課金のため、仮想マシンなどのリソース確保型のサービスよりも低コストになります。

4. 運用のコード化、自動化

手作業はミスが多くなります。ミスを防ぐために手順書を作成し、ダブルチェックしながらコマンドなどを実行している場合もあります。

しかし、これでは根本的な解決にはなりませんし、何より運用負荷が大きいです。そのため、定型作業は手順書ではなく、コード化することが重要です。コード化することで、自動化も容易になります。

インフラ管理をIaC(Infrastructure as Code)化する

クラウドのコンソールやコマンド操作ではなく、インフラをコードとして管理し、変更もコードで管理します。

定型作業を自動化する

ステートレスなアーキテクチャにし、マネージドサービスを活用することでコード化が容易となり、手作業をなくし自動化できます。

本番環境にログインしない

コード化、自動化することで、人が本番環境に直接アクセスすることを避け、全ての操作を自動化やツールを通じて間接的に運用するZero Touch Productionを実現できます。

ただし、万が一に備えて非常時のログイン経路は残す必要があります。

自動化し手作業をなくすことで、セキュアに運用できます。また、本番環境へのログイン経路が限られることで監査の対象が絞られるので、監査対応の面でもメリットがあります。

5. サービスレベルの定義、計測

クラウドは構成の変更やインスタンスの追加、削除が容易なことから、オンプレミスと違ってサービスイン後も継続的に変えていくことがベストプラクティスになります。

そのために、システムが提供する価値をKPIとして定義し、継続的に改善する取り組みが必要になります。

定義 → 計測 → 振り返り → 改善 のサイクルを回し、改善の結果、必要に応じて定義を見直すことも必要です。

このサイクルを回すために、月次の稼働報告書を作るのではなく、ダッシュボードで可視化し、常に最新の情報をステークホルダーが確認できるようにします。

リファレンスアーキテクチャやノウハウとしての共有

今回はガバメントクラウドにおけるモダン化の定義をご紹介しました。

これらの定義を、ガバメントクラウドを利用する公共情報システムで実現することで、レガシーなシステムからの脱却と効率的なシステム運用に繋がると考えます。

また、デジタル庁自身が「モダン化」を実践する中で得たノウハウは、リファレンスアーキテクチャやサンプルテンプレートなどに取り入れることで、ガバメントクラウド利用者に還元していきたいと考えています。


デジタル庁Techブログの記事一覧は以下のリンクをご覧ください


ピックアップされています

デジタル庁Techブログ

  • 38本

#エンジニア 系記事まとめ

  • 1,263本

ガバメントクラウドと標準化|実務者のためのnote集

  • 49本

後で読む

  • 1本
ガバメントクラウドにおけるモダン化の意味と定義|デジタル庁
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1