サーバーレスとコンテナは両者を一緒に使うのがベストプラクティスだ

コンテナに収めたソフトウェアを継続的デリバリ方式で使用するクラウドネイティブモデルは、ランタイムにクラウドベンダーがワークロードを動かすために必要なだけの量のリソースを生成するサーバーレスコンピューティングを利用すると、なお一層有利だ。大手のクラウドベンダーはこのことを知っていて、すでにそのインフラストラクチャを抽象化して隠すプロダクトを作っているが、利点はあるにもかかわらず、どんな状況でも有効とは言えないようだ。

クラウドネイティブは、簡単に言うと、コンテナ化したアプリケーションとKubernetesを使って、ソフトウェアをマイクロサービスと呼ばれる小さなパッケージで配布する。これによってデベロッパーは、継続的デリバリ方式により、ソフトウェアを迅速かつ効率的に配布できる。クラウドネイティブの世界では、コードを開発するのは一度だけ、そしてそれを、オンプレミスでも、どんなパブリッククラウドでもそのまま動かせることが理想だ。

一方サーバーレスは、やや間違った名前だ。このモデルでもコードはサーバーが動かすが、しかしそれは専用の仮想マシンではなく、クラウドのベンダーがワークロードを動かすためにつねに適正な量と時間だけ提供するコンピューティングリソースだ。

万能の完全解はない

このような方式は継続的デリバリモデルによく合ってるようだし、ベンダーもそのことを知っているが、しかしあるエンジニアの言葉を借りれば、そのプロセスは相当複雑であり、また、すべての状況に通用する1つの完全なソリューションはない。

Googleでプロダクト管理を担当しているArpana Sinha氏によれば、Kubernetesのコミュニティはサーバーレスという考え方を本当は歓迎しているのだが、その現在の実装形式に制約がある。つまりAWS LambdaやGoogle Cloud Functions、MicrosoftのAzure Functionsなど現在のの実装形式はいずれも、ファンクションという形式だ。

「ファンクションというコンセプトは制約のあるコンセプトだ。サーバーレスといえばファンクションしか連想しない今の状況は、不幸だ」、と彼女は言う。

彼女によると、Googleはその定義の拡張をトライした。「デベロッパーにとってサーバーレスとは、コーディングからデプロイまでを彼らがシームレスに行い、それ以降のことはすべてインフラストラクチャが面倒見てくれること。黙っていても自分のコードが、インフラストラクチャの適切でもっとも自己回復力のある部分へ確実にデプロイされることだ。必要なリソースは自動的に確保されるからスケーリングも自動化され、スケールダウンも必要に応じて自動的に行われるから無駄な出費がない」と彼女は説明した。

しかしAtlassianのKubernetesチームの上級エンジニアであるMatt Whittington氏に言わせると、理論的にはそれで良くても、実際には完全に自動化されたインフラストラクチャでは現実に合わない場合がある。「デベロッパーがコーディングだけに集中できるからサーバーレスはある種のワークロードにとっては理想的だが、でも完全なソリューションではない。インフラを自分でチューニングしなければならない場合もある」、と彼は言う。

彼によると、ベンダーに完全に任せっきりにできるのは、各コンテナの要求をベンダーに対して指定する方法があるときのみだ。たとえば、コンテナのロードタイムの上限下限をベンダーに指定できるだろうか。ある種のコンテナは時間を食うし、また特定の位置へのデリバリが必要かもしれない。彼によると、実際には完全な自動化はできないし、とくにデベロッパーが設定をいじくって過不足のないリソースが得られるようにしたいときは、自動ではなく手作業になる。

ベンダーも新たな解を提供

これらの問題ではベンダーもツールの提供を始めている。例えばGoogleが先月のGoogle Cloud Nextで発表したサービスGoogle Cloud Runは、オープンソースのKnativeプロジェクトをベースとし、コンテナを動かしているデベロッパーにサーバーレスの長所を結びつける。これと同様のサービスに、AWS FargateAzure Container Instancesがあり、どちらもやはり2つの技術を1つのパッケージにまとめようとしている。

というかMicrosoftのパートナー事業マネージャーのGabe Monroy氏によると、Azure Container Instancesは、この問題をファンクション型のプログラミング方式に依存せずに解決することが狙いだ。「Azure Container Instancesを使うと、コンテナをAzureのコンピュートファブリックの上で直接動かせる。仮想マシンや、ハイパーバイザーによる隔離、秒単位の課金などはない。私たちはそれをサーバーレスコンテナと呼んでいる」と彼は語る。

サーバーレスとコンテナは相性がとても良いように思えるが、でもMonroy氏が指摘するのは、クラウドネイティブの技術には、すべてに通用する唯一の方式はない、ということだ。AWS LambdaやAzure Functionsのようなファンクション型のサーバーレスを今後も使い続けたい人もいれば、コンテナに移行して二つの技術を一体化したい者もいる。しかしいずれにしても、デベロッパーのニーズが変わっていくにつれて、オープンソースのコミュニティとベンダーの両方が、それらのニーズを助けるツールを提供していかなければならない。サーバーレスとコンテナの一体化も、そんな例のひとつだ。

関連記事: いまさら聞けないコンテナ入門

画像クレジット: Ron Miller/TechCrunch

[原文へ]
(翻訳:iwatani、a.k.a. hiwa