쿠키 기본 설정 선택

당사는 사이트와 서비스를 제공하는 데 필요한 필수 쿠키 및 유사한 도구를 사용합니다. 고객이 사이트를 어떻게 사용하는지 파악하고 개선할 수 있도록 성능 쿠키를 사용해 익명의 통계를 수집합니다. 필수 쿠키는 비활성화할 수 없지만 '사용자 지정' 또는 ‘거부’를 클릭하여 성능 쿠키를 거부할 수 있습니다.

사용자가 동의하는 경우 AWS와 승인된 제3자도 쿠키를 사용하여 유용한 사이트 기능을 제공하고, 사용자의 기본 설정을 기억하고, 관련 광고를 비롯한 관련 콘텐츠를 표시합니다. 필수가 아닌 모든 쿠키를 수락하거나 거부하려면 ‘수락’ 또는 ‘거부’를 클릭하세요. 더 자세한 내용을 선택하려면 ‘사용자 정의’를 클릭하세요.

Amazon SQS 기반 조정 정책

포커스 모드
Amazon SQS 기반 조정 정책 - Amazon EC2 Auto Scaling

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

중요

다음 정보 및 단계는 CloudWatch에 사용자 지정 지표로 게시하기 전에 ApproximateNumberOfMessages 대기열 속성을 사용하여 인스턴스당 Amazon SQS 대기열 백로그를 계산하는 방법을 보여줍니다. 하지만 이제 지표 수학을 사용하여 자체 지표를 게시하는 데 드는 비용과 노력을 줄일 수 있습니다. 자세한 설명은 지표 수식을 사용하여 대상 추적 조정 정책 생성 섹션을 참조하세요.

이 섹션에서는 Amazon Simple Queue Service(Amazon SQS) 대기열의 시스템 로드 변경에 따라 Auto Scaling 그룹을 조정하는 방법을 보여줍니다. Amazon SQS를 사용하는 방법에 대한 자세한 설명은 Amazon Simple Queue Service 개발자 안내서를 참조하세요.

Amazon SQS 대기열의 활동에 따라 조정에 대해 고려할 경우, 다음과 같은 여러 시나리오가 있습니다. 사용자가 이미지를 업로드하고 그러한 이미지를 온라인으로 사용하는 웹 앱을 예로 들어 보겠습니다. 이 시나리오에서 각 이미지를 게시하려면 먼저 크기를 변경하고 인코딩해야 합니다. 이 앱은 Auto Scaling 그룹에서 EC2 인스턴스를 시작하며 일반적인 업로드 속도를 처리하도록 구성됩니다. 인스턴스 수준을 항상 최신으로 유지하기 위해 비건전 인스턴스는 해지되고 교체됩니다. 앱은 이미지의 원시 비트맵 데이터를 처리하기 위해 SQS 대기열에 배치합니다. 그리고 이미지를 처리한 후, 사용자가 볼 수 있는 처리된 이미지를 게시합니다. 이 시나리오의 아키텍처는 이미지 업로드 수가 항상 일정할 경우, 잘 작동합니다. 그러나 시간이 지남에 따라 업로드 수가 변경되는 경우, 동적 조정을 사용하여 Auto Scaling 그룹 용량의 조정을 고려할 수 있습니다.

올바른 지표에 대상 추적 사용

사용자 지정 Amazon SQS 대기열 지표에 근거하여 대상 추적 조정 정책을 사용하는 경우, 애플리케이션의 수요 곡선에 맞게 보다 효과적으로 동적 조정을 수행할 수 있습니다. 대상 추적에 대한 지표 선택에 대한 자세한 설명은 지표 선택 섹션을 참조하세요.

대상 추적용 ApproximateNumberOfMessagesVisible과 같이 CloudWatch Amazon SQS 지표를 사용할 때의 문제는 대기열의 메시지 수가 대기열에서 메시지를 처리하는 Auto Scaling 그룹의 크기에 비례하여 변경되지 않을 수 있다는 것입니다. SQS 대기열의 메시지 수가 필요한 인스턴스 수를 단독으로 정의하지는 않습니다. 하지만 Auto Scaling 그룹의 인스턴스 수는 메시지를 처리하는 데 걸리는 시간이나 허용되는 지연 시간(대기열 지연) 등과 같은 여러 요인의 영향을 받을 수 있습니다.

해결 방법은 인스턴스당 백로그 지표와 목표값을 사용하여 인스턴스당 허용 백로그를 유지하는 것입니다. 이 값은 다음과 같이 계산할 수 있습니다.

  • 인스턴스당 백로그: 인스턴스당 백로그를 계산하려면 ApproximateNumberOfMessages 대기열 속성을 사용하여 SQS 대기열의 길이(대기열에서 검색할 수 있는 메시지 수)를 확인합니다. 이 값을 플릿의 실행 용량(Auto Scaling 그룹에서 상태가 InService인 인스턴스 수)으로 나눠서 인스턴스당 백로그를 산출합니다.

  • 인스턴스당 허용되는 백로그: 목표값을 계산하려면 먼저 애플리케이션에서 허용할 수 있는 지연 시간을 확인하세요. 그런 다음 이 허용 지연 시간 값을, EC2 인스턴스가 메시지를 처리하기 위해 소요하는 평균 시간으로 나눕니다.

