자습서: Azure Container Apps에서 Spring용 관리형 관리자에 연결

Admin for Spring 관리 구성 요소는 Actuator 엔드포인트를 노출하는 Spring Boot 웹 애플리케이션에 대한 관리 인터페이스를 제공합니다. Azure Container Apps의 관리자 구성 요소로서 원활한 통합 및 관리를 위해 컨테이너 앱을 Spring용 관리자에 쉽게 바인딩할 수 있습니다.

이 자습서에서는 Spring 애플리케이션을 쉽게 모니터링하고 관리할 수 있도록 Spring용 관리자 Java 구성 요소를 만들고 이를 컨테이너 앱에 바인딩하는 방법을 보여 줍니다.

Spring용 관리자 인사이트 대시보드 개요 스크린샷.

이 자습서에서는 다음을 알아봅니다.

  • Spring용 관리자 Java 구성 요소 만들기
  • Spring용 관리자 Java 구성 요소에 컨테이너 앱을 바인딩합니다.

참고 항목

Spring용 관리자를 Spring용 유레카 서버와 통합하려면 대신 Azure Container Apps에서 Spring용 유레카 서버와 Spring용 관리자 통합을 참조하세요.

Important

이 자습서에서는 Azure 청구서에 영향을 줄 수 있는 서비스를 사용합니다. 단계별로 따르기로 결정한 경우 예기치 못한 비용이 청구되지 않도록 이 문서에 소개된 리소스를 삭제해야 합니다.

필수 조건

이 프로젝트를 완료하려면 다음 항목이 필요합니다.

요건 지침
Azure 계정 활성 구독이 필요합니다. GitHub 계정이 없는 경우 무료로 만들 수 있습니다.
Azure CLI Azure CLI를 설치합니다.

고려 사항

Azure Container Apps에서 Spring용 관리자를 실행할 때 다음 세부 정보에 유의해야 합니다.

Item 설명
범위 구성 요소는 연결된 컨테이너 앱과 동일한 환경에서 실행됩니다.
크기 조정 구성 요소의 크기를 조정할 수 없습니다. 크기 조정 속성 minReplicasmaxReplicas은(는) 모두 1(으)로 설정됩니다.
리소스 구성 요소에 대한 컨테이너 리소스 할당은 고정되어 있습니다. CPU 코어 수는 0.5이고 메모리 크기는 1Gi입니다.
가격 구성 요소 청구는 사용량 기반 가격 책정에 속합니다. 관리 구성 요소에서 소비한 리소스는 활성/유휴 요금으로 청구됩니다. 더 이상 사용하지 않는 구성 요소를 삭제하여 청구를 중지할 수 있습니다.
바인딩 컨테이너 앱은 바인딩을 통해 구성 요소에 연결됩니다. 바인딩은 컨테이너 앱 환경 변수에 구성을 삽입합니다. 바인딩이 설정되면 컨테이너 앱은 환경 변수에서 구성 값을 읽고 구성 요소에 연결할 수 있습니다.

설정

Spring용 관리자 작업을 시작하기 전에 먼저 필요한 리소스를 만들어야 합니다.

다음 명령은 리소스 그룹 및 Container Apps 환경을 만드는 데 도움이 됩니다.

  1. 애플리케이션 구성을 지원하는 변수를 만듭니다. 이러한 값은 이 단원의 목적을 위해 제공됩니다.

    export LOCATION=eastus
    export RESOURCE_GROUP=my-resource-group
    export ENVIRONMENT=my-environment
    export JAVA_COMPONENT_NAME=admin
    export APP_NAME=sample-admin-client
    export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-admin-for-spring-client:latest"
    
    변수 설명
    LOCATION 컨테이너 앱 및 Java 구성 요소를 만드는 Azure 지역 위치입니다.
    ENVIRONMENT 데모 애플리케이션의 Azure Container Apps 환경 이름입니다.
    RESOURCE_GROUP 데모 애플리케이션에 대한 Azure 리소스 그룹 이름입니다.
    JAVA_COMPONENT_NAME 컨테이너 앱용으로 만들어진 Java 구성 요소의 이름입니다. 이 경우 Spring용 관리자 Java 구성 요소를 만듭니다.
    IMAGE 컨테이너 앱에 사용되는 컨테이너 이미지입니다.
  2. Azure CLI를 사용하여 Azure에 로그인합니다.

    az login
    
  3. 리소스 그룹을 만듭니다.

    az group create \
      --name $RESOURCE_GROUP \
      --location $LOCATION \
      --query "properties.provisioningState"
    

    --query 매개 변수를 사용하면 응답을 단순한 성공 또는 실패 메시지로 필터링합니다.

  4. 컨테이너 앱 환경을 만듭니다.

    az containerapp env create \
      --name $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION
    

구성 요소 사용

