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

Spring용 Config Server는 구성 데이터를 여러 애플리케이션에서 사용할 수 있도록 중앙 집중식 위치를 제공합니다. 이 문서에서는 Azure Container Apps에서 호스트되는 앱을 Java Spring용 Config Server 인스턴스에 연결하는 방법을 알아봅니다.

Spring용 Config Server Java 구성 요소는 GitHub 리포지토리를 구성 설정의 원본으로 사용합니다. 구성 값은 구성 요소와 컨테이너 앱 간의 바인딩을 통해 컨테이너 앱에서 사용할 수 있습니다. 구성 서버에서 값이 변경되면 애플리케이션을 다시 컴파일하거나 다시 배포할 필요 없이 자동으로 애플리케이션에 전달됩니다.

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

  • Spring용 Config Server Java 구성 요소 만들기
  • Spring용 Config Server를 컨테이너 앱에 바인딩
  • 구성 서버를 애플리케이션에 연결하기 전과 후에 구성 값을 관찰합니다.
  • 대칭 키를 사용하여 구성 값 암호화 및 암호 해독

Important

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

필수 조건

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

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

고려 사항

Azure Container Apps의 Spring용 Config Server에서 실행하는 경우 다음 세부 정보에 유의해야 합니다.

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

설정

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

다음 명령을 실행하여 리소스 그룹 및 Container Apps 환경을 만듭니다.

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

    export LOCATION=eastus
    export RESOURCE_GROUP=my-services-resource-group
    export ENVIRONMENT=my-environment
    export JAVA_COMPONENT_NAME=configserver
    export APP_NAME=my-config-client
    export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-service-config-client:latest"
    export URI="https://github.com/Azure-Samples/azure-spring-cloud-config-java-aca.git"
    
    변수 설명
    LOCATION 컨테이너 앱 및 Java 구성 요소를 만드는 Azure 지역 위치입니다.
    ENVIRONMENT 데모 애플리케이션의 Azure Container Apps 환경 이름입니다.
    RESOURCE_GROUP 데모 애플리케이션에 대한 Azure 리소스 그룹 이름입니다.
    JAVA_COMPONENT_NAME 컨테이너 앱용으로 만들어진 Java 구성 요소의 이름입니다. 이 경우 Spring용 Config Server Java 구성 요소를 만듭니다.
    IMAGE 컨테이너 앱에 사용되는 컨테이너 이미지입니다.
    URI URI를 git 리포지토리 URL로 바꿀 수 있습니다. 비공개 URI인 경우 spring.cloud.config.server.git.usernamespring.cloud.config.server.git.password와 같은 관련 인증 구성을 추가합니다.
  2. Azure CLI를 사용하여 Azure에 로그인합니다.

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

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. 컨테이너 앱 환경을 만듭니다.

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

이 환경은 Spring용 Config Server Java 구성 요소와 컨테이너 앱을 모두 호스팅하는 데 사용됩니다.

Spring용 Config Server Java 구성 요소 만들기

이제 Container Apps 환경이 있으므로 컨테이너 앱을 만들고 이를 Spring용 Config Server Java 구성 요소에 바인딩할 수 있습니다. 컨테이너 앱을 바인딩하면 구성 값이 Config Server 구성 요소에서 애플리케이션으로 자동으로 동기화됩니다.

  1. Spring용 Config Server Java 구성 요소를 만듭니다.

    az containerapp env java-component config-server-for-spring create \
      --environment $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --name $JAVA_COMPONENT_NAME \
      --min-replicas 1 \
      --max-replicas 1 \
      --configuration spring.cloud.config.server.git.uri=$URI
    
  2. Spring용 Config Server Java 구성 요소를 업데이트합니다.

    az containerapp env java-component config-server-for-spring update \
      --environment $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --name $JAVA_COMPONENT_NAME \
      --min-replicas 2 \
      --max-replicas 2 \
      --configuration spring.cloud.config.server.git.uri=$URI spring.cloud.config.server.git.refresh-rate=60
    

    여기서는 uri 속성을 통해 구성 정보를 보관하는 리포지토리를 찾을 수 있는 위치를 구성 요소에 알려 줍니다. refresh-rate 속성은 Container Apps에 git 리포지토리의 변경 내용을 확인하는 빈도를 알려 줍니다.

Spring용 Config Server Java 구성 요소에 컨테이너 앱 바인딩

  1. 구성 데이터를 사용하는 컨테이너 앱을 만듭니다.

    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 \
      --query properties.configuration.ingress.fqdn
    

    이 명령은 구성 데이터를 사용하는 컨테이너 앱의 URL을 반환합니다. 다음 단계에서 사용할 수 있도록 URL을 텍스트 편집기에 복사합니다.

    브라우저에서 앱을 방문하는 경우 반환되는 connectTimeout 값은 기본값인 0입니다.

  2. Spring용 Config Server에 바인딩합니다.

    이제 컨테이너 앱과 Config Server가 만들어졌으므로 update 명령을 사용하여 컨테이너 앱에 바인딩합니다.

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

    --bind $JAVA_COMPONENT_NAME 매개 변수는 컨테이너 앱과 구성 요소 간의 링크를 만듭니다.

컨테이너 앱과 Config Server 구성 요소가 함께 바인딩되면 구성 변경 내용이 자동으로 컨테이너 앱에 동기화됩니다.

앱의 URL을 다시 방문하면 이제 connectTimeout 값은 10000입니다. 이 값은 원래 구성 요소의 원본으로 설정된 $URI 변수에 설정된 git 리포지토리에서 가져옵니다. 특히 이 값은 리포지토리의 application.yml 파일에 있는 connectionTimeout 속성에서 가져옵니다.

바인드 요청은 구성 설정을 환경 변수로 애플리케이션에 삽입합니다. 이제 이러한 값을 구성 서버에서 구성 설정을 가져올 때 사용할 애플리케이션 코드에 사용할 수 있습니다.

이 경우 애플리케이션에서 다음 환경 변수를 사용할 수 있습니다.

SPRING_CLOUD_CONFIG_URI=http://[JAVA_COMPONENT_INTERNAL_FQDN]:80
SPRING_CLOUD_CONFIG_COMPONENT_URI=http://[JAVA_COMPONENT_INTERNAL_FQDN]:80
SPRING_CONFIG_IMPORT=optional:configserver:$SPRING_CLOUD_CONFIG_URI

고유의 SPRING_CONFIG_IMPORT를 사용자 지정하려면 환경 변수 SPRING_CLOUD_CONFIG_COMPONENT_URI를 참조하면 됩니다. 예를 들어, Java -Dspring.config.import=optional:configserver:${SPRING_CLOUD_CONFIG_COMPONENT_URI}?fail-fast=true와 같은 명령줄 인수로 재정의할 수 있습니다.

애플리케이션에서 바인딩을 제거할 수도 있습니다.

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

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

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

앱의 URL을 다시 방문하면 connectTimeout 값이 다시 0으로 변경됩니다.

리소스 정리

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

az group delete \
  --resource-group $RESOURCE_GROUP

다음 단계