APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

Azureのコンテナ系PaaS徹底比較

はじめに

こんにちは、ACS事業部の髙井です。

いきなりですが、AzureにはいろんなPaaSがありますね。Azureも12周年を迎え、いろんな経緯でいろんなサービスがあります。
使い慣れている人にとっては選択肢が多くて便利なことは間違いないのですが、これからAzureを触ろうとする人にとっては「正直いろいろありすぎてなんもワカラン」という状態でもあると思います。

そこで、MS Ignite 2022が終わって大きな更新情報も落ち着くこのタイミングで、コンテナ系のAzure PaaSの比較情報をまとめておこうという魂胆です。

初心者向け結論:迷ったらACAがオススメ

アプリケーションのコンテナは手元にある、でもAzureについてはよくワカラン……

これは私の独断と偏見ですが、そんな人にはとりあえず

ACA(Azure Container Apps)がオススメです。

理由は「考えるべきことが少ない」、これに尽きます。理由はこれから述べていきます。

経験者向け

総論だけじゃなくちゃんと項目ごとに比較したいという方に向けて比較表もご用意しました。

Web App Functions App ACI ACA AKS
コンテナ以外のデプロイ手法 ZIPデプロイ、Gitデプロイ等(ネイティブサポート言語のみ) 一部のネイティブサポート言語に加えカスタムハンドラーにより別言語にも対応
コンテナ利用時のプラン制約 なし(F1でも可能) 従量課金プラン不可(PremiumもしくはApp Service Planが必須) なし なし なし
Windowsコンテナ 対応 対応 対応
マルチコンテナ docker-compose(プレビュー)
App Serviceの機能制限あり
docker-composeの機能制限あり
・Yamlテンプレート
・ARMテンプレート
・docker-compose(機能制約あり)
対応 対応
0へのスケーリング ✖(スケーリング自体に非対応) 対応 △(Userプールのみ0までスケーリング可能、cluster全体の停止オプションは別途あり)
目的 連続起動 エフェメラルだが、コンテナ含む従量課金プラン対象外の機能利用時の課金は連続的
「すべての Premium プランには、常に 1 つ以上のアクティブな (課金された) インスタンスがあります。」
連続起動・エフェメラル(連続起動すると同一条件のWeb App for Containersより高くなりがち) 連続起動・エフェメラル(連続起動時はACIより高額) 連続起動・エフェメラル
実行時間制限 なし 従量課金:最大10min
Premium:規定30min、 設定により無制限(60min保証)
無制限 無制限 無制限
Kubernetes △(Kubernetesが内部で動いているがユーザーはKubernetes APIにアクセスできない) 対応
課金単位 1時間あたり 1秒あたり(従量課金プラン) 1時間あたり 1秒あたり 1時間あたり
無料枠 無料プランあり 従量課金プランのみ
40万GB秒
100万回の実行
なし 18万vCPU秒
36万GiB秒
200万リクエスト
なし
料金 Free
Basic: 約2,000円/月
Std: 約12,000円/月
Prem: 約13,000円/月
Premium: 常時稼働インスタンス1台のみで約26,000円/月 RAM: 約600円/月・GiB
vCPU: 約5300円/月
別途GPUコンテナーあり
RAM: 約1,100円/月・GiB
vCPU: 約9,000円/月
アイドル時は割引料金
1番安いStandard B2sを1台で運用してもVMSSだけで約6,000円/月
Web App Functions App ACI ACA AKS

コンテナ系Azure PaaSの選択肢

さて、Azureでコンテナアプリケーションをデプロイしようと思ったらどんな選択肢があるのでしょうか。

  この記事で比較するもの  

……多いですね。

しかも、これらはあくまで大枠のサービス名でして、その中にどんな方式でデプロイするかなど選択肢が無数にあります。

ちなみに、Web AppsとAzure Functionsについてはコンテナ以外の選択肢も内包しているので、厳密にコンテナ部分に該当するのは以下の2つになります。

さらに上記で挙げていないサービスもいくつかありますが、これらは記事のコンセプト上、割愛しています。

  扱わないもの 

Azure IaaS
PaaSがテーマのため取り扱いません
Azure Spring Apps (ASA)
Java Spring専用のため扱いません
Azure Redhat OpenShift (ARO)
エンタープライズ向けで高価なため扱いません

これだけの選択肢があると、判断するための情報収集で力尽きてしまっても不思議ではありません。

そこで、今回は以下の3つのポイントについてACAをオススメする理由を述べていこうと思います。

  • 料金体系
  • 機能と起動時間
  • 必要となる周辺知識の多寡

料金体系

まず、なにが大事かって料金ですよね。超絶お手軽便利なサービスだったとしても毎月10万円かかるなら個人ではおいそれと使えません。

その点、ACAには無料枠があります。つまり、気軽にお試しで実験的にデプロイして大丈夫です。これは大きい。

