はじめに
Azure で一番簡単にコンテナオーケストレーションを実現する Azure Container Apps について、環境構築から、挙動確認、もろもろの測定を記事として残すためのシリーズです
この記事は環境構築の内容なので、ご興味のあるものがあればそちらのリンクをご確認ください
- 事前環境準備 (※本記事の内容です)
- レイテンシを測ってみた
- ARM テンプレート化してみる(予定)
- スケールの挙動を見てみる(予定)
Azure Container Apps って何さ?
乱暴にいうと、マネージドなAKS、です
- k8s そのものや、下回りの仮想マシンなどの管理は不要
- KEDA によるスケーリング(0スケール可能)
- Envoy によるトラフィック制御
- Dapr によるサービス連携など
あたりが大きな特徴ですね。AKS に比べると細かい部分の設定調整などはできませんが、ざっくり上記の代表的な動きができる便利サービスです。
あとはARMテンプレート/bicep で周辺系のサービス( DB など)含めて全部記載できるものメリットになるかなと。YAML 不要!
触ってみるために作る環境について
まずは下図のような Azure Container Apps 環境を作成していきます
今回は choi という通信をリレーするアプリケーションをコンテナとして 4つ使いたいと思います
choi はパブリックなコンテナとして、 shyamagu/choi:http を指定すれば構築できるのでこういう環境構築ではとても便利なソフトウェアです
Azure ポータル画面でポチポチで作る
せっかく ARM テンプレートとか使えるのに~という状況ですが、まずは画面 UI ベースでポチポチ作りたいと思います。
※2022/9/9 時点での画面ベースです。もしかすると見られたタイミング次第ではUIが変わっているかもしれません。
コンテナーアプリの作成ボタンから、以下の情報をいれて、Container App #1 と、Container Apps Environment #1 あとは Log Analytics Workspace を作っていきます
プロジェクトの詳細
- サブスクリプション: お使いのサブスクリプション
- リソースグループ: "新規作成"から、rg-aca-test-20220909 とか適当に
- コンテナーアプリ名: container-app-1
Container Apps 環境
- 地域: Japan East (どこでもいいですけど)
- Container Apps 環境: "新規作成"をポチっとして Container Apps 環境の作成へ
Conatiner Apps 環境の作成
- 環境名: container-apps-environment-1
- ゾーン冗長: 無効のままでOK
「監視」のタブを選択して、
- Log Analytics ワークスペース: ここも"新規作成"をポチっとして
- 名前: workspace-aca-test-20220909とか適当に
「ネットワーク」はそのままでいいので、画面左下のCreateを実行すると「コンテナーアプリの作成」画面に戻ります
コンテナーアプリの作成
次に「アプリ設定」のタブを選択、
- クイックスタートイメージを使用する: 選択を外す
コンテナーの詳細
- 名前: app1
- イメージのソース: Docker Hub またはその他のレジストリ を選択
- イメージの種類: パグリックのまま
- レジストリログインサーバー: docker.ioのまま
- イメージとタグ: shyamagu/choi:httpを指定
(コマンドのオーバーライドとかCPUメモリとかはそのまま) - HTTPイングレス: 無効をクリックして、有効にする
- イングレストラフィック: どこからでもトラフィックを受け入れますを選択
- ターゲットポート: 80を指定
全部できたら左下の 確認と作成 を実行、下図のような構成ができたら、これまた左下の 作成 ボタンを実行
しばし待つ・・・・
デプロイが完了したらリソースに移動して、認証と、Dapr の設定を変えていきます。
AAD 認証をつけて、不特定多数のアクセスを制御する(※オプション)
左パネルの認証から、IDプロバイダーを追加を選択
- IDプロバイダー:Microsofotを選択して、
他は特に触らず、画面左下の 追加 ボタンを実行
そうすると、現在Azureポータルにログインしているアカウントでアクセス制限をかけることができます。便利!
Dapr を有効にする
同じく左パネルの Dapr から、
- Dapr: 有効
- アプリポート: 80 (これはコンテナのポート、choiはデフォルト80なので80)
- アプリID: dapr-app1
- プロトコル: http
を選んで、左下の 保存 を実行すると、続行しますか?と聞かれるので、続行を。
これで赤枠部分のサービスがひとまずできます。
というわけで動作確認を。左パネルの 概要 から、アプリケーションURLを選ぶと(下図)…
AAD の認証を入れている場合は、アクセス許可が要求されるので、承諾 を選択してください
Container App #2の作成
次に下図の赤枠部分、Container App #2 を作成します
まずはコンテナを追加するために、コンテナアプリ環境を選びます。
概要 の Container Apps 環境のリンク をクリック(下図)
コンテナ環境のページに飛ぶので、アプリ から、+作成 をクリック
そうすると Container App #1 の時と同じくコンテナーアプリの作成画面になります
先ほどとほぼ同様に設定していきます。 #1 との変更部分は赤で表記
- サブスクリプション: お使いのサブスクリプション
- リソースグループ: rg-aca-test-20220909 (そのまま、さっき作ったのが入っていると思います)
- コンテナーアプリ名: container-app-2
- 地域: Japan East (そのまま)
- Container Apps 環境: container-apps-environment-1 (そのまま)
次へ:アプリ設定> を選んで、もしくはアプリ設定タグを選択して、Container App #1 の時と同じように、
- クイックスタートイメージを使用する: 選択を外す
- 名前: app2
- イメージのソース: Docker Hub またはその他のレジストリ を選択
- イメージの種類: パグリックのまま
- レジストリログインサーバー: docker.ioのまま
- イメージとタグ: shyamagu/choi:httpを指定
(コマンドのオーバーライドとかCPUメモリとかはそのまま) - HTTPイングレス: 無効をクリックして、有効にする
- イングレストラフィック: Container Apps 環境に限定を選択
- ターゲットポート: 3000を指定
できたら画面左下の 確認と作成 から、検証が終わればそのまま 作成 を実行
デプロイが完了したら リソースに移動 を選択して、Dapr と アプリのポートの設定を変えます
Dapr を有効にする
左パネルの Dapr から、
- Dapr: 有効
- アプリポート: 3000 (container app #2は3000ポートで起動させるため(※後述))
- アプリID: dapr-app2
- プロトコル: http
を選んで、左下の 保存 を実行すると、続行しますか?と聞かれるので、続行を。
コンテナの環境変数を変えて起動ポートを変える
コンテナの編集パネルの下部にある、環境変数 のところの 追加 を選択、
- PORT、手動エントリ、3000
を指定して保存したら、作成を実行
これで container-app-2 はポート3000で choi が起動します。
※ただしこのcontainer-app-2 は、同一のコンテナアプリ環境からしかアクセスできません。動作検証は一旦後回しにして、
Container App #3の作成
最後に下図の赤枠部分、Container App #3 を作成します
先ほどと同様に、まずはコンテナアプリを追加するために、コンテナアプリ環境を選びます。
概要 の Container Apps 環境のリンク をクリック(下図)
そうすると Container App #1 や #2 の時と同じくコンテナーアプリの作成画面になります
先ほどとほぼ同様に設定していきます。 #1 との変更部分は赤で表記
- サブスクリプション: お使いのサブスクリプション
- リソースグループ: rg-aca-test-20220909 (そのまま、さっき作ったのが入っていると思います)
- コンテナーアプリ名: container-app-3
- 地域: Japan East (そのまま)
- Container Apps 環境: container-apps-environment-1 (そのまま)
次へ:アプリ設定> を選んで、もしくはアプリ設定タグを選択して、Container App #1 の時と同じように、
- クイックスタートイメージを使用する: 選択を外す
- 名前: app3
- イメージのソース: Docker Hub またはその他のレジストリ を選択
- イメージの種類: パグリックのまま
- レジストリログインサーバー: docker.ioのまま
- イメージとタグ: shyamagu/choi:httpを指定
(コマンドのオーバーライドとかCPUメモリとかはそのまま) - HTTPイングレス: 無効
できたら画面左下の 確認と作成 から、検証が終わればそのまま 作成 を実行
デプロイが完了したら リソースに移動 を選択して、コンテナの追加、アプリのポートの設定を変えて、Daprを有効化します
アプリのポートの設定を変える
app3 のリンクを選んで (下図ではapp2ですが、app3と読み変えてください)
先ほどと同じく、右パネルの下部にある環境変数の +追加 で、今度は
- PORT、手動エントリ、5000
を指定して、保存 & 作成 を実行
これで App3 の設定は完了です。次に、
コンテナを追加する(App4 を追加する)
右パネルに ** コンテナーの追加** が表示されるので、以下の設定をもりもりと
- 名前: app4
- イメージのソース: Docker Hub またはその他のレジストリ を選択
- イメージとタグ: shyamagu/choi:http を指定
- 環境変数:
- 名前: PORT
- ソース: 手動エントリ
- 値: 4000
上記指定したら 追加 & 作成 を実行
ここまでできたらあと少しです。最後に、
Dapr を有効にする
左パネルの Dapr から、
- Dapr: 有効
- アプリポート: 5000 (container app #3は5000ポートで起動させるため)
- アプリID: dapr-app3
- プロトコル: http
を選んで、左下の 保存 を実行すると、続行しますか?と聞かれるので、続行を。
やっと終わりました。これでひとまずの準備は完了です。
ARMテンプレート使えばここまでの内容が1発でできるので、やはりARMテンプレート使うのが正義ですね^^;
やっとできた。でわ動作確認
ここまでの内容で、以下の構成が完成しているはずです。choiを使って、赤矢印の動作を確認してみたいと思います
URLを確認するために、コンテナアプリ環境を選びます。
概要 の Container Apps 環境のリンク をクリック(下図)
container-app-1 と container-app-2 のアクセスURLをそれぞれ表示してメモっておきます
container-app-1 のURLをたたいて、choi の画面を表示させます
choiの設定画面で、以下のパラメータを設定します
- SERVER1 の choi uri : container-app-1 のURL(ブラウザで表示されているURLと同じもの)
- SERVER2 の choi uri : container-app-2 のURL
- (+ADD)して、SERVER3 のuriには、http://localhost:3500/v1.0/invoke/dapr-app3/method/test
- (+ADD)して、SERVER4 のuriには、http://localhost:4000/
他は特にいじらずに、Start Requestを実行すると・・・やったー疎通確認完了です!
しっかし18秒かかってますね…これは、色々やっている(記事書いている)うちに全部のコンテナアプリが0スケールしてしまっているためです。
すぐにもう一回 Start Requestすると今度は早いですねー
おわりに
今回は Azure Container Apps を触ってみるための事前準備として、とりあえず画面ポータル上でぽちぽちと構成を組みました。しかし辛い…やはりテンプレートは正義ですね。