자습서: Azure Container Apps에서 관리되는 Eureka Server for Spring에 연결
Eureka Server for Spring은 마이크로 서비스가 스스로 등록하고 다른 서비스를 검색할 수 있도록 하는 서비스 레지스트리입니다. 유레카 서버 for Spring은 Azure Container Apps 구성 요소로 사용할 수 있습니다. Eureka 서버에 자동 등록하기 위해 컨테이너 앱을 Spring용 Eureka Server에 바인딩할 수 있습니다.
이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.
- Spring Java용 Eureka Server 구성 요소를 만듭니다.
- 컨테이너 앱을 Spring Java용 Eureka Server 구성 요소에 바인딩합니다.
Important
이 자습서에서는 Azure 청구서에 영향을 줄 수 있는 서비스를 사용합니다. 따라가기로 결정한 경우 예기치 않은 청구를 방지하기 위해 이 문서에 포함된 리소스를 삭제해야 합니다.
필수 조건
고려 사항
Container Apps에서 Spring용 Eureka Server를 실행하는 경우 다음 세부 정보를 알고 있어야 합니다.
Item | 설명 |
---|---|
범위 | Spring용 Eureka Server 구성 요소는 연결된 컨테이너 앱과 동일한 환경에서 실행됩니다. |
크기 조정 | 유레카 서버 for Spring 구성 요소의 크기를 조정할 수 없습니다. 크기 조정 속성 minReplicas 및 maxReplicas 은(는) 모두 1 (으)로 설정됩니다. 고가용성을 달성하려면 Container Apps에서 고가용성 Eureka 서비스 만들기를 참조 하세요. |
리소스 | Spring용 Eureka Server에 대한 컨테이너 리소스 할당이 수정되었습니다. CPU 코어 수는 0.5이고 메모리 크기는 1Gi입니다. |
가격 책정 | Spring용 Eureka Server 청구는 사용량 기반 가격 책정에 속합니다. 관리 Java 구성 요소에서 사용하는 리소스는 활성/유휴 요금으로 청구됩니다. 더 이상 사용하지 않는 구성 요소를 삭제하여 청구를 중지할 수 있습니다. |
바인딩 | 컨테이너 앱은 바인딩을 통해 Spring용 Eureka Server 구성 요소에 연결합니다. 바인딩은 컨테이너 앱 환경 변수에 구성을 삽입합니다. 바인딩이 설정된 후 컨테이너 앱은 환경 변수에서 구성 값을 읽고 Spring용 Eureka Server 구성 요소에 연결할 수 있습니다. |
설정
Spring용 Eureka Server 구성 요소 작업을 시작하기 전에 먼저 필요한 리소스를 만들어야 합니다.
다음 명령을 실행하여 컨테이너 앱 환경에서 리소스 그룹을 만듭니다.
애플리케이션 구성을 지원하는 변수를 만듭니다. 이러한 값은 이 단원의 목적을 위해 제공됩니다.
export LOCATION=eastus export RESOURCE_GROUP=my-services-resource-group export ENVIRONMENT=my-environment export EUREKA_COMPONENT_NAME=eureka export APP_NAME=my-eureka-client export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-service-eureka-client:latest"
변수 설명 LOCATION
컨테이너 앱 및 Java 구성 요소를 만드는 Azure 지역 위치입니다. ENVIRONMENT
데모 애플리케이션의 컨테이너 앱 환경 이름입니다. RESOURCE_GROUP
데모 애플리케이션에 대한 Azure 리소스 그룹 이름입니다. EUREKA_COMPONENT_NAME
컨테이너 앱용으로 만들어진 Java 구성 요소의 이름입니다. 이 경우 Spring용 Eureka Server Java 구성 요소를 만듭니다. IMAGE
컨테이너 앱에 사용되는 컨테이너 이미지입니다. Azure CLI를 사용하여 Azure에 로그인합니다.
az login
리소스 그룹을 만듭니다.
az group create --name $RESOURCE_GROUP --location $LOCATION
컨테이너 앱 환경을 만듭니다.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
Spring용 유레카 서버 Java 구성 요소 만들기
이제 기존 환경이 있으므로 컨테이너 앱을 만들어 Spring용 Eureka Server의 Java 구성 요소 인스턴스에 바인딩할 수 있습니다.
Spring용 Eureka Server Java 구성 요소를 만듭니다.
az containerapp env java-component eureka-server-for-spring create \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_NAME
선택 사항: Spring Java 구성 요소 구성을 위한 유레카 서버를 업데이트합니다.
az containerapp env java-component eureka-server-for-spring update \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_NAME --configuration eureka.server.renewal-percent-threshold=0.85 eureka.server.eviction-interval-timer-in-ms=10000
Spring Java 구성 요소용 유레카 서버에 컨테이너 앱 바인딩
컨테이너 앱을 만들고 유레카 서버 for 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 $EUREKA_COMPONENT_NAME \ --query properties.configuration.ingress.fqdn
향후 단계에서 사용할 수 있도록 앱의 URL을 텍스트 편집기로 복사합니다.
포털에서 컨테이너 앱으로 돌아갑니다. 향후 단계에서 사용할 수 있도록 앱의 URL을 텍스트 편집기로 복사합니다.
경로로 이동하여 /allRegistrationStatus
유레카 서버 for Spring 구성 요소에 등록된 모든 애플리케이션을 봅니다.
바인딩은 주로 eureka.client.service-url.defaultZone
속성인 환경 변수로 여러 구성을 애플리케이션에 삽입합니다. 이 속성은 Eureka Server Java 구성 요소의 내부 엔드포인트를 나타냅니다.
바인딩은 다음 속성도 삽입합니다.
"eureka.client.register-with-eureka": "true"
"eureka.client.fetch-registry": "true"
"eureka.instance.prefer-ip-address": "true"
eureka.client.register-with-eureka
속성은 Eureka Server에 등록을 적용하기 위해 true
(으)로 설정됩니다. 이 등록은 구성 서버 등에서 application.properties
로컬 설정을 덮어씁니다. false
(으)로 설정하려면 컨테이너 앱에서 환경 변수를 설정하여 덮어쓸 수 있습니다.
eureka.instance.prefer-ip-address
컨테이너 앱 환경의 특정 도메인 이름 시스템 확인 규칙 때문에 속성이 설정 true
됩니다. 바인딩을 중단하지 않도록 이 값을 수정하지 마세요.
선택 사항: Spring Java용 Eureka Server 구성 요소에서 컨테이너 앱 바인딩 해제
컨테이너 앱에서 바인딩을 제거하려면 --unbind
옵션을 사용합니다.
az containerapp update \
--name $APP_NAME \
--unbind $JAVA_COMPONENT_NAME \
--resource-group $RESOURCE_GROUP
대시보드를 통해 애플리케이션 보기
Important
대시보드를 보려면 관리 환경 리소스에서 계정에 최소한 Microsoft.App/managedEnvironments/write
역할이 할당되어 있어야 합니다. 리소스에 Owner
대해 명시적으로 또는 Contributor
역할을 할당할 수 있습니다. 단계에 따라 사용자 지정 역할 정의를 만들고 계정에 할당할 수도 있습니다.
사용자 지정 역할 정의를 만듭니다.
az role definition create --role-definition '{ "Name": "<YOUR_ROLE_NAME>", "IsCustom": true, "Description": "Can access managed Java Component dashboards in managed environments", "Actions": [ "Microsoft.App/managedEnvironments/write" ], "AssignableScopes": ["/subscriptions/<SUBSCRIPTION_ID>"] }'
값의
<SUBSCRIPTION_ID>
자리 표시자를AssignableScopes
구독 ID로 바꿔야 합니다.관리되는 환경 리소스의 계정에 사용자 지정 역할을 할당합니다.
다음과 같이 관리 환경의 리소스 ID를 가져옵니다.
export ENVIRONMENT_ID=$(az containerapp env show \ --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
사용자의 계정에 역할을 할당합니다.
이 명령을 실행하기 전에 대괄호로
<>
표시된 자리 표시자를 사용자 또는 서비스 주체 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단계에서 할당한 이름입니다.Spring용 유레카 서버 대시보드의 URL을 가져옵니다.
az containerapp env java-component eureka-server-for-spring show \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_NAME \ --query properties.ingress.fqdn \ --output tsv
이 명령은 Spring용 Eureka Server 대시보드에 액세스하는 데 사용할 수 있는 URL을 반환합니다. 대시보드를 사용하면 다음 스크린샷과 같이 컨테이너 앱을 볼 수도 있습니다.
선택 사항: Spring용 유레카 서버와 Spring용 관리자 Java 구성 요소 통합
Spring용 유레카 서버와 Spring용 관리자 Java 구성 요소를 통합하려면 Spring용 관리형 관리자와 Spring용 유레카 서버 통합을 참조하세요.
리소스 정리
이 자습서에서 만든 리소스는 Azure 청구서에 영향을 줍니다. 이러한 서비스를 장기적으로 사용하지 않을 경우 다음 명령을 실행하여 이 자습서에서 만든 모든 항목을 제거합니다.
az group delete --resource-group $RESOURCE_GROUP
Eureka Server for Spring에 허용되는 구성 목록
다음 섹션에서는 지원되는 구성에 대해 설명합니다. 자세한 내용은 Spring Cloud Eureka Server를 참조 하세요.
참고 항목
새 기능 요청에 대한 지원 티켓을 제출하세요.
구성 옵션
az containerapp update
명령은 --configuration
매개 변수를 사용하여 Spring용 Eureka Server를 구성하는 방법을 제어합니다. 여러 매개 변수를 공백으로 구분하면 한 번에 여러 매개 변수를 사용할 수 있습니다. 자세한 내용은 Spring Cloud Eureka Server를 참조 하세요.
구성 속성에서 eureka.server
사용할 수 있는 구성 설정은 다음과 같습니다.
일반 구성
- 관련 구성 로깅
logging.level.*
logging.group.*
- 네임스페이스 아래의
logging.*
다른 모든 구성은 금지되어야 합니다. 예를 들어 사용하여logging.file
로그 파일을 작성하는 것은 금지되어야 합니다.
애플리케이션 간 호출
이 예에서는 Eureka Server for Spring 구성 요소에 등록된 애플리케이션 간 호출을 위한 Java 코드를 작성하는 방법을 보여 줍니다. 컨테이너 앱이 Eureka와 바인딩되면 Eureka 서버를 통해 서로 통신합니다.
이 예제에서는 호출자와 호출 수신자라는 두 개의 애플리케이션을 만듭니다. 두 애플리케이션 모두 Eureka Server for Spring 구성 요소를 사용하여 서로 통신합니다. 호출 수신자 애플리케이션은 호출자 애플리케이션에서 호출하는 엔드포인트를 노출합니다.
호출 수신자 애플리케이션을 만듭니다. 주 클래스에
@EnableDiscoveryClient
주석을 추가하여 Spring Boot 애플리케이션에서 Eureka 클라이언트를 사용하도록 설정합니다.@SpringBootApplication @EnableDiscoveryClient public class CalleeApplication { public static void main(String[] args) { SpringApplication.run(CalleeApplication.class, args); } }
호출자 애플리케이션에서 호출하는 호출 수신자 애플리케이션에서 엔드포인트를 만듭니다.
@RestController public class CalleeController { @GetMapping("/call") public String calledByCaller() { return "Hello from Application callee!"; } }
애플리케이션 구성 파일에서 호출 수신자 애플리케이션의 이름을 설정합니다(예: application.yml).
spring.application.name=callee
호출자 애플리케이션을 만듭니다.
@EnableDiscoveryClient
주석을 추가하여 Eureka 클라이언트 기능을 사용하도록 설정합니다. 또한@LoadBalanced
주석을 사용하여WebClient.Builder
빈을 만들어 다른 서비스에 대한 부하 분산 호출을 수행합니다.@SpringBootApplication @EnableDiscoveryClient public class CallerApplication { public static void main(String[] args) { SpringApplication.run(CallerApplication.class, args); } @Bean @LoadBalanced public WebClient.Builder loadBalancedWebClientBuilder() { return WebClient.builder(); } }
WebClient.Builder
을(를) 사용하는 호출자 애플리케이션에서 해당 애플리케이션 이름, 호출 수신자를 사용하여 호출 수신자 애플리케이션을 호출하기 위한 컨트롤러를 만듭니다.@RestController public class CallerController { @Autowired private WebClient.Builder webClientBuilder; @GetMapping("/call-callee") public Mono<String> callCallee() { return webClientBuilder.build() .get() .uri("http://callee/call") .retrieve() .bodyToMono(String.class); } }
이제 Eureka Server for Spring Java 구성 요소를 사용하여 서로 통신하는 호출자와 호출 수신자 애플리케이션이 생겼습니다. 호출자 애플리케이션에서 /call-callee
엔드포인트를 테스트하기 전에 두 애플리케이션이 실행 중이고 Eureka 서버와 바인딩되어 있는지 확인합니다.
제한 사항
Eureka Server Java 구성 요소에는 false
(으)로 설정된 기본 구성 eureka.server.enable-self-preservation
이(가) 함께 제공됩니다. 이 기본 구성은 자체 보존을 사용하도록 설정한 후 인스턴스가 삭제되지 않는 시간을 피하는 데 도움이 됩니다. 인스턴스가 너무 일찍 삭제되면 일부 요청이 존재하지 않는 인스턴스로 전달될 수 있습니다. 이 설정을 true
(으)로 변경하려면 Java 구성 요소에서 고유한 구성을 설정하여 덮어쓸 수 있습니다.