👨‍💻

【mNi Cloud】7月~12月の開発状況【国産クラウド】

2025/01/07に公開

はじめに

新年あけましておめでとうございます。mNi Cloud開発チームです。

2024年7月に開発を開始した国産クラウドプラットフォーム「mNi Cloud」は、12月までの半年間で複数の主要機能を実装しました。本記事では、この半年間で開発した機能の詳細と、今後の開発ロードマップについてご紹介いたします。

mNi Cloudとは

mNi Cloudについては以下の記事にまとめてあります。
https://zenn.dev/mnicloud/articles/7144cc817d7aa4

開発した機能

ネットワーク機能 - mNi VPC

クラウドのネットワーク機能として、mNi Virtual Private Cloud (mNi VPC)の開発を行いました。
mNi VPCでは、Geneveプロトコルを利用したオーバレイネットワークを構築し、テナント間のネットワーク分離を実現しています。また、サブネット機能やセキュリティグループ機能も実装しました。

VPCs機能

mNi Cloudでは、Geneveプロトコルを使用したオーバレイネットワークを採用しています。mNi VPCサービスのVPC機能では、独立したVPCを作成することで、他のVPCとのネットワーク接続を論理的に分離できます。これにより、異なるユーザーやアカウント間でのセキュリティを確保しています。

Subnets機能

サブネット機能では、VPC内に任意のCIDRブロックを持つサブネットを作成できます。仮想マシンやコンテナなどのコンピューティングリソースには、このサブネットのCIDRブロックからIPアドレスが割り当てられます。VPC間でネットワークが分離されているため、異なるVPC間でCIDRブロックが重複しても問題なく、ユーザーは自由にCIDRブロックを選択してサブネットを作成できます。

Security Groups機能

セキュリティグループ機能では、仮想マシンやコンテナなどのコンピューティングリソースに対して、インバウンドおよびアウトバウンドの通信ルールを定義できるステートフルファイアウォールを提供します。TCP/UDPポート番号、プロトコル、送信元/送信先IPアドレスの組み合わせでアクセス制御を行うことができ、許可された通信のみを通過させることでサイバー攻撃からリソースを保護します。例えば、サーバーに対してSSH通信(ポート22)のみを許可し、その他の不要な通信を遮断するといった設定が可能です。

External IPs機能

External IP(EIP)機能では、仮想マシンやコンテナなどのコンピューティングリソースに対して、インターネットからアクセス可能なIPアドレスを割り当てることができます。VPC内はGeneveプロトコルによるオーバレイネットワークで構築されているため、物理ネットワーク(アンダーレイネットワーク)とは直接通信できません。そこで、グローバルIPアドレスであるEIPとVPC内のプライベートIPアドレス間でNATを行うことで、インターネットからコンピューティングリソースへのアクセスを実現します。

仮想マシン機能 - mNi VM

クラウドの仮想マシン機能として、mNi Virtual Machine(mNi VM)の開発を行いました。
mNi VMでは、KVMをハイパーバイザーとして採用し、高性能な仮想マシンを提供します。また、仮想マシンのプール管理機能やカスタムイメージの作成機能なども実装しました。

VMs機能

仮想マシン機能(VM機能)では、KVMベースの高性能な仮想マシンを提供しています。クラウド基盤上にあらかじめ用意された仮想マシンイメージを利用することで、OSのインストール作業を省略できます。作成された仮想マシンは、VPCおよびサブネットに所属し、論理的なネットワーク分離を実現します。さらに、Cloud-Initによる初期設定をサポートしており、OSのカスタマイズを自動化することができます。

VMPools機能

仮想マシンプール機能では、VMPool単位で複数の仮想マシンを一元管理できます。VMPoolでは、指定したレプリカ数に基づいて仮想マシンを自動複製することが可能です。さらに、開発中のmNi Load Balancer(mNi LB)やmNi Auto Scaling(mNi AS)機能と連携することで、複数の仮想マシン間での負荷分散や、システム負荷に応じた仮想マシンの自動スケーリングを実現し、高可用性システムを構築できます。

コンテナ機能 - mNi CTR

mNi Cloudでは、仮想マシンに加えてコンテナワークロードを実行できるmNi Container(mNi CTR)を開発しました。コンテナ技術の採用により、アプリケーションの迅速なデプロイと効率的なリソース利用を実現しています。

Containers機能

