Azure Container Apps で TCP (not HTTP) 通信を構成する
Azure Container Apps (ACA) では、昔は HTTP/HTTPS 通信以外の TCP 通信は行うことができませんでしたが、現在はそれがサポートされています。
改めて動作確認してみましたので、残しておこうと思います。
Azure Container Apps 環境の作成
まずは、これから利用していく ACA 環境を作成します。
ひとまずは、下記のチュートリアルを参考に作成すれば OK です。
下記は、東日本リージョンに作成するようにしたサンプルです。名前は適宜変更のうえ、Azure Cloud Shell にて実行してみてください。
az containerapp up \
--name my-container-app \
--resource-group my-container-apps \
--location japaneast \
--environment my-container-apps \
--image mcr.microsoft.com/azuredocs/containerapps-helloworld:latest \
--target-port 80 \
--ingress external \
--query properties.configuration.ingress.fqdn
デプロイの確認 に記載の画面が表示されることを確認できれば、無事作成完了です。
なお、以降は本サンプル "アプリケーション" は利用せず、ACA "環境" のみ利用していきます。
アプリケーションのデプロイ
サンプルは界隈ではおなじみ、Azure Voting App を利用します。
バックエンド (Redis) の作成
下記のコマンドを実行し、バックエンド側のコンテナを作成します。
az containerapp up \
--name azure-vote-back \
--resource-group $ACA_RG \
--location japaneast \
--environment $ACA_ENV \
--image mcr.microsoft.com/oss/bitnami/redis:6.0.8 \
--target-port 6379 \
--ingress internal \
--env-vars 'ALLOW_EMPTY_PASSWORD=yes'
ちなみに、上記 az containerapp up
コマンドでは、接続ポートで "HTTP" が自動選択され "TCP" を選択することができないようでした。
このため、下記の画面を参考に "TCP" の 6379 ポートで待ち受けるように設定を更新しておいてください。
なお、"--ingress internal" として、ネットワークアクセスは ACA 環境からのみアクセス可能としているため、コマンドの実行結果で表示される URL へアクセスできないことは想定通りです。
コマンドのリファレンスは下記の情報を参照くださいませ。
フロントエンドの作成
下記のコマンドを実行し、フロントエンド側のコンテナを作成します。
az containerapp up \
--name azure-vote-front \
--resource-group $ACA_RG \
--location japaneast \
--environment $ACA_ENV \
--image mcr.microsoft.com/azuredocs/azure-vote-front:v1 \
--target-port 80 \
--ingress external \
--env-vars 'REDIS=azure-vote-back'
デプロイ後、出力される URL へアクセスし、Azure Voting App の画面が表示できること、投票ができることが確認できれば OK です。
最後に
HTTP 以外の TCP 通信ができるようになったことで、上記サンプルのような Redis など、様々な相互通信ができるようになっています。活用の幅が大きく広がっていますね💪
ACA は機能追加のスピードも早くて嬉しいですね。その分、継続して勉強していかなきゃな…と思います😇
Discussion