チュートリアル: Azure Container Apps で init コンテナーを使用してアプリケーション パフォーマンス管理 (APM) Java エージェントを構成する
このチュートリアルでは、Azure Container Apps で init コンテナーを使用してアプリケーション パフォーマンス管理 (APM) Java エージェントを構成します。 APM は、コンテナー アプリの監視を強化するのに役立ちます。 APM プラグインは、アプリと同じイメージまたは Dockerfile にパッケージ化できますが、これにはリリースや共通脆弱性および露出 (CVE) の軽減策などの管理上の懸念事項がまとめられています。 懸念事項をバインドするのではなく、Azure Container Apps で Java エージェントと init コンテナーを使用して、アプリ イメージを変更せずに APM ソリューションを挿入できます。
このチュートリアルでは、次の作業を行いました。
- Java エージェントを設定し、Azure Container Registry にプッシュするためのイメージを準備する。
- Container Apps 環境とコンテナー アプリをターゲット Java アプリとして作成する。
- Application Insights 統合を設定するように init コンテナーとボリューム マウントを構成する。
前提条件
- Azure サブスクリプション。 無料で作成できます。。
- Application Insights のインスタンス。
- Azure Container Registry またはその他のコンテナー イメージ レジストリのインスタンス。
- Docker。イメージをビルドします。
- 最新バージョンの Azure CLI。
環境を設定する
以下の手順を実行して環境変数を定義し、Container Apps 拡張機能を最新の状態にします。
次のコマンドを使用して、環境変数を定義します。
export SUBSCRIPTION_ID="<SUBSCRIPTION_ID>" # Replace with your own Azure subscription ID export APP_INSIGHTS_RESOURCE_ID="/subscriptions/$SUBSCRIPTION_ID/resourceGroups/my-resource-group/providers/microsoft.insights/components/my-app-insights" export CONTAINER_REGISTRY_NAME="myacr" export RESOURCE_GROUP="my-resource-group" export ENVIRONMENT_NAME="my-environment" export CONTAINER_APP_NAME="my-container-app" export LOCATION="eastus"
次のコマンドを使用して、Azure CLI にサインインします。
az login az account set --subscription $SUBSCRIPTION_ID
次のコマンドを使用して、Container Apps と Application Insights 用の Azure CLI 拡張機能の最新バージョンがあることを確認します。
az extension add --name containerapp --upgrade az extension add --name application-insights --upgrade
次のコマンドを使用して、Application Insights インスタンスの接続文字列を取得します。
CONNECTION_STRING=$(az monitor app-insights component show \ --ids $APP_INSIGHTS_RESOURCE_ID \ --query connectionString)
コンテナー イメージを準備する
Application Insights Java エージェントのセットアップ イメージを作成するには、同じディレクトリで次の手順を実行します。
次の内容を含む Dockerfile を作成します。
FROM mcr.microsoft.com/cbl-mariner/base/core:2.0 ARG version="3.5.4" RUN tdnf update -y && tdnf install -y curl ca-certificates RUN curl -L "https://github.com/microsoft/ApplicationInsights-Java/releases/download/${version}/applicationinsights-agent-${version}.jar" > agent.jar ADD setup.sh /setup.sh ENTRYPOINT ["/bin/sh", "setup.sh"]
次の内容を含む setup.sh ファイルを作成します。
#!/bin/sh if [[ -z "$CONNECTION_STRING" ]]; then echo "Environment variable CONNECTION_STRING is not found. Exiting..." exit 1 else echo "{\"connectionString\": \"$CONNECTION_STRING\"}" > /java-agent/applicationinsights.json cp agent.jar /java-agent/agent.jar fi
次のコマンドを使用してイメージを作成します。
docker build . --tag "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
次のコマンドを使用して、イメージを Azure Container Registry または別のコンテナー イメージ レジストリにプッシュします。
az acr login --name $CONTAINER_REGISTRY_NAME docker push "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
ヒント
この手順に関連するコードは、azure-container-apps-java-samples GitHub リポジトリにあります。
Container Apps 環境とコンテナー アプリをターゲット Java アプリとして作成する
Container Apps 環境とターゲットの Java アプリとして Container Apps を作成するには、以下の手順を実行します。
次のコマンドを使用して、Container Apps 環境を作成します。
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --location "$LOCATION" \ --query "properties.provisioningState"
Container Apps 環境が正常に作成されると、コマンド ラインから
Succeeded
メッセージが返されます。次のコマンドを使用して、さらに構成を行うコンテナー アプリを作成します。
az containerapp create \ --name $CONTAINER_APP_NAME \ --environment $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --query "properties.provisioningState"
コンテナー アプリを作成すると、コマンド ラインから
Succeeded
メッセージが返されます。
Application Insights 統合を設定するように init コンテナー、シークレット、環境変数、ボリュームを構成する
以下の手順を実行して、シークレット、環境変数、ボリュームを使用して init コンテナーを構成します。 この構成により、保存された情報を Application Insights インスタンスで使用できるようになります。
次のコマンドを使用して、実行されているコンテナー アプリの現在の構成を現在のディレクトリの app.yaml ファイルに書き込みます。
az containerapp show \ --resource-group $RESOURCE_GROUP \ --name $CONTAINER_APP_NAME \ --output yaml \ > app.yaml
以下の手順に従って、app.yaml ファイルを編集します。 この編集により、シークレット、エフェメラル ストレージ、init コンテナーがファイルに追加され、アプリ コンテナーが更新されます。
次の例を使用して、Application Insights 接続文字列のシークレットを追加します。
$CONNECTION_STRING
を Application Insights の接続文字列に置き換えます。properties: configuration: secrets: - name: app-insights-connection-string value: $CONNECTION_STRING
次の例を使用して、Java エージェント ファイル用のエフェメラル ストレージ ボリュームを追加します。
properties: template: volumes: - name: java-agent-volume storageType: EmptyDir
次の例を使用して、ボリューム マウントと環境変数を含む init コンテナーを追加します。
<CONTAINER_REGISTRY_NAME>
を Azure Container Registry の名前に置き換えます。properties: template: initContainers: - image: <CONTAINER_REGISTRY_NAME>.azurecr.io/samples/java-agent-setup:1.0.0 name: java-agent-setup resources: cpu: 0.25 memory: 0.5Gi env: - name: CONNECTION_STRING secretRef: app-insights-connection-string volumeMounts: - mountPath: /java-agent volumeName: java-agent-volume
次の例を使用して、ボリューム マウントと環境変数を含むアプリ コンテナーを更新します。
properties: template: containers: - name: test-java-app image: mcr.microsoft.com/azurespringapps/samples/hello-world:0.0.1 resources: cpu: 0.5 memory: 1Gi env: - name: JAVA_TOOL_OPTIONS value: -javaagent:/java-agent/agent.jar volumeMounts: - mountPath: /java-agent volumeName: java-agent-volume
次のコマンドを使用して、変更した app.yaml ファイルでコンテナー アプリを更新します。
az containerapp update \ --resource-group $RESOURCE_GROUP \ --name $CONTAINER_APP_NAME \ --yaml app.yaml \ --query "properties.provisioningState"
コンテナー アプリを更新すると、コマンドから
Succeeded
メッセージが返されます。 これで、Azure portal で Application Insights インスタンスを表示し、コンテナー アプリが接続されていることを確認できるようになりました。
リソースをクリーンアップする
このチュートリアルで作成したリソースは、Azure の課金に影響します。 長期的に必要ない場合は、次のコマンドを使用してリソース グループとそのリソースを削除します。
az group delete --resource-group $RESOURCE_GROUP
関連するコンテンツ
Azure Application Insights 以外にも、コミュニティには他にも人気のある APM ソリューションがあります。 Azure Container Apps を他の APM プロバイダーと統合する場合は、Java エージェント JAR と関連する構成ファイルを置き換えてください。