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