Azure と AWS の コンテナレジストリの主要な違いを個人的に比較

コンテナレジストリは、コンテナイメージを保管する場所です。

Azure には Azure Container Registry(以降、Azure ACR と表記)、AWS には Amazon Elastic Container Registry(以降、Amazon ECR と表記)があります。

Azure ACR には Basic/Standard/Premium の SKU があります。

## 機能面の比較

| 項目                               | Azure ACR  | Amazon ECR        |
| ---------------------------------- | ---------- | ----------------- |
| SLA                                | 99.9%[^3]  | 99.9%[^1]         |
| 耐久性                             | (記載なし) | 99.999999999%[^2] |
| コンテナオーケストレーターとの統合 | ○(AKS)[^4] | ○(ECS, EKS)[^2]   |
| 暗号化                             | ○[^5]      | ○[^2]             |
| パブリックリポジトリのキャッシュ   | ○[^6]      | ○[^7]             |

Azure ACR は耐久性の記載が見つかりませんでした。Premium SKU であれば可用性ゾーンや Geo レプリケーションが使用できます。

https://learn.microsoft.com/ja-jp/azure/container-registry/container-registry-skus#service-tier-features-and-limits

Azure のコンテナオーケストレーターは AKS の他に Azure Service Fabric がありますが、こちらは Azure ACR との統合の仕組みは無さそうで、下記ドキュメントに沿って設定することになるようです。

https://learn.microsoft.com/ja-jp/azure/service-fabric/configure-container-repository-credentials

[^1]: https://aws.amazon.com/jp/ecr/sla/
[^2]: https://aws.amazon.com/jp/ecr/features/
[^3]: https://www.microsoft.com/licensing/docs/view/Service-Level-Agreements-SLA-for-Online-Services?lang=1
[^4]: https://learn.microsoft.com/ja-jp/azure/aks/cluster-container-registry-integration
[^5]: https://learn.microsoft.com/ja-jp/azure/container-registry/container-registry-storage
[^6]: https://learn.microsoft.com/ja-jp/azure/container-registry/container-registry-artifact-cache
[^7]: https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/pull-through-cache.html

## 性能面の比較

### 帯域幅とリクエスト数制限

Azure ACR は下記に記載がありました。

https://learn.microsoft.com/ja-jp/azure/container-registry/container-registry-skus#service-tier-features-and-limits

ダウンロード、アップロード共に帯域幅や 1 分あたりの操作数は SKU によって異なります。

リクエスト数については 1 分あたりの ReadOps / 1 分あたりの WriteOps という記載があり、分あたりの性能であることがポイントに思いました。

また下記の記載があるので、制限値ではなく「最小推定値」とのことです。

> ReadOps、WriteOps、および "帯域幅" は最小推定値です。 Azure Container Registry は、使用状況で必要とするパフォーマンスの向上に努めます。 ダウンロードを高速化するには、両方のリソース、ACR、デバイスが同じリージョンに存在する必要があります。

Amazon ECR は帯域幅の記載は見つけられませんでした。
リクエスト数については、下記のクォータに記載の制限があります。

https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/service-quotas.html

リージョン単位のクォータで、秒あたりの制限であることがポイントに思いました。

### レイヤーの最大サイズ

Azure ACR の場合、 SKU によらず 200 GiB が最大となっています。

https://learn.microsoft.com/ja-jp/azure/container-registry/container-registry-skus#service-tier-features-and-limits

Amazon ECR の場合、 52,000 MiB ( 約 50 GiB ) が最大となっています。

https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/service-quotas.html

## 料金の違い

料金は変動する可能性があるので注意が必要ですが重要な要素です。

Azure ACR は SKU によって固定料金があり、日額で Basic が`$0.167`、Standard が `$0.667`、Premium が `$1.667` となっています。
つまり月額だと、30 日換算なら Basic が`$5.01`、Standard が `$20.01`、Premium が `$50.01` となりますね。

https://azure.microsoft.com/ja-jp/pricing/details/container-registry/

この中に付属するストレージがあり、Basic が 10 GB, Standard: 100 GB, Premium: 500 GB までは固定料金に含まれます。
超過分は日額で 1GB あたり `$0.00334` の従量課金となります。
月額だと、30 日換算なら `$0.1002` ですね。
別途、Azure 共通の帯域幅に対するネットワーク料金がかかります。

これに対して Amazon ECR の場合はストレージとネットワーク料金の従量課金です。

https://aws.amazon.com/jp/ecr/pricing/

パブリックリポジトリの場合は 50 GB/月のストレージを常時無料で利用できるとのことです。

ストレージ料金は月額で GB あたり `$0.10` です。