次の方法で共有


チュートリアル: 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 コンテナーとボリューム マウントを構成する。

前提条件

環境を設定する

以下の手順を実行して環境変数を定義し、Container Apps 拡張機能を最新の状態にします。

  1. 次のコマンドを使用して、環境変数を定義します。

    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"
    
  2. 次のコマンドを使用して、Azure CLI にサインインします。

    az login
    az account set --subscription $SUBSCRIPTION_ID
    
  3. 次のコマンドを使用して、Container Apps と Application Insights 用の Azure CLI 拡張機能の最新バージョンがあることを確認します。

    az extension add --name containerapp --upgrade
    az extension add --name application-insights --upgrade
    
  4. 次のコマンドを使用して、Application Insights インスタンスの接続文字列を取得します。

    CONNECTION_STRING=$(az monitor app-insights component show \
        --ids $APP_INSIGHTS_RESOURCE_ID \
        --query connectionString)
    

コンテナー イメージを準備する

Application Insights Java エージェントのセットアップ イメージを作成するには、同じディレクトリで次の手順を実行します。

  1. 次の内容を含む 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"]
    
  2. 次の内容を含む 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
    
  3. 次のコマンドを使用してイメージを作成します。

    docker build . --tag "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
    
  4. 次のコマンドを使用して、イメージを 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 を作成するには、以下の手順を実行します。

  1. 次のコマンドを使用して、Container Apps 環境を作成します。

    az containerapp env create \
        --name $ENVIRONMENT_NAME \
        --resource-group $RESOURCE_GROUP \
        --location "$LOCATION" \
        --query "properties.provisioningState"
    

    Container Apps 環境が正常に作成されると、コマンド ラインから Succeeded メッセージが返されます。

  2. 次のコマンドを使用して、さらに構成を行うコンテナー アプリを作成します。

    az containerapp create \
        --name $CONTAINER_APP_NAME \
        --environment $ENVIRONMENT_NAME \
        --resource-group $RESOURCE_GROUP \
        --query "properties.provisioningState"
    

    コンテナー アプリを作成すると、コマンド ラインから Succeeded メッセージが返されます。

Application Insights 統合を設定するように init コンテナー、シークレット、環境変数、ボリュームを構成する

以下の手順を実行して、シークレット、環境変数、ボリュームを使用して init コンテナーを構成します。 この構成により、保存された情報を Application Insights インスタンスで使用できるようになります。

  1. 次のコマンドを使用して、実行されているコンテナー アプリの現在の構成を現在のディレクトリの app.yaml ファイルに書き込みます。

    az containerapp show \
        --resource-group $RESOURCE_GROUP \
        --name $CONTAINER_APP_NAME \
        --output yaml \
    > app.yaml
    
  2. 以下の手順に従って、app.yaml ファイルを編集します。 この編集により、シークレット、エフェメラル ストレージ、init コンテナーがファイルに追加され、アプリ コンテナーが更新されます。

    1. 次の例を使用して、Application Insights 接続文字列のシークレットを追加します。 $CONNECTION_STRING を Application Insights の接続文字列に置き換えます。

      properties:
        configuration:
           secrets:
           - name: app-insights-connection-string
             value: $CONNECTION_STRING
      
    2. 次の例を使用して、Java エージェント ファイル用のエフェメラル ストレージ ボリュームを追加します。

      properties:
        template:
          volumes:
          - name: java-agent-volume
            storageType: EmptyDir
      
    3. 次の例を使用して、ボリューム マウントと環境変数を含む 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
      
    4. 次の例を使用して、ボリューム マウントと環境変数を含むアプリ コンテナーを更新します。

      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
      
  3. 次のコマンドを使用して、変更した 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 と関連する構成ファイルを置き換えてください。