しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Hack Azure! #8 - Azure Container Apps の使いドコロを探る! フォローアップ

秋の Ignite 2021 で Azure Container Apps がリリースされ、Azure Serverless の大注目サービスとして盛り上げていきたいので Hack Azure! #8 としてトニーさんをゲストに迎えて喋りまくりました。

個人的には Azure Spring Cloud のように Kubernetes を足回りに使いつつも、API は全く別物というマネージドサービスを期待していたのもあり、Container Apps はかなり印象が良いです。

リリースされたばかりのプレビューなサービスなので、当然ながら今すぐに本番開発に使えるようなレベルではなく、今後の機能追加に期待という感じではありますが、明らかに筋は良いので AKS を使う機会はさらに減るかなと思っています。

配信中に出た会話のまとめを簡単に以下に書いておきました。

定期的にアップデートは行われると思うので、継続的にウォッチしながら大きな機能が出たタイミングなどで話が出来ればよいなと思っています。当然ながら GA した時には盛大に何かやりたいです。

Twitter まとめと YouTube アーカイブ

いつも通りではありますが、Twitter のまとめと YouTube での配信アーカイブは既に公開されています。ツイートに関しては YouTube アーカイブにも表示されているので同時に楽しめます。

例によって一度締めた後にさらに深い話をしだすという Hack Azure 仕草が全開でした。

Container Apps の基本情報

Azure Container Apps の基本的な情報は公式ドキュメントがプレビューにしては充実しているので、まずはこっちを一通り読んでおけばハマることはないでしょう。

リリースの時に書いたエントリもあるので、もし興味があれば読んでください。

App Service と同じチームが作ったフルマネージドサービスなので、感覚としては同じように使えます。AKS の面倒で複雑な部分を全て隠して、開発に集中できるようになっているのが最大の特徴です。

Container Apps と既存サービスの比較

既存の Azure Functions や Web Apps との使い分けですが、公式ドキュメントにも説明が追加されているので読んでおくとよいです。配信でもこの辺りは今後重要になるので、長めに喋っていたはずです。

とはいえ、まずは Azure Functions / Web Apps を優先して考えていくことには変わりません。

Container Apps は AKS よりも簡単にアプリケーション開発と運用が行えますが、それでもそれなりの複雑さを導入することになります。アーキテクチャ設計時に使える道具が増えたのは喜ばしいです。

Custom VNET / Managed Identity / Custom Domain

配信の中で VNET 統合や Managed Identity を使いたいという話は出ましたが、一応これらはロードマップには載っているらしいのでいつかは対応されるようです。

Custom Domain もロードマップに入っていますが、External の Ingress をそのままインターネットに出して良いのかは、正直なところ内部の実装が分からない限り判断しにくいです。

結局は配信中にデモしましたが Front Door などを置く形に落ち着きそうな予感です。Custom VNET の対応がどのようになるか次第ですが、Private Endpoint 経由での接続に対応する可能性もありますね。

Container Apps の Secret 管理

若干突貫工事感のあった Secret 管理ですが、Container App レベルで Secret を追加しても Container から参照可能にはならず、別途環境変数として secretref で参照する必要があるようです。

サンプルを見ても Secret は全て小文字だったので大文字は使えないようですが、環境変数は大文字が使えるので若干混乱します。Container Apps 単位で Secret を個別定義はやりたくないので、Key Vault とリンクできるようになってほしいです。

Revision Management とトラフィック分割

App Service でいうところの Deployment Slot に相当するのが Revision Management ですが、こちらは事前に作っておく必要なく新しいコンテナーのデプロイの度に自動で生成されます。

これを利用して Blue-Green Deployment を実装出来ます。詳しくはトニーさんのブログを参照してください。

Revision 名が自動生成なので CI に乗せる場合には配信でも話しましたが、上手く CLI を使って一つ前の Revision 名を取得しておく必要があるのが少し面倒です。将来的にはデプロイ用の GitHub Action などでいい感じにやってほしいです。

後は配信中にデモを行ったトラフィック分割ですが、ドキュメントを確認しても Session Affinity などの記載はなかったので、今は単純にランダムで割り振られているだけの気がします。

これだと A/B テストは行えないので、一応 Session Affinity への対応は Issue で上げておきました。

Azure Functions を利用したイベントベース処理

Container Apps では Dapr の Binding を使ったイベントベースの処理が行えます。Azure Functions の Trigger と同じような処理なので、簡単に理解できると思います。

個人的に目から鱗だったのが Azure Functions の Custom Docker Image を使って、Container Apps で Azure Functions の機能を使ってしまうというトニーさんの記事でした。

Azure Functions Core Tools には Kubernetes 向けのデプロイコマンドが用意されているので、将来的には Container Apps へのデプロイも行えるようになるのかもしれません。生の AKS で使うよりは Container Apps で動かした方が圧倒的に便利だと思います。

システムが提供するサイドカーの課金はどうなっているのか問題

Container Apps は複数の Container を動かすことが出来ますが、Dapr のサイドカーや Managed Identity に対応した場合にはこれもサイドカーとして動くと思うので、これらのシステムが暗黙的に実行するコンテナーの課金がどうなるのか気になっています。

もしかしたらシステムが実行するサイドカーは無料なのかもしれませんが、パッと見はドキュメントに記載は無さそうでした。どこかで聞いてみようかと思います。