適材適所でクラウドを使い分ける企業が増えている。ここで課題になるのがクラウドごとの違いだ。AWS(アマゾン・ウェブ・サービス)、Google Cloud Platform(GCP)、Microsoft Azureはサービスラインアップが似ているが、用語やサービスの構造、利用できる機能などに差異がある。本連載ではテーマ別に各クラウドの特徴を取り上げ、違いを浮き彫りにしていく。第7回から第9回は、最近注目されている技術である「コンテナ」と「サーバーレス」をテーマに解説する。第7回はMicrosoft Azureを取り上げる。
クラウドを利用してアプリケーションを開発・運用する際に選べるアーキテクチャーとして、以前からよく知られている仮想マシン(VM)以外に、「コンテナ」と「サーバーレス」があります。利用者側から見た場合のこれら3者の最も大きな違いは、下の図に示すように、運用管理をどの範囲までクラウドベンダーに任せるのか、という点にあります。
なお、サーバーレスとは、利用者がサーバーの存在を「意識しなくて済む」ということであり、物理的なサーバーが存在しないというわけではありません。
クラウドが登場したそもそもの動機の1つとして、ホスト管理やパッチ適用といった、ビジネスの差別化につながらない作業は、可能な限りクラウドベンダーに任せてしまおう、というものがあります。上図からわかるように、VM、コンテナ、サーバーレスの順にクラウドベンダーが管理する範囲がより広くなり、逆に、利用者が管理する範囲は狭くなっていきます。そのため、開発者は肝心のアプリケーション開発に、より集中できるようになります。
しかし、サーバーレスは、利用者側の運用管理の負荷を軽減できる一方で、あまり大きなサイズのレスポンスを扱えなかったり、起動時間がかかったり、タイムアウトがあったりと、VMやコンテナに比べると制約が多くなります。そのため、アーキテクチャーを選定する際には、最も制約の多いサーバーレスから始めて、コンテナ、VMの順に実現性を検討していくという流れがお勧めです。
コンテナを選ぶケースとしてはほかに、得意なフレームワークを使いたい、あるいは、既に存在するコンテナを再利用したいケースなどが考えられます。以降では、コンテナおよびサーバーレスがどのようなサービスなのか、Azureはそれぞれでどのような機能を提供しているか、について説明していきます。
コンテナとは何か? VMとはどこが違うのか?
コンテナとはソフトウエアをOS内の独立した環境で実行する仮想化技術です。ランタイム、ライブラリ、アプリケーション、依存関係をパッケージ化して、「コンテナランタイム」上で実行する形になります。VMとの違いとしては、軽量でコンパクトである点、カーネルを共有するため隔離性が低い点が挙げられます。
上記のコンテナの構造から得られる特徴として、次のようなことが挙げられます。
- 同じイメージをどこでも動かせる(可搬性が高い)
- 容易に環境をリリースしたり、破棄したりできる(柔軟性が高い)
- OSをロードする必要がないので、高速起動する
- オーバーヘッドが少ないので、資源効率が良い
コンテナのユースケースとしては、DevOps(CI/CD:継続的インテグレーション/継続的デリバリー)、マイクロサービス、ジョブ実行、機械学習などが知られています。
代表的なコンテナランタイムとしては、「Docker https://www.docker.com/ 」、「containerd https://containerd.io/ 」、「runc https://github.com/opencontainers/ 」、「gVisor https://github.com/google/gvisor/ 」、「Kata Containers https://katacontainers.io/ 」などがあります。