チュートリアル:Azure Arc対応Kubernetesでコンテナアプリを作成する

このチュートリアルでは、Azure Arc対応のKubernetesクラスター上の既存のContainer Apps接続環境にコンテナアプリをデプロイします。 その後、プロビジョニング、DNS、入力、アプリケーション応答、ログを確認します。

  • 名前で特定の接続環境を取得します。
  • 外部入力用のコンテナアプリを作成しましょう。
  • 申請書の改訂版と完全限定ドメイン名を確認してください。
  • 申請書にリクエストを送ってください。
  • 設定されていればLog Analyticsでアプリケーションログを閲覧できます。
  • チュートリアルアプリケーションを削除してください。

前提条件

始める前に、以下の要件を確認してください:

  • Enable Azure Container Apps on Azure Arc enabled Kubernetes を完了して作成された接続環境。
  • Azure CLIは、接続された環境を含むサブスクリプションへのアクセス権です。
  • Azure権限でターゲットリソースグループおよび接続環境でコンテナアプリを作成する権限があります。
  • 接続された環境のリソースグループと名称。
  • ワークステーションから接続された環境のイングレスアドレスへのネットワークおよびDNSアクセス。
  • 拡張機能のインストール時に設定されたLog Analyticsワークスペースを問い合わせるオプション権限があります。

本番アプリケーションをデプロイする前に、Azure ArcのAzure Container Appsを確認してください。アプリケーションがプロビジョニングできなかったり、アクセスできなかった場合は、「Azure Arc enabled Kubernetes on Azure Container Appsのトラブルシューティング」をご覧ください。

Azure CLI 拡張機能を追加する

Azure Cloud Shell で Bash 環境を起動します。

新しいウィンドウで Cloud Shell を起動する。

次に、必要なAzure CLI拡張を追加してください。

az extension add --name containerapp --upgrade --yes

アプリケーション用のリソースグループを作成する

コンテナアプリは接続された環境とは異なるリソースグループを使用できます。 アプリケーションのリソースグループと、リソースメタデータを保存するAzureリージョンを設定します。 アプリケーションコンテナは、接続された環境に関連付けられたKubernetesクラスター上で動作します。

APP_RESOURCE_GROUP="my-container-apps-resource-group"
AZURE_LOCATION="eastus"
az group create --name $APP_RESOURCE_GROUP --location $AZURE_LOCATION

接続環境を手に入れましょう

リソースグループと接続環境の名前を設定します:

CONNECTED_ENVIRONMENT_RESOURCE_GROUP="<CONNECTED_ENVIRONMENT_RESOURCE_GROUP>"
CONNECTED_ENVIRONMENT_NAME="<CONNECTED_ENVIRONMENT_NAME>"

その特定の接続環境を取得し、準備完了かどうかを確認しましょう:

CONNECTED_ENVIRONMENT_ID=$(az containerapp connected-env show \
  --resource-group $CONNECTED_ENVIRONMENT_RESOURCE_GROUP \
  --name $CONNECTED_ENVIRONMENT_NAME \
  --query id \
  --output tsv)

az containerapp connected-env show \
  --resource-group $CONNECTED_ENVIRONMENT_RESOURCE_GROUP \
  --name $CONNECTED_ENVIRONMENT_NAME \
  --query "{Id:id,State:properties.provisioningState,Domain:properties.defaultDomain}" \
  --output yaml

StateがSucceededされた時のみ続けてください。

アプリを作成して検証してください

サンプル アプリケーションを作成します。

CONTAINER_APP_NAME="my-container-app"

az containerapp create \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --environment $CONNECTED_ENVIRONMENT_ID \
  --environment-type connected \
  --image mcr.microsoft.com/k8se/quickstart:latest \
  --target-port 80 \
  --ingress external

プロビジョニングが成功するのを待つ:

CONTAINER_APP_ID=$(az containerapp show \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --query id \
  --output tsv)

az resource wait --ids $CONTAINER_APP_ID --created --timeout 600

az containerapp show \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --query "{State:properties.provisioningState,Revision:properties.latestReadyRevisionName,FQDN:properties.configuration.ingress.fqdn}" \
  --output yaml

APP_FQDN=$(az containerapp show \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --query properties.configuration.ingress.fqdn \
  --output tsv)

StateがSucceededで、Revisionが空でなく、FQDNが接続環境ドメインを含む場合にのみ継続します。 接続された環境のイングレスアドレスに到達できるネットワークからのDNSおよびアプリケーション応答のテスト:

nslookup $APP_FQDN
curl --fail --show-error "https://$APP_FQDN"

ブラウザでもアプリを開くことができます:

az containerapp browse \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME

DNSが解決されなかったり、リクエストがタイムアウトしたり、応答が成功しない場合は、 アプリケーション入力が到達できない状態を参照してください。

Log Analytics を使用して診断ログを取得する

注

このセクションは、コンテナアプリ拡張機能のインストール時にLog Analyticsを設定する場合にのみ適用されます。 Log Analyticsを設定していなければ、このセクションは飛ばしてください。

Container Apps 拡張機能用に設定されたLog Analyticsワークスペースを開き、「Logs」を選択してください。 以下のクエリを実行して、過去72時間のログを表示します。 初回摂取は10〜15分かかることがあります。

let StartTime = ago(72h);
let EndTime = now();
ContainerAppConsoleLogs_CL
| where TimeGenerated between (StartTime .. EndTime)
| where ContainerAppName_s =~ "my-container-app"

Kubernetes クラスターでホストされているすべてのアプリのアプリケーション ログは、Log Analytics ワークスペースで ContainerAppConsoleLogs_CL という名前のカスタム ログ テーブルに記録されます。

  • Log_s アプリケーションログメッセージおよびコンテナライフサイクルメッセージを含みます。
  • ContainerAppName_s コンテナアプリを識別します。 このフィールドは前のクエリで使用されます。

ログ クエリの詳細については、Kusto の概要に関する記事を参照してください。

チュートリアルアプリケーションの整理をしましょう

サンプルコンテナアプリを削除してください:

az containerapp delete \
  --resource-group $APP_RESOURCE_GROUP \
  --name $CONTAINER_APP_NAME \
  --yes

もしこのチュートリアル用にアプリケーションリソースグループを作成し、他のリソースが含まれていない場合は削除してください。

az group delete --name $APP_RESOURCE_GROUP --yes --no-wait

接続環境、カスタムロケーション、拡張機能、または接続クラスターを削除しないでください。なぜなら他のアプリケーションがこれらのリソースを共有する可能性があるからです。

次のステップ