ROMANCE DAWN for the new world

Microsoft Azure を中心とした技術情報を書いています。

Azure Container Apps の Revision Label を使って Staging の URL を固定する

Azure Container Apps の Revision は、Web Apps の Deployment Slot とは異なり、新しい Docker Image をデプロイするたびに Revision が追加されます。
Revision Label を使うことで、Staging の URL を固定できるかどうか試してみました。
docs.microsoft.com

Container Apps をデプロイする

前回の記事と同様の手順で、Bicep で Container Apps をデプロイします。
gooner.hateblo.jp

Staging へのデプロイを想定し、新しいバージョンをデプロイしました。dapr-frontend--v2 という Revision が追加されました。

新しい Revision には、Container Apps とは別の Revison URL が割り当てられるので、リリース前のテストができます。

この Revision 毎に割り当てられる URL を固定させるため、Revison Label に staging をセットします。

Revision URL とは別に、Label URL が割り当てられます。


Revision を Swap する

Revision の traffic パーセンテージを Swap します。

$ az containerapp ingress traffic set -n dapr-frontend -g <ResourceGroup Name> \
     --revision-weight dapr-frontend--v1=0 latest=100

Swap が完了したら、Revison Label を dapr-frontend--v2 から dapr-frontend--v1 に付け替えます。

最後に、旧バージョンの Revision をシャットダウンします。

$ az containerapp revision deactivate -n dapr-frontend -g <ResourceGroup Name> --revision dapr-frontend--v1

あとは、この繰り返しで。

まとめ

Azure Container Apps の Revision Label を使って Staging の URL を固定してみました。
ひと手間かかりますが、Web Apps の Deployment Slot に近い運用を実現できそうです。

本当は、Azure CLI で Revision Label を追加削除したかったのですが、挙動が怪しかったので Azure Portal を使いました。
具体的には、traffic パーセンテージが 0% の Revison に対して、Revison Label を追加できません。

$ az containerapp revision label add -n dapr-frontend -g <ResourceGroup Name> --label staging --revision dapr-frontend--v2
Please specify a revision name with an associated traffic weight.

GitHub の Issues に報告したところ、次のリリースで修正されるようです。
github.com

// 追記:2022/06/15
Azure CLI の Ver.0.3.6 で修正が完了しました。--no-prompt オプションを指定することで、Revision Label を削除追加せずとも、強制的に付け替えできます。

// Revision Label(staging) を新バージョンにセット
az containerapp revision label add -n dapr-frontend -g <ResourceGroup Name> --label staging --revision dapr-frontend--v2

// スワップ
az containerapp ingress traffic set -n dapr-frontend -g <ResourceGroup Name> --revision-weight dapr-frontend--v1=0 latest=100

// Revision Label(staging) を付け替え
az containerapp revision label add -n dapr-frontend -g <ResourceGroup Name> --label staging --revision dapr-frontend--v1 --no-prompt