コンテナ機能ではコンテナをデプロイすることができます。コンテナ作成時には、コンテナ名、VPC、サブネット、セキュリティグループなどのネットワーク設定に加え、使用するコンテナイメージ、CPUやメモリなどのリソース割り当て、ENTRYPOINTやCMD、環境変数、ボリュームマウントなどのコンテナ固有の設定を柔軟に行うことができます。
例えば、NGINXコンテナを1 CPU、100MiBのメモリで起動し、特定のVPCやサブネット内に配置することで、セキュアな実行環境を簡単に構築できます。また、環境変数やボリュームマウントを活用することで、アプリケーション設定の外部化やデータの永続化にも対応しています。

CTRPools機能

コンテナプール機能では、仮想マシンプール機能(VMPool)と同様に、複数のコンテナを単一のプールとして一元管理できます。指定したレプリカ数に基づいてコンテナを自動複製し、サービスの可用性を向上させることができます。また、今後実装予定のmNi Load BalancerやmNi Auto Scaling機能との連携により、コンテナワークロードの負荷分散や自動スケーリングを実現する予定です。

ブロックストレージ機能 - mNi BS

mNi Cloudでは、仮想マシンやコンテナなどのコンピューティングリソースに対して、ブロックストレージサービス「mNi Block Storage(mNi BS)」を提供します。mNi BSでは、ストレージボリュームの作成・管理に加え、既存ボリュームの複製(クローン)機能を実装しており、データのバックアップやテスト環境の構築を効率的に行うことができます。

Web GUI機能 - mNi MC

mNi Cloudでは、直感的な操作が可能なWebコンソール「mNi Management Console(mNi MC)」を提供しています。このWebコンソールを通じて、仮想マシンやコンテナの作成・管理、ネットワーク設定、ストレージの割り当てなど、クラウドリソースの一元管理を実現します。また、モダンなUIデザインの採用により、ユーザーフレンドリーな操作環境を実現しています。

ダークモードや多言語実装にも対応

CLI機能 - mNi CLI

mNi Cloudでは、Webコンソールに加えて、コマンドラインインターフェース「mNi Command Line Console(mNi CLI)」を提供しています。mNi CLIを使用することで、クラウドリソースの作成・管理を自動化したり、スクリプトによる一括処理を実現できます。また、開発者向けのCI/CDパイプラインとの統合も容易に行えます。現在はLinux, Windows, MacOSに対応しています。

C:\Users\mune0>mni
NAME:
   mni - A new cli application

USAGE:
   mni [global options] command [command options]

VERSION:
   v1.1.1

DESCRIPTION:
   CLI client for mNi-Cloud services

COMMANDS:
   login
   vpc
   vm
   bs
   ctr
   help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --debug                (default: false)
   --idp-endpoint value   The endpoint of keycloak (default: "https://auth.mnicloud.jp/") [%MNI_IDP_ENDPOINT%]
   --vpc-endpoint value   The endpoint of mni-vpc service (default: "https://api.mnicloud.jp/vpc") [%MNI_VPC_ENDPOINT%]
   --vm-endpoint value    The endpoint of mni-vm service (default: "https://api.mnicloud.jp/vm") [%MNI_VM_ENDPOINT%]
   --bs-endpoint value    The endpoint of mni-bs service (default: "https://api.mnicloud.jp/bs") [%MNI_BS_ENDPOINT%]
   --ctr-endpoint value   The endpoint of mni-ctr service (default: "https://api.mnicloud.jp/ctr") [%MNI_CTR_ENDPOINT%]
   --auth-endpoint value  The endpoint of mni-auth service (default: "https://api.mnicloud.jp/auth") [%MNI_AUTH_ENDPOINT%]
   --help, -h             show help
   --version, -v          print the version

C:\Users\mune0>
C:\Users\mune0>mni vm vms list
+-------------+---------+---------+------------------------+-----------+---------+
| NAME        | VPC     | SUBNET  | SPEC.IMAGE             | POOL      | STATUS  |
+-------------+---------+---------+------------------------+-----------+---------+
| test        | default | default | mni-cloud/ubuntu-jammy |           | Running |
| test-pool-0 | default | default | mni-cloud/ubuntu-jammy | test-pool | Running |
| test-pool-1 | default | default | mni-cloud/ubuntu-jammy | test-pool | Running |
+-------------+---------+---------+------------------------+-----------+---------+

