このチュートリアルでは、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 環境を起動します。
次に、必要な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
接続環境、カスタムロケーション、拡張機能、または接続クラスターを削除しないでください。なぜなら他のアプリケーションがこれらのリソースを共有する可能性があるからです。