🎼

Azure Container Apps で TCP (not HTTP) 通信を構成する

2024/02/23に公開

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