C:\Users\mune0>
C:\Users\mune0>mni ctr containers get test
+-------------------+----------------------+
| FIELD             | VALUE                |
+-------------------+----------------------+
| Name              | test                 |
| Vpc               | default              |
| Subnet            | default              |
| Spec.Cores        | 1                    |
| Spec.Memory       | 100Mi                |
| Spec.Image        | nginx                |
| Spec.Command      |                      |
| Spec.Args         |                      |
| Spec.Env          |                      |
| Spec.VolumeMounts |                      |
| Pool              |                      |
| IpAddr            | 172.31.0.5           |
| Status            | Running              |
| CreatedAt         | 2025-01-07T01:25:02Z |
+-------------------+----------------------+

その他

認証機能であるmNi Authや料金支払い機能であるmNi Biling and Payment(mNi BAP)なども実装を行いました。

開発中の機能

オートスケール機能 - mNi AS

mNi Auto Scalingは、システムの負荷状況に応じて、仮想マシンやコンテナの数を自動的に増減させる機能を提供します。CPU使用率やメモリ使用量などの監視メトリクスに基づいて、最適なリソース数を維持することで、コストの最適化とサービスの安定性を両立します。VMPoolやCTRPoolと連携することで、システムの需要変動に対して柔軟な対応が可能です。また、時間帯やスケジュールに応じた自動スケーリングルールの設定にも対応しています。

ロードバランサ機能 - mNi LB

mNi Load Balancerは、複数の仮想マシンやコンテナに対して、トラフィックを最適に分散する機能を提供します。L4(TCP/UDP)およびL7(HTTP/HTTPS)レベルでの負荷分散に対応し、高可用性と耐障害性を実現します。セッション維持(Session Persistence)機能や、ヘルスチェックによる障害検知、SSLターミネーションなどの機能も実装しています。また、Auto Scaling機能と連携することで、負荷に応じた動的なスケーリングと負荷分散を実現できます。

サーバレス機能 - mNi FNC

mNi Cloudでは、サーバーの管理や運用を必要としないサーバレスコンピューティング環境「mNi Function」を提供します。開発者は関数(Function)単位でアプリケーションコードをデプロイでき、実行時のみリソースが消費される効率的な実行環境を実現します。サポート言語として、Python、Node.js、Goなどの主要なプログラミング言語に対応し、mNi EVTと連携することで、マイクロサービスアーキテクチャの構築が可能です。

イベント実行機能 - mNi EVT

mNi Eventは、クラウド内でのイベント駆動型アーキテクチャを実現するサービスです。様々なサービス(ストレージ、コンテナ、Functions等)からのイベントを検知し、指定されたアクションを自動実行することができます。例えば、特定の時間でのFunctionの実行や、ストレージへのファイル追加をトリガーとしたコンテナの起動など、システムの自動化を柔軟に構築できます。

例1:HTTPリクエストがあった場合にコンテナ(mNi CTR)をスケーリングする(0→1)
使用mNiサービス:mNi LB, mNi AS, mNi CTR

例2:mNi VMのvmsのステータスがStoppedになったら、mNi FNCの関数を実行し、VMを起動する(万が一VMが停止した場合、自動的に起動するような要件)
使用mNiサービス:mNi EVT, mNi AS, mNi FNC, mNi VM

IAM機能 - mNi IAM

mNi IAMは、クラウドリソースへのアクセス制御を統合的に管理するサービスです。ユーザー管理、権限管理、認証・認可の一元化を実現し、セキュアなクラウド環境の構築を支援します。

その他

mNi Cloudは、Kubernetesをベースとしたクラウド基盤プラットフォームとして設計されています。パブリッククラウドサービスとしての提供に加え、お客様のプライベート環境での導入や、OSSとしての展開も計画しています。これらの展開をスムーズに行うため、Kubernetes Operatorの開発やインストーラの整備を進めており、環境に依存しない一貫した導入・運用体験の実現を目指しています。

開発の振り返り

mNi Cloudの開発開始から半年が経過し、当初の想定を上回るペースで機能実装を進めることができました。特に、クラウドの基幹機能となるVPC、仮想マシン、コンテナ環境の基盤構築を完了し、これらが自社開発のインフラストラクチャとソフトウェアスタック上で動作していることは、大きな技術的マイルストーンとなりました。