예컨대, 현재 인스턴스 10개로 구성된 Auto Scaling 그룹이 있고, 대기열(ApproximateNumberOfMessages)에 표시되는 메시지 수가 1,500개라고 가정해 보겠습니다. 각 메시지의 평균 처리 시간이 0.1초이고 가장 긴 허용 지연 시간이 10초인 경우, 인스턴스당 허용 가능한 백로그는 10/0.1인 100개의 메시지입니다. 즉, 목표 추적 정책의 목표값은 100입니다. 인스턴스당 백로그가 목표 값에 도달하면 스케일 아웃 이벤트가 발생합니다. 인스턴스당 백로그가 이미 150개의 메시지(1,500개의 메시지/10개의 인스턴스)이므로 그룹이 스케일 아웃되고 5개의 인스턴스를 추가하여 목표 값 백분율을 유지합니다.

다음 절차에서는 사용자 지정 지표를 게시하고 이러한 계산에 따라 Auto Scaling 그룹을 조정하도록 구성하는 대상 추적 조정 정책을 생성하는 방법을 보여줍니다.

중요

비용을 절감하기 위해서는 지표 수학을 사용해야 한다는 점을 기억하세요. 자세한 설명은 지표 수식을 사용하여 대상 추적 조정 정책 생성 섹션을 참조하세요.

이러한 구성을 위해 세 가지 방법을 사용할 수 있습니다.

  • SQS 대기열의 메시지를 처리하기 위해 EC2 인스턴스를 관리하는 Auto Scaling 그룹.

  • Auto Scaling 그룹의 EC2 인스턴스당 대기열의 메시지 수를 측정하여 Amazon CloudWatch로 전송되는 사용자 지정 지표.

  • 사용자 지정 지표와 설정된 목푯값에 따라 크기를 조정하도록 Auto Scaling 그룹을 구성하는 대상 추적 정책. CloudWatch 경보는 조정 정책을 호출합니다.

다음 다이어그램은 이 구성의 아키텍처를 보여 줍니다.

대기열 아키텍처 다이어그램을 사용한 Amazon EC2 Auto Scaling

제한 사항 및 사전 요건

이 구성을 사용하려면 다음과 같은 제한 사항을 숙지해야 합니다.

  • 사용자 지정 지표를 CloudWatch에 게시하려면 AWS CLI 또는 SDK를 사용해야 합니다. 그런 다음를 사용하여 지표를 모니터링할 수 있습니다 AWS Management Console.

  • Amazon EC2 Auto Scaling 콘솔은 사용자 지정 지표를 사용하는 대상 추적 조정 정책을 지원하지 않습니다. AWS CLI 또는 SDK를 사용하여 조정 정책에 대한 사용자 지정 지표를 지정해야 합니다.

다음 섹션에서는 수행해야 하는 작업에 AWS CLI 를 사용하도록 안내합니다. 예컨대, 대기열의 현재 사용을 반영하는 지표 데이터를 가져오려면 SQS get-queue-attributes 명령을 사용합니다. CLI가 설치되고 구성되어 있는지 확인합니다.

시작하기 전에 사용할 Amazon SQS 대기열이 있어야 합니다. 다음 섹션에서는 대기열(표준 또는 FIFO), Auto Scaling 그룹, 대기열을 사용하는 애플리케이션에서 실행 중인 EC2 인스턴스가 이미 있는 것으로 가정합니다. Amazon SQS에 대한 자세한 설명은 Amazon Simple Queue Service 개발자 안내서를 참조하세요.

Amazon SQS 및 인스턴스 스케일 인 방비

인스턴스를 해지할 때 처리되지 않은 메시지는 아직 실행 중인 인스턴스에서 처리할 수 있도록 SQS 대기열에 반환됩니다. 오래 실행 중인 작업을 수행하는 애플리케이션의 경우, 인스턴스 스케일 인 방비를 선택적으로 사용하여 Auto Scaling 그룹이 축소될 때 어떤 대기열 작업자를 해지할지 제어할 수 있습니다.

다음 유사 코드는 오래 실행되는 대기열 기반 작업자 프로세스가 축소 시 해지되지 않도록 방지하는 한 가지 방법을 보여 줍니다.

while (true) { SetInstanceProtection(False); Work = GetNextWorkUnit(); SetInstanceProtection(True); ProcessWorkUnit(Work); SetInstanceProtection(False); }

자세한 설명은 인스턴스 종료를 원활하게 처리할 수 있도록 애플리케이션 설계 섹션을 참조하세요.

프라이버시사이트 이용 약관쿠키 기본 설정
© 2025, Amazon Web Services, Inc. 또는 계열사. All rights reserved.