はじめに
皆様こんにちは。ACS事業部の亀崎です。
皆さんはAzure環境にコンテナ化したアプリケーションを実行する場合どの環境を選択しますか?
Azureの公式ドキュメントではこのように紹介されています。
(1)Azureコンピューティングサービス全体からの選択
(2)Azureコンテナサービスからの選択
いくつかの選択肢はあれど、最終的には概ね「ACA(Azure Container Apps)」にするか、「AKS(Azure Kubernetes Service)」にするか、 どちらにしようか、となるケースが多いのではないでしょうか。
では、この両者のうちのどちらを選択するのか。ここがまさに難しい判断のところではないかと思います。 Azureのドキュメントにも記載されている通り「トレードオフ」の部分でもあります。
そこで今回は「私が考える」(Microsoftや弊社が考える公式な見解ではない)両者の良い点と課題を挙げながら、最終的にどちらに軍配をあげるのかをご紹介させていただこうと思います。
利点と課題
Azure Container Apps
まずはAzure Container Apps(ACA)についてです。
ACAの利点
ACAの利点といえばやはり第一に挙げられるのは「インフラストラクチャを直接管理しなくてよい」マネージドなコンテナ実行環境である、 ということだと思います。ACAの機能はKubernetesに準じたものとなっています。Kubernetesのフルマネージドサービスと言ってもいいのかもしれません。ご存知のとおりKubernetesは現在でも活発に開発が継続されているものであり、概ね年に3回のアップデートがあります。このような環境を自身で運用していくとなるとそれなりの負荷となります。 ACAはこの部分をAzure側で完全自動で行うため、利用者はほぼ意識する必要はありません。小規模の開発チームで実行環境とアプリケーションの双方を運用しなければならない場合、この点は最重要ポイントになるでしょう。
もう1つACAを利用する利点は、Kubernetesとの類似性です。ACAにはKEDAやDaprといったKubernetesでも利用されるOSSが組み込まれています。これらの運用もフルマネージドとなっています。利用者はまさに「利用」するだけでよい。Kubernetesで比較的一般的な技術要素と同じ(ないしは類似)のものを利用できるということは、システム設計の際にも同じように適用することができる(独自にすべてを考える必要はない)ということになります。
運用の手間がかなり削減されること、コンテナアプリケーションの世界で標準的・一般的な技術要素・設計が活用できる、というのは相当の認知負荷低減につながると思います。
ACAの課題
続いてACAの課題です。これは良くも悪くも「フルマネージドサービス」であることではないかと思います。フルマネージドサービスになるがためにさまざまな制約があります。例えばKubernetesであれば、世界中で開発されている様々なOSSを利用することができます。そのインストールは KubectlやHelmなどを使うことになり、それらを前提としたOSSのシステム構成となっています。しかし、ACAはこうしたツールは用意されていません。簡単なサービスであれば、それらの内容を独自に解析してACA用のインストール手順を作り上げることができるかもしれませんが、それ自体がとても認知負荷が高いものとなりますし、OSSのアップデートに追従していくだけでも相当苦労すると思います。 ACAでは、OSSミドルウェアなどは基本的にACA以外の外部サービスで用意し、それらを活用することが求められます。ACAで実行できるのは自身が開発するアプリケーションが原則となります。
そして、もう1つ。これはOSS利用の課題とも言えるのですが、アプリケーションのデプロイの方法に制約があるということです。 たとえばKubernetesはArgoCDなどを使ったGitOpsを行っているところも多いかと思います。その延長でCanary Deployなど高度なデプロイ手法を実現しているところもあると思います。こうした手法は世界中で検討・検証されたものを活用できるのがOSSの利点ですが、ACAの場合はこうしたツールも利用できません。ACA用に用意されたデプロイ手法・APIのみが利用できます。もしCanary Deployを実現したい、となった場合は同じようなACA利用者が公開しているものを活用するか、自身でなにかしらの方法を開発する必要があります。そしてKubernetesとの絶対的なユーザー数の違いからどうしても後者(独自で開発する)となることが多いのが実情ではないでしょうか。
まとめると世界中に多数ある有用なOSSをフルに活用できない点がACAの課題になります。
Azure Kubernetes Service
では、Azure Kubernetes Service (AKS)を見ていきましょう。実は多くはACAの利点と課題の裏返しになると思っています。
AKSの利点
AKSの最大の利点は、Kubernetesという世界中で利用されているサービスのAzure版であるということになると思います。つまり、その知見はAzureだけではなく、AWSやGoogle、Oracleなど他のCloud Providerを利用している世界中の開発者と共有できるということです。
ACAでは利用できなかったOSSもAKSではほぼ自由に利用可能です。世界中の先進的なシステムで採用されているシステム構成がご自身でも利用できます。多くのドキュメントも公開されていますし、困ったときにはコミュニティで聞くなどすると回答が得られることも多々あります。これはシステム開発するものにとっての大きな認知負荷低減効果を生むのではないでしょうか。また、独自開発をする部分を大幅に減らせることができるというのは開発投資を減らせるという金銭的効果も大きいと思います。
そしてある課題を解決する選択肢も複数存在するというのも、大きいのではないでしょうか。同じようなOSSでも実は細かいところに差異があるものです。そうした差異は自身が抱える課題にピッタリあうかどうかのポイントにもなり得ます。選択肢が少ないと、課題に合わないものを無理に利用することになり、かえってシステム構成が複雑化して後々の技術的負債にもなり得ます。選択肢があるということはこうした技術的負債の低減にもなります。
AKSの課題
対してAKSの課題は、良くも悪くも「選択肢の自由さ、自由度の高さ」にあるのかなと思います。選択肢は多数ありますが、何を最終的に選択するかは利用する側の責任です。また、OSSの利用も「利用は自身の責任においておこなう」ことになります。リスクは自身に返ってきます。 また、運用負荷というのも課題になるものと思います。さきほど紹介した通り、Kubernetesは活発な開発が続けられており、アップデートも年に数回実施されます。こうしたアップデートへの追従も自己責任となります。もちろんAzureでもAKSのクラスター自動アップデートや「AKS Automatic」といった機能で、運用負荷を低減する取り組みも行われているため、かなりの部分の負荷低減はできると思います。サポートについても「AKSの長期サポート」といったオプションが用意されているため、安心できる部分もあります。 しかし、運用負荷という点だけでいえばACAのほうが負荷が低いと言えるでしょう。
【Azure】ACAか、AKSか
ACAとAKSの利点と課題を見てきましたが、「じゃあ、どちらを選ぶんだ??」と。
これは完全に個人的な見解ですが、私個人は「AKS」を推したいと思います。
実はACAが登場した数年前は「ACA」が主軸になるのかな、と考えていました。しかしAKS、ACA両方を使い、最近ではBackstageを両環境で利用できるようにするといったことを行う中で、やはり「AKS」がベターな選択肢だ、ということになりました。
まず考えたのは運用負荷です。
運用負荷はACAに比べてAKSのほうが高いように思います。しかし、アップデートという点においてはAzureも様々な取り組みをしており、その低減が年々進化しています。実際にBackstageの検証等でAKSを利用していますが、いまのところ「AKSの運用負荷辛い」とまでは感じていません。ときおり、自身の責任において解決しなければならない問題が出てきますが、ネット情報等で概ね解決できており、今後の進化を考えるとAKSのACAに対するビハインドは次第に小さくなるものと考えています。
次に(どちらかといえばこちらが大きい要素ですが)選択肢や自由度の点です。 今後、今以上にMicroserviceなどが発展していくことを考えた場合、さまざまなOSSなどを自由に使えるというのは大きな利点です。世界中の発展もそうしたOSSの活用を前提としている部分があり、これが使えないことそのものが大きな課題となり得ます。つまり、OSSの採用などシステム設計上の制約があると、今後やりたいことが実現できない、または実現が遅くなってしまう、余計な開発投資がかかってしまうというリスクが大きくなると感じています。 この自由度に関する点はAKSの課題を補って余りある部分ではないかと思っています。
ただし、短期的な用途や、小規模なWebアプリケーションを独立した環境で用意したい、まず簡単にはじめたい、という場合はACAを選択してもいいかなと思っています。将来はAKSに移行する可能性もある程度イメージしつつ、一定の制限の中でぱぱっとシステムを立ち上げ、軽量に運用していくことを想定しているならばACAは最良の選択肢であると思います。
まとめ
「ACAか、AKSか、それが問題だ」とのタイトルにしましたが、今の私自身のファーストチョイスは「AKS」となっています。
とはいえ、最後に「ACAもあるよね」とした通り、やはり「トレードオフ」な部分はどうしても残ります。ここはそれぞれの利用者の環境や求められるもので変わってくるものだろうとも思いますので、私自身のファーストチョイスが皆さんのファーストチョイスとは限らないでしょう。
それでも今回のこの比較が、今後のなにかの参考になれば幸いです。
最後に宣伝です。弊社ACS事業部では、Cloud Nativeシステムにまつわる様々なサービスを提供しています。
上記のようなコンテナ実行環境に関するご相談などもお請けしております。ぜひご相談ください。