安全に動作するクラウドアプリケーションを開発するための必須要件! コンテナへのディープダイブ第1部:主要概念の詳細解説

April 11, 2024

コンテナのディープダイブ Part 1: キーコンセプトの探求

こんにちは、Samです。アプリケーションの動作環境は、そのアプリケーションの使用目的によって、サーバー、PC(Windows、Mac)、モバイル(Android、iOS)、ゲーム機、IoTデバイスなど多様です。その動作環境を理解してこそ、安全に正常動作するアプリケーションを開発することができます。

CHEQUERが開発しているQueryPie(クエリパイ)は、クラウドベースのアプリケーションであり、動作環境に対する高い理解を基に、クラウド環境で様々なデータソースおよびサーバーへのアクセス制御を提供しています。本記事からは、クラウドアプリケーション( QueryPie製品 ) が動作する環境である「コンテナ」について、もう少し詳しく説明します。

クラウド

コンテナについて本格的に取り上げる前に、クラウドという用語について確認し、関連する主要な概念について紹介します。

まず、クラウドという言葉の起源には、様々な説があります。例えば、アプリケーションがどこにデプロイされたのかわからないという意味で「雲(クラウド)の向こう側のどこかにある」というGoogleの開発者たちの会話から由来したという説があります。一方で、米国国立標準技術研究所(NIST)では、クラウドを「共用の構成可能なコンピューティングリソースの集積に、どこからでも、簡単に、必要に応じて、ネットワーク経由でアクセスすることを可能とするモデル」と定義しています。ここで言うコンピューティングリソースとは、サーバー、ネットワーク、ストレージ、アプリケーションなどを意味します。まるで硬貨を入れるとコーラやサイダーなどの飲みたい飲料を提供してくれる自動販売機のように、必要なときにリクエストするだけでサーバーやアプリケーションなどのリソースをすぐに提供してもらえる環境が、まさにクラウドです。

これら一連の活動がどのようにして可能になったのでしょうか。以前はサーバー機器を発注して受け取るまでに数日から数ヶ月かかることもありました。以下で説明する「仮想化」技術にその答えがあります。

Virtualization

仮想化

「仮想化」の辞書的な意味は「not real」、つまり実際ではないものを意味します。コンピューティング環境では、実際ではないハードウェア環境、すなわち偽の(not real)ハードウェア環境を作り出す技術を指します。仮想化にはハイパーバイザー仮想化、コンテナ仮想化、ネットワーク仮想化など様々な種類があります。

ハイパーバイザーは一台の物理サーバーで複数のオペレーティングシステム(OS)を実行できるソフトウェアで、「ハードウェア」を仮想化します。まるでゲームセンターのゲームをPCで実行するときに使用するエミュレーターに似ています。ハイパーバイザーで実行された仮想のOSを仮想マシンと呼びます。仮想マシンは、まるで独立したサーバーのように、CPU、メモリ、ネットワーク、ディスクなどの物理サーバーのハードウェアリソースを割り当てて提供されます。

コンテナはアプリケーションが独立した空間にあるかのように「実行環境」を仮想化します。この独立した空間は他のアプリケーションからの干渉を受けないだけでなく、特定のサーバーの環境的な影響を受けないため、一貫した動作環境を提供できます。「パッケージング」と「隔離された実行」という特徴のため、様々なサーバー環境へのデプロイも容易です。これに関連する詳細は今後の連載記事でじっくりと取り上げます。

ネットワークは、仮想ネットワークを通じて抽象化することで、限られた物理アドレスという制約を解消し、物理IPの使用による多くの依存的な構成を、仮想ネットワーク経由でシンプルで柔軟にします。ネットワーク仮想化も、近いうちに連載記事でより詳しく説明します。

Application Programming Interface

API

自動販売機の操作に必要な材料が硬貨であれば、クラウドにはAPI(Application Programming Interface)が存在します。APIは、サーバー、ネットワーク、アプリケーションなどの仮想化されたリソースを提供するためのインターフェースです。APIはリソースの要求と制御方法を標準化し、リソースの提供のためのインフラストラクチャを定義します。同時に、細部の実装は隠すことで、合意されたインターフェースの範囲内で多様な実装が可能となり、必要に応じて交替して使用することができます。

特にAPIは、YAML、JSONなどの仕様でラップされ、目的に応じて様々なリソースを提供するAPIが仕様内に組み合わされることができます。OpenStackやKubernetesなどのオーケストレーションツールも、様々なクラウドコンポーネントを制御するための一種の作業指示書として仕様を使用し、これを通じてコンピューティングリソースの割り当て、仮想ネットワークの構成、コンテナのデプロイ、オートスケーリングなどの様々な作業が自動化されます。

Docker(ドッカー)

ドッカーは、コンテナを指す一般名詞のように広く使用されています。コンテナに関する会話をしていると、ドッカーコンテナ、ドッカーイメージ、ドッカーライズなど、自然にドッカーという言葉を付けて呼んでいます。実際にドッカーは、コンテナに関連する製品を開発する会社の名前です。コンテナを世界に広めて注目を浴びたドッカーは、コンテナを扱うツールやプラットフォームを開発している企業です。現在は、ドッカー以外にもPodman、ContainerD、rkt、CRI-Oなど、コンテナを扱う様々な製品があります。

Kubernetes (K8S)

Kubernetesは、一般にコンテナの「オーケストレーション」ツールとして紹介されます。先に、コンテナはQueryPieを含むクラウドアプリケーションが実行される独立した空間であると説明しました。それでは「オーケストレーション」とは何を意味するのでしょうか。

オーケストレーションは、コンテナを、目的と必要に応じて設定し、適切なクラスターやサーバーに配置した後、その設定と配置が全体的に問題がないかをモニタリングし、特定の状況でスケールアウトなどの自動化を提供する一連のプロセスを意味します。

Kubernetesを使用すると、人の介入を最小限に抑えながらアプリケーションのデプロイなどの運用管理の大部分を自動化できます。KubernetesはGoogleで最初に開発されました。2014年当時Googleはborg(Kubernetesの以前の名称)を利用して毎週20億以上のコンテナをデプロイおよび運用していたと言われています。

今回の記事はクラウドに関連する主要な概念について見てきました。次回では、この知識を基にして、クラウド環境でQueryPieアプリケーションが動作するコンテナについてより詳しく紹介したいと思います。

次回の投稿も多くのご関心、ご支援をよろしくお願いします。