Azureのコンテナサービスを調べてみた

## 目的
Azure のコンテナに関するサービスは複数あり、各サービスの特徴や利用目的を調べた結果を共有します。

## Azure のコンテナに関するサービス
2024年10月時点のコンテナに関するサービスとしては、MSドキュメントで以下が紹介されています。

| サービス | 主な利用目的 |
| --- | --- |
| [Azure Container Apps](https://azure.microsoft.com/ja-jp/services/container-apps/) | サーバーレス コンテナを使用してモダンなアプリとマイクロサービスの構築とデプロイを行う。 |
| [Azure App Service (Web App for Containers)](https://azure.microsoft.com/ja-jp/services/app-service/containers/) | コンテナ化された Web アプリを Windows および Linux で実行する。 |
| [Azure Container Instances](https://azure.microsoft.com/ja-jp/services/container-instances/) | ハイパーバイザーの分離を使用してコンテナを起動する。 |
| [Azure Kubernetes Service (AKS)](https://azure.microsoft.com/ja-jp/services/kubernetes-service/) | マネージド Kubernetes でコンテナのデプロイとスケーリングを行う。 |
| [Azure Functions](https://azure.microsoft.com/ja-jp/services/functions/) | エンドツーエンドの開発環境でイベントドリブン型のサーバーレス コードを実行する。 |
| [Azure Red Hat OpenShift](https://azure.microsoft.com/ja-jp/services/openshift/) | マネージド Red Hat OpenShift でコンテナのデプロイとスケーリングを行う。 |
| [Azure Spring Apps](https://azure.microsoft.com/ja-jp/products/spring-apps/) | マネージド Spring アプリを Kubernetes の必要なくコンテナのデプロイとスケーリングを行う。 |
| [Azure Service Fabric](https://azure.microsoft.com/ja-jp/services/service-fabric/) | 常時稼働していてスケーラブルな分散型アプリをデプロイおよび運用する。 |
| [Azure Container Registry](https://azure.microsoft.com/ja-jp/services/container-registry/) | コンテナ イメージと成果物の構築、保存、保護、レプリケートを行う。 |

※参考にしたMSドキュメント
* [Azure コンテナ - サービスと管理](https://azure.microsoft.com/ja-jp/products/category/containers)
* [Azure Spring Apps](https://azure.microsoft.com/ja-jp/products/spring-apps/)

## Azure のコンテナのデプロイに関するサービスの特徴

### [Azure Container Apps](https://learn.microsoft.com/ja-jp/azure/container-apps/compare-options#azure-container-apps)
* マネージドなコンテナランタイム。マイクロサービスやコンテナベースのアプリケーションを、サーバーレスな環境で自動スケーリングとともにデプロイ可能。
* Kubernetesベースで、 Dapr、 KEDA、 envoyなどのオープンソースのテクノロジが利用されている。
* Kubernetes API への直接アクセスは提供されない。

### [Azure App Service (Web App for Containers)](https://learn.microsoft.com/ja-jp/azure/container-apps/compare-options#azure-app-service)
* 完全マネージドなPaaSで、コンテナ化されたWebアプリを簡単にデプロイ可能。
* インフラ管理を最小限にし、AzureのCI/CD統合とオートスケーリング機能を提供。

### [Azure Container Instances](https://learn.microsoft.com/ja-jp/azure/container-apps/compare-options#azure-container-instances)
* シンプルでスケーラブルなコンテナランタイム。
* VMの管理なしで単一コンテナを素早くデプロイ可能。小規模なアプリケーションやテスト環境に適しているが、高度なオーケストレーションはない。
* オンデマンドで Hyper-V 分離コンテナの単一ポッドが提供される。

### [Azure Kubernetes Service (AKS)](https://learn.microsoft.com/ja-jp/azure/container-apps/compare-options#azure-kubernetes-service)
* マネージドなKubernetesクラスター。コンテナオーケストレーションが可能で、複雑なマイクロサービスやコンテナベースのアプリケーションに適している。
* フルコントロールとカスタマイズが可能だが、より高度な運用管理が必要。
* Kubernetes API を利用できる。

### [Azure Functions](https://learn.microsoft.com/ja-jp/azure/container-apps/compare-options#azure-functions)
* サーバーレスなFaaS（Function as a Service）。
* イベント駆動型で、コードを関数単位で実行可能。
* 小さなタスクやイベント処理に適しているが、コンテナを直接管理するには不向き。
* Azure Functions のプログラミング モデルは基本コンテナ イメージとして使用でき、他のコンテナ ベースのコンピューティング プラットフォームに移植可能。

### [Azure Spring Apps](https://learn.microsoft.com/ja-jp/azure/container-apps/compare-options#azure-spring-apps)
* Spring Bootアプリケーションに特化したマネージドサービス。
* コンテナ化されたJavaアプリケーションのデプロイに適しており、マイクロサービスアーキテクチャとの統合が容易。
* 包括的な監視と診断、構成管理、サービス検出、CI/CD 統合、ブルー/グリーン デプロイなどを使用して、ライフサイクルを管理できる。

### [Azure Red Hat OpenShift](https://learn.microsoft.com/ja-jp/azure/container-apps/compare-options#azure-red-hat-openshift)
* OpenShift（Kubernetesベース）のマネージドサービス。
* 高度なセキュリティ、CI/CDパイプライン、エンタープライズ環境に最適化されたデプロイ機能を提供。
* 独自のレジストリ、ネットワーク、ストレージ、CI/CD ソリューションを選択できる。
* 大規模なエンタープライズアプリケーションに適している。

### [Azure Service Fabric](https://learn.microsoft.com/ja-jp/azure/service-fabric/)
* マイクロサービスやコンテナベースのアプリケーションをホストするための分散システムプラットフォーム。
* 状態管理されたサービスやアプリケーションを効率的に実行でき、複雑なアーキテクチャに適している。
* Azure 以外にも Windows Server、Linux のオンプレミスや他のパブリック クラウドなど、Service Fabric クラスターは任意の場所に作成できる。

## Webアプリのコンテナ デプロイにおける比較
### サーバーレス / マネージドサービス
| サービス名 | 特徴 | 強み | 適しているユースケース |
|---|---|---|---|
| Azure Container Apps | サーバーレス、スケーラビリティ、オートスケーリング | サーバーレスで手軽にコンテナをデプロイ、オートスケーリングでコスト最適化 | イベントドリブンなマイクロサービス、小規模から中規模のWebアプリ、実験的なアプリ |
| Azure App Service (Web App for Containers) | パスの管理、カスタムドメイン、CI/CD統合 | 簡単な設定でコンテナをデプロイ、PaaSの利便性 | Webアプリの迅速なデプロイ、既存のWebアプリのコンテナ化、カスタムドメインが必要な場合 |
| Azure Functions | イベントドリブン、サーバーレス、スケーラビリティ | 特定の機能を小さなコンテナ単位で実行、コスト効率が高い | APIエンドポイント、バックグラウンドジョブ、IoTイベント処理 |
| Azure Spring Apps | Spring Boot/Spring Cloudベース、エンタープライズJava | Springフレームワークに特化、エンタープライズJavaアプリケーションのデプロイ | Spring Boot/Spring Cloudアプリケーションの迅速なデプロイ、エンタープライズレベルの機能 |

### フルマネージド Kubernetes
| サービス名 | 特徴 | 強み | 適しているユースケース |
|---|---|---|---|
| Azure Kubernetes Service (AKS) | フルマネージドKubernetes、高度なカスタマイズ性 | Kubernetesのフル機能、高度なオーケストレーション | 大規模なコンテナ化されたアプリケーション、複雑なマイクロサービスアーキテクチャ、高度なカスタマイズが必要な場合 |
| Azure Red Hat OpenShift | フルマネージドOpenShift、エンタープライズグレード | OpenShiftのフル機能、エンタープライズ向けのサポート | エンタープライズレベルのコンテナプラットフォーム、既存のRed Hat環境との統合 |

### その他
| サービス名 | 特徴 | 強み | 適しているユースケース |
|---|---|---|---|
| Azure Container Instances | 単一のコンテナ実行、短寿命タスク | コスト効率の良い短期間実行、バッチ処理 | 短期間実行のタスク、ビルドプロセス、テスト環境 |
| Azure Service Fabric | マイクロサービスオーケストレーション、状態管理 | 大規模なマイクロサービスアプリケーション、状態管理が必要な場合 | 大規模な状態を持つマイクロサービス、ゲームバックエンド、IoTアプリケーション |

## 参考
* Azure コンテナ - サービスと管理
  * https://azure.microsoft.com/ja-jp/products/category/containers

* Container Apps と他の Azure コンテナ オプションの比較
  * https://learn.microsoft.com/ja-jp/azure/container-apps/compare-options

* Microsoft Azure コンテナ サービスのドキュメント
  * https://learn.microsoft.com/ja-jp/azure/containers/

* Azure Service Fabric のドキュメント
  * https://learn.microsoft.com/ja-jp/azure/service-fabric/