이제 기존 환경이 있으므로 컨테이너 앱을 만들고 이를 Spring용 관리자 구성 요소의 Java 구성 요소 인스턴스에 바인딩할 수 있습니다.

  1. Spring Java 구성 요소용 관리를 만듭니다.

    az containerapp env java-component admin-for-spring create \
      --environment $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --name $JAVA_COMPONENT_NAME \
      --min-replicas 1 \
      --max-replicas 1
    
  2. Spring용 관리자 Java 구성 요소를 업데이트합니다.

    az containerapp env java-component admin-for-spring create \
      --environment $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --name $JAVA_COMPONENT_NAME \
      --min-replicas 2 \
      --max-replicas 2
    

Spring용 관리자 Java 구성 요소에 컨테이너 앱 바인딩

  1. 컨테이너 앱을 만들고 Spring용 관리자에 바인딩합니다.

    az containerapp create \
      --name $APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --environment $ENVIRONMENT \
      --image $IMAGE \
      --min-replicas 1 \
      --max-replicas 1 \
      --ingress external \
      --target-port 8080 \
      --bind $JAVA_COMPONENT_NAME
    

bind 작업은 컨테이너 앱을 Spring용 관리자 Java 구성 요소에 바인딩합니다. 이제 컨테이너 앱은 환경 변수(주로 SPRING_BOOT_ADMIN_CLIENT_URL 속성)에서 구성 값을 읽고 Spring용 관리자에 연결할 수 있습니다.

바인딩은 다음 속성도 삽입합니다.

"SPRING_BOOT_ADMIN_CLIENT_INSTANCE_PREFER-IP": "true",

이 속성은 Spring용 관리자 구성 요소 클라이언트가 Spring용 관리자 서버에 연결할 때 컨테이너 앱 인스턴스의 IP 주소를 선호해야 함을 나타냅니다.

(선택 사항) Spring용 관리자 Java 구성 요소에서 컨테이너 앱의 바인딩 해제

컨테이너 앱에서 바인딩을 제거하려면 --unbind 옵션을 사용합니다.

  az containerapp update \
    --name $APP_NAME \
    --unbind $JAVA_COMPONENT_NAME \
    --resource-group $RESOURCE_GROUP

대시보드 보기

Important

대시보드를 보려면 관리 환경 리소스에서 계정에 최소한 Microsoft.App/managedEnvironments/write 역할이 할당되어 있어야 합니다. 리소스에 대한 Owner 또는 Contributor 역할을 명시적으로 할당하거나 단계에 따라 사용자 지정 역할 정의를 만들고 이를 계정에 할당할 수 있습니다.

  1. 사용자 지정 역할 정의를 만듭니다.

    az role definition create --role-definition '{
        "Name": "<ROLE_NAME>",
        "IsCustom": true,
        "Description": "Can access managed Java Component dashboards in managed environments",
        "Actions": [
            "Microsoft.App/managedEnvironments/write"
        ],
        "AssignableScopes": ["/subscriptions/<SUBSCRIPTION_ID>"]
    }'
    

    <> 대괄호 사이의 자리 표시자를 해당 값으로 바꿉니다.

  2. 관리 환경 리소스의 계정에 사용자 지정 역할을 할당합니다.

    관리 환경의 리소스 ID를 가져옵니다.

    export ENVIRONMENT_ID=$(az containerapp env show \
        --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ 
        --query id -o tsv)
    
  3. 사용자의 계정에 역할을 할당합니다.

    이 명령을 실행하기 전에 <> 대괄호 사이의 자리 표시자를 사용자 또는 서비스 주체 ID로 바꿉니다.

    az role assignment create \
      --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \
      --role "<ROLE_NAME>" \
      --scope $ENVIRONMENT_ID
    

    참고 항목

    <USER_OR_SERVICE_PRINCIPAL_ID>는 일반적으로 Azure Portal에 액세스하는 데 사용하는 ID여야 합니다. <ROLE_NAME>은 1단계에서 할당한 이름입니다.

  4. Spring용 관리자 대시보드의 URL을 가져옵니다.

    az containerapp env java-component admin-for-spring show \
      --environment $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --name $JAVA_COMPONENT_NAME \
      --query properties.ingress.fqdn -o tsv
    

    이 명령은 Spring용 관리자 대시보드에 액세스하는 데 사용할 수 있는 URL을 반환합니다. 다음 스크린샷에 표시된 것처럼 대시보드를 통해 컨테이너 앱도 사용할 수 있습니다.

    Spring용 관리자 대시보드 개요 스크린샷.

리소스 정리

이 자습서에서 만든 리소스는 Azure 청구서에 영향을 줍니다. 이러한 서비스를 장기간 사용하지 않을 예정이면 다음 명령을 실행하여 이 자습서에서 만든 모든 항목을 제거합니다.

az group delete \
  --resource-group $RESOURCE_GROUP

다음 단계