빠른 시작: Azure Spring Apps 표준 사용량 및 전용 플랜에서 애플리케이션에 대한 자동 크기 조정 설정
참고 항목
기본, 표준 및 엔터프라이즈 계획은 2025년 3월 중순부터 사용되지 않으며 3년의 은퇴 기간이 있습니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 사용 중지 공지 사항을 참조하세요.
표준 소비 및 전용 계획은 2024년 9월 30일부터 사용되지 않으며 6개월 후에 완전히 종료됩니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 표준 사용량 및 전용 계획을 Azure Container Apps로 마이그레이션을 참조 하세요.
이 문서는 표준 사용량 및 전용(미리 보기) ❎ Basic/Standard ❎ Enterprise에 적용됩니다.✅
이 문서에서는 Azure Spring Apps 표준 사용량 및 전용 플랜에서 애플리케이션에 대한 자동 크기 조정 규칙을 설정하는 방법을 설명합니다. 이 플랜은 Azure Container Apps 환경을 사용하여 Spring 애플리케이션을 호스트하고 다음과 같은 관리와 지원을 제공합니다.
- 선언적 스케일링 규칙을 통해 자동 수평 스케일링을 관리합니다.
- Azure Container Apps에서 지원하는 모든 스케일링 규칙을 지원합니다.
자세한 내용은 Azure Container Apps 설명서를 참조하세요.
필수 구성 요소
- Azure 구독 Azure를 구독하고 있지 않다면 시작하기 전에 Azure 무료 계정을 참조하세요.
- Azure Spring Apps 표준 사용량 및 전용 플랜 서비스 인스턴스입니다. 자세한 내용은 빠른 시작: Azure Spring Apps 표준 사용량 및 전용 플랜 서비스 인스턴스 프로비전을 참조하세요.
- Azure Spring Apps에 배포된 Spring 앱입니다.
크기 조정 정의
스케일링은 제한과 규칙의 조합으로 정의됩니다.
제한은 Spring에서 허용하는 최소 및 최대 인스턴스 수입니다.
규모 제한 기본값 최소값 최댓값 배포당 최소 인스턴스 수 1 0 30 배포당 최대 인스턴스 수 10 1 30 기본적으로 Spring 애플리케이션의 최소 인스턴스 수는 배포가 항상 실행되도록 1로 설정됩니다. 0으로 스케일 인하려는 경우 최소 인스턴스 개수를 0으로 설정할 수 있습니다.
규칙은 자동 스케일링이 인스턴스를 추가하거나 제거하기 위해 준수하는 조건입니다. 스케일링 규칙에는 스케일링 규칙의 Azure Container Apps 스케일링 규칙 설정 섹션에 설명된 대로 HTTP, TCP, 사용자 지정 규칙이 포함됩니다.
둘 이상의 스케일링 규칙을 정의하는 경우 규칙의 첫 번째 조건이 충족되면 자동 스케일링이 시작됩니다.
폴링 간격 및 쿨다운 기간은 자동 스케일링 중에 발생하는 두 가지 시간 범위입니다.
- 폴링 간격은 규칙에 정의된 대로 실시간 데이터의 각 폴링 작업 간의 시간 범위를 정의합니다. 폴링 간격은 기본적으로 30초로 설정됩니다.
- 예를 들어 자동 스케일링이 마지막으로 메시지 큐를 확인한 후 5분 동안 기다렸다가 비어 있는 경우와 같이 0으로 스케일링할 때만 쿨다운 기간이 적용됩니다.
자동 스케일링 설정
Azure Portal 또는 Azure CLI를 사용하여 애플리케이션에 대한 자동 스케일링을 설정할 수 있습니다.
다음 단계를 통해 자동 스케일링 설정과 규칙을 정의합니다.
- Azure Portal에 로그인합니다.
- Azure 서비스에서 Azure Spring Apps를 선택합니다.
- 이름 열에서 자동 스케일링하려는 Azure Spring Apps 인스턴스를 선택합니다.
- Azure Spring Apps 인스턴스에 대한 개요 페이지의 탐색 창에서 앱을 선택합니다.
- 자동 스케일링할 애플리케이션을 선택합니다.
- 선택한 앱의 개요 페이지의 탐색 창에서 스케일 아웃 을 선택합니다.
- 스케일 아웃(미리 보기) 페이지에서 자동 스케일링하려는 배포를 선택합니다.
- 배포의 인스턴스 제한을 설정합니다.
- 추가를 선택하여 스케일링 규칙을 추가합니다.
사용자 지정 크기 조정 규칙
사용자 지정 규칙 정의에 대한 자세한 내용은 Keda 배율 조정기를 참조하세요. 다음 섹션에서는 MySQL 및 Cron에서 크기 조정 규칙을 설정하는 두 가지 예제를 보여 줍니다.
MySQL 데이터베이스에 자동 크기 조정 규칙 설정
다음 CLI 명령은 Keda MySQL 배율 조정기를 기반으로 Spring 애플리케이션 크기를 자동으로 조정하는 방법을 보여줍니다. 먼저 SQL 연결 문자열을 저장하는 비밀을 만듭니다. 이 비밀은 크기 조정 규칙 인증에 사용됩니다. 그런 다음 테이블의 행 수에 따라 앱 크기를 조정하는 규칙을 설정합니다.
참고 항목
사용 가능한 가장 안전한 인증 흐름을 사용하는 것이 권장됩니다. 데이터베이스, 캐시, 메시징 또는 AI 서비스와 같이 이 절차에서 설명하는 인증 흐름은 애플리케이션에 대한 신뢰 수준이 매우 높고 다른 흐름에 존재하지 않는 위험을 수반합니다. 암호 없는 연결 또는 키 없는 연결에 대한 관리 ID와 같은 더 안전한 옵션이 실행 가능하지 않은 경우에만 이 흐름을 사용합니다. 로컬 컴퓨터 작업의 경우 암호 없는 연결이나 키 없는 연결에 사용자 ID를 사용하는 것이 좋습니다.
az spring app update \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-service-instance-name> \
--name <app-name> \
--secrets mysqlconnectionstring="<username>:<pwd>@tcp(<server name>:3306)/<database name>"
az spring app scale \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-service-instance-name> \
--name <app-name> \
--scale-rule-type mysql \
--scale-rule-name <your rule name> \
--scale-rule-auth "connectionString=mysqlconnectionstring" \
--scale-rule-metadata queryValue=4 query="SELECT count(*) FROM mytable" \
--min-replicas 0 \
--max-replicas 3
Linux cron을 기반으로 규칙 만들기
다음 명령은 Keda Cron 배율 조정기를 기반으로 규칙을 설정하는 방법을 보여줍니다. 복제본은 cron 시간 간격 동안 원하는 수로 크기가 조정됩니다.
az spring app scale \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-service-instance-name> \
--name <app-name> \
--scale-rule-type cron \
--scale-rule-name testscalerule \
--scale-rule-metadata timezone="Asia/Shanghai" \
start="10 * * * *" \
end="15 * * * *" \
desiredReplicas="3" \
--min-replicas 0 \
--max-replicas 3
이벤트 크기 조정
다음 예와 같이 기본 컨테이너 앱의 시스템 로그에서 크기 조정 이벤트를 찾고 KEDA
를 사용하여 EventSource를 필터링할 수 있습니다.
ContainerAppSystemLogs_CL
| where ContainerAppName_s == 'YourAppName' and EventSource_s == 'KEDA'
리소스 정리
이 문서에서 만든 리소스가 더 이상 필요하지 않으면 삭제해야 합니다. 리소스를 삭제하려면 해당 리소스가 포함된 리소스 그룹을 삭제하면 됩니다. Azure Portal을 사용하여 리소스 그룹을 삭제할 수 있습니다. 또는 Azure CLI를 사용하여 리소스 그룹을 삭제하려면 다음 명령을 사용합니다.
echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."