APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

Azure Container Appsを試してみた

f:id:tarutaru_pyorne:20211111142443p:plain

はじめに

ACSG土居です。
我々の部署ではAzureにフォーカスをあてクラウドネイティブ関連の技術を追求しお客様をサポートしていきます。 その一環としてAzureに関して日々ブログで技術紹介していきますので宜しくお願いします。

先日より始まったMicrosoft Ignite 2021で発表されたAzure Container AppsのPortalを触ってみました。

Azure Container Appsとは

Azure Container AppsはAzureでコンテナをホストできるサービスになります。
Azureでは既にコンテナを利用できる代表的なServiceとして

  • Azure Container Instance
  • Web App for Container(App Service)
  • Azure Kubernetes Service

がありますが、ここにもう一つサービスが加わることになります。 サーバレスコンテナサービスという事で、AWSですとApp Runner、GCPですとCloud Runに近い位置付けになっています。
後述しますが、HTTPトラフィックの制御、リビジョン管理、継続的デプロイ、イベントトリガー、Daprなど使いやすい機能ばかり揃っています。 Web App for Container(App Service)よりも手軽にマイクロサービスを構築でき、AKSほどの自由度・柔軟性はなく中間に位置するイメージかと思います。
Azure Container InstanceはAzure Container Appsと同様にサーバレスコンテナサービスを謳って居ますが、主にデータ処理jobやAKSのACIバーストなどで利用する事が多く、サービスとして棲み分けがされている印象です。

詳細は下記URLを参考下さい。

techcrunch.com

Portalで触ってみた

Portalでの新規作成画面

サブスクリプション、リソースグループ、Container App名を入力していきます。 Container App EnvironmentはContainer Appを格納する箱のようなもので以下のような観点でEnvironmentを作成します。

  • 関連サービスを管理する
  • 異なるアプリケーションを同じ仮想ネットワークに展開する
  • Daprを使用してアプリケーションを相互に通信させる
  • 同じDapr構成を共有するアプリケーションがある
  • アプリケーションに同じLog Analyticsワークスペースを共有させる

Log Analyticsワークスペースを強制的に指定する必要がありますが、逆にコンテナのログを自動で収集してくれるよう自動設定してくれるようなのでそこは便利だなと思います。

docs.microsoft.com

App Settingsではデプロイするコンテナイメージや割り当てるリソース、Ingressの設定可否を行います。マネージドでIngressまで準備されていてユーザーが管理しなくて済むのがApp Service同様に助かります。Azure Container InstanceではIngressがないためスケールアウトやデプロイの切替ができないので・・・。

今回はクイックスタートイメージを利用しましたが、[use quickstart image]のチェックボックスを外せばACRやDocker Hubからコンテナイメージを任意に選択できます。

設定はたったこれだけで、デプロイが完了します。

f:id:tarutaru_pyorne:20211103093518p:plain

f:id:tarutaru_pyorne:20211103093528p:plain

f:id:tarutaru_pyorne:20211103093537p:plain

f:id:tarutaru_pyorne:20211103093544p:plain

f:id:tarutaru_pyorne:20211103093552p:plain

f:id:tarutaru_pyorne:20211103093559p:plain

f:id:tarutaru_pyorne:20211103093615p:plain

f:id:tarutaru_pyorne:20211103093623p:plain

Azure Container Appsの機能

シークレット管理

パスワードや接続文字列などのシークレットをAzure Container Appsに格納できるようです。App Serviceでいうアプリケーション設定、AKSでいうsecretに相当するもののようです。

f:id:tarutaru_pyorne:20211103093653p:plain

イングレス

イングレスの有無、パブリック/プライベート公開可否、ポートを設定できるようです。今後はここにSSL/TLS証明書やカスタムドメイン設定などApp Serviceで提供されている機能が入ってくるとよいな~と思っています。

f:id:tarutaru_pyorne:20211103093705p:plain

docs.microsoft.com

継続的デプロイ

GitHub ActionsとAzure Container Registryを使った継続的デプロイ設定を自動で設定できます。 こちらもApp Service、AKS同様に設定できていた内容のため特に目新しい所はありませんが便利ですね。

f:id:tarutaru_pyorne:20211103093715p:plain

リビジョン管理

コンテナのライフサイクル、A/Bテスト、BlurGreenなどの切替を管理する設定であり、Azure Container Appsで一番重要な概念がここになります。

リビジョンは配置するコンテナイメージとスケーリング、Daprによるマイクロサービス間の接続情報をまとめて管理します。

docs.microsoft.com

docs.microsoft.com

Azure Container Appsの構成基盤にKEDAが使われているようで、スケーリングにHTTPやキュー、カスタムなど様々な条件を設定できるのがいいです! App ServiceはAzureメトリックベースでのスケーリングしかできなかったのでここは大きな違いになります。

また、Daprがサイドカーとしてマネージドで動くため、マイクロサービスのアプリケーション開発と管理が非常にやりやすくなりますね。 私もまだまだDaprについては知識が浅いですが、これから勉強してまた情報発信できればと思っています。

f:id:tarutaru_pyorne:20211103093734p:plain

f:id:tarutaru_pyorne:20211103093743p:plain

f:id:tarutaru_pyorne:20211103093750p:plain

f:id:tarutaru_pyorne:20211103093758p:plain

さいごに

Azure Container Apps、素晴らしいサービスの予感がしています。 まだプレビューの状況なのでユーザー様への提案はできませんが、間違いなくAzureでのコンテ利用における主選択の一つとなるでしょう。 我々も来るGAの時に備え、色々検証していきたいと思います!