また、開発期間の半年間で、フロントエンドとバックエンドの両面において大規模なアーキテクチャ刷新を実施しました。現在のmNi開発チームは2名体制で、フロントエンドとバックエンドをそれぞれ1名が担当しています。開発開始時は両メンバーとも未経験の技術領域が多く(特にバックエンドエンジニアはGo言語が初経験)、試行錯誤しながらの開発でした。
しかし、初期の実装における課題に直面し、双方でリファクタリングを決断しました。

フロントエンドでは:

  • 当初のシングルアプリケーション構成から、Turborepoを活用したMonorepo構成へ移行
  • マイクロフロントエンドアーキテクチャの採用
  • UIフレームワークをAnt Designからshadcn/uiへ刷新

これらの改善により、アプリケーションのパフォーマンスが向上し、新規サービスの追加が容易になりました。

バックエンドでは:

  • クリーンアーキテクチャの原則に基づいたディレクトリ構成の整備
  • コード設計の標準化と品質向上
  • 将来の開発チーム拡大を見据えた保守性の高い実装

これらのリファクタリングにより、今後の機能拡張やチーム規模の拡大にも柔軟に対応できる基盤を確立することができました。

今後の展望

機能について

現在開発中のmNi Function(mNi FNC)とmNi Event(mNi EVT)の完成を第一のマイルストーンとして設定しています。これらの機能により、コードに集中できるサーバーレスコンピューティング環境を実現し、モダンなクラウドプラットフォームとしての機能を強化します。

第二のマイルストーンとして、セキュリティ、監視、バックアップなど、ユーザーがクラウドを安全かつ安定的に利用するために不可欠な機能の開発を予定しています。

具体的には以下のサービスを計画しています:

  • Webアプリケーションファイアウォール機能「mNi Web Application Firewall(mNi WAF)」
  • クラウドリソース監視機能「mNi Monitor(mNi MON)」
  • ユーザー操作の証跡管理機能「mNi Audit(mNi AUD)」
  • データ保護のためのバックアップ機能「mNi Backup(mNi BAK)」

さらに、高度なセキュリティ要件に対応するため、Confidential Containers(CoCo)の採用を計画しています。Confidential Containersを実装することで、TEE(Trusted Execution Environment)を活用した機密性の高いコンテナ実行環境を提供し、データやワークロードの保護を強化します。これにより、個人情報など、より厳格なセキュリティが求められるワークロードにも対応可能となります。

また、Kubernetesをベースとしたプラットフォームの特性を活かし、プライベートクラウドやオープンソースソフトウェアとしての展開を見据えた開発も進めています。特にKubernetes Operatorやインストーラの開発に注力し、様々な環境での展開を容易にすることを目指しています。

イベントについて

EXPOやカンファレンスでの展示・発表を通じて、mNi Cloudの技術的特徴や開発における知見を広く共有していきたいと考えております。
また、当社が定期的に開催している勉強会では、mNi Cloud上に環境を構築し、参加者の皆様に実際の操作を体験していただくことを計画しています。この実践的な取り組みにより、mNi Cloudの使用感や性能を直接体験いただけるとともに、ユーザーの皆様からの貴重なフィードバックを得ることができると考えています。

おわりに

mNi Cloudの開発開始から半年が経過し、基幹機能の実装からアーキテクチャの刷新まで、当初の想定を上回るペースで開発を進めることができました。現在、2名という小規模な開発チームながら、Kubernetesをベースとした拡張性の高いプラットフォームの構築に成功し、今後の機能拡充に向けた強固な基盤を確立できました。

今後は、サーバーレス機能(mNi FNC、mNi EVT)の実装を第一のマイルストーンとし、続いてセキュリティ関連機能(mNi WAF、mNi MON、mNi AUD、mNi BAK)の開発を進めてまいります。さらに、Confidential Containersの採用により、より高度なセキュリティ要件にも対応していく予定です。

また、エキスポ展示や技術発表、実践的な勉強会の開催を通じて、mNi Cloudの特徴や利点を広く共有していくとともに、ユーザーの皆様からのフィードバックを製品開発に活かしてまいります。パブリッククラウドとしてのサービス提供に加え、プライベートクラウドやオープンソースソフトウェアとしての展開も視野に入れ、様々な利用シーンに対応できる柔軟なクラウドプラットフォームを目指してまいります。

国産クラウドプラットフォームとして、日本のクラウド技術の発展に貢献できるよう、継続的な改善と機能拡張に取り組んでまいりますので、引き続きmNi Cloudにご期待ください。

Discussion