もちろんWeb AppsもF1というFreeのSKUがありますが、こちらは有料のプランに比べて機能的な制約事項も大きいです。機能的な区別なく無料枠が付いてくるACAに軍配があがるでしょう。

他にも以下のような利点があります。

  • インスタンスが0までスケールできるので、利用時以外は料金が発生しない
  • 最低インスタンス数を1以上にした場合でもアイドル状態は単価が安くなる

一方で、Web Appsはサービスがデプロイされている間、たとえリクエストが来ていなくても料金が発生します。
AKSもスケーリング可能だとはいえ同じように起動時間ベースで料金が発生します。

Azure Functionsには従量課金プランがありますが、コンテナを使う場合は基本的にPremiumプランという最低限1インスタンスの料金を払う必要のあるプランにしなければならず、高額になります。
上記Premiumプランを避ける場合にApp Serivce Plan上でFunctionsを動かすプランもあったりしますが、ただデプロイするだけでも「どの方式でデプロイすればいいか難しい」という状態になります。その点、ACAなら1種類しかないのでデプロイするだけでOKです。

ACAが料金面で不利になるケース

ACAが料金的に問題になるのは、本当に常時稼働状態になるようなケースです。無料枠やアイドル料金があるとはいえ、純粋にアクティブ時の時間単価はACIの2倍くらいに設定されています。
長時間のバッチ処理をガンガン回すといった用途の場合には単価の安いACIなどを検討してもよいかもしれません。

機能と起動時間

さきほど挙げたようにACIは長時間のバッチ処理に適したサービスです。一方でWebアプリケーションのホスト環境としては機能面に乏しくなります。

Azure Functionsは機能が充実していますが、フル機能を使うのに高額なプランが必須であったり、従量課金プランでは実行時間制限が10分であったりと利用シーンに制限がかかります。

その点、ACAは必要十分の機能が提供されており、実行時間制限はありません。なんといってもベースのアーキテクチャはKubertenesです。
そして、Kubernetesを理解していなくても使えるようにきれいに隠蔽されています。

まさしく初心者から本格的なマイクロサービス構成までACAのみで対応できます。

ただしWindowsコンテナには非対応のため、利用したい場合はWeb AppsやAKSを選択することになります。

必要となる周辺知識の多寡

必要となる周辺知識の多寡は、いざ試してみるときにダイレクトに効いてきます。

  自信を持って答えられますか? 

  • Web Appsで閉域接続したいとき、Freeプランでホストしてよいでしょうか?
  • App Service Planとはなんでしょうか?
  • App Service Environmentとはなんでしょうか?
  • Web App for ContainersはApp Serviceとは違うのでしょうか?
  • Web AppsとApp Serviceは違うものなのでしょうか?
  • Azure FunctionsのPremiumプランと専用プランは同じものでしょうか?
  • Azure FunctionsのElastic PremiumとPreimumプランは違うものでしょうか?
  • 専用プランとApp Service Planは違うものでしょうか?
  • ACIバーストとはなんでしょうか?
  • AKSを使いたい場合、Kubernetes自体の知識はあるでしょうか?

App Serviceは開発者向けのサービスで、インフラのことを考えなくてもフルセットでアプリケーションをデプロイできるように工夫されています。

ただ、長い歴史により機能や選択肢がとにかく多いです。そのぶん痒いところに手が届くのですが、膨大な選択肢に圧倒される可能性も大きいです。

どれだけ1本道でデプロイまでこぎつけられるかということを考えると、ACAは非常に優れています。

①Container Apps Environmentを作って
②そのなかにContainer Appsを作る

これだけで終わりです。 CI/CDもほぼボタンひとつで設定できます。

もし、設定に困ってもAPC技術ブログにGitHub ActionsとAzure DevOps両方のパターンの手順が紹介されています。

techblog.ap-com.co.jp

techblog.ap-com.co.jp

おわりに

以上、独断と偏見でACAがいかにオススメかを書いてみました。

もちろん、長時間バッチにACIを使ったり、Functionsでバインド拡張機能を使って他のAzureサービスとシームレスに連携したり、他のサービスには他のサービスなりの利点はあります。
ただ、そのあたりを使いたくなるのはやはりAzureにそれなりに詳しくなってきた人だと思います。

起動時間に制限がなく、課金も1秒単位でエフェメラルにも使えて、無料枠もつくACAは、Azure PaaSデビューにもってこい、個人の開発者としては第一の選択肢としてよいでしょう。

と、ここまで事業部の意向もなにも気にせず勝手に書きましたので、怒られないように申し添えておきます。

もし弊社のご支援で提案にACA以外が出てきてもご容赦ください。 あくまで総論です。総合評価で初心者でも、個人でも、万人向けのブログでオススメするなら、です。

ということで今後もACAに関するブログを投稿しようと思います。髙井先生の次回作にご期待ください。

本記事の投稿者: 髙井 比文
AKSをメインにしたインフラとアプリの領域際をご支援することが多いです。Azureは11冠です。
Hifumi Takai - Credly