기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon SQS 기반 크기 조정
중요
다음 정보와 단계는 사용자 지정 지표로 게시하기 전에 대기열 속성을 사용하여 인스턴스당 Amazon SQS ApproximateNumberOfMessages
대기열 백로그를 계산하는 방법을 보여줍니다. CloudWatch 하지만 이제 지표 수학을 사용하여 자체 지표를 게시하는 데 드는 비용과 노력을 줄일 수 있습니다. 자세한 설명은 지표 수학을 사용하여 Amazon EC2 Auto Scaling에서 대상 추적 조정 정책 생성 섹션을 참조하세요.
이 섹션에서는 Amazon Simple Queue Service(Amazon SQS) 대기열의 시스템 로드 변경에 따라 Auto Scaling 그룹을 조정하는 방법을 보여줍니다. Amazon SQS를 사용하는 방법에 대한 자세한 설명은 Amazon Simple Queue Service 개발자 안내서를 참조하세요.
Amazon SQS 대기열의 활동에 따라 조정에 대해 고려할 경우, 다음과 같은 여러 시나리오가 있습니다. 사용자가 이미지를 업로드하고 그러한 이미지를 온라인으로 사용하는 웹 앱을 예로 들어 보겠습니다. 이 시나리오에서 각 이미지를 게시하려면 먼저 크기를 변경하고 인코딩해야 합니다. 이 앱은 Auto Scaling 그룹에서 EC2 인스턴스를 출범하며 일반적인 업로드 속도를 처리하도록 구성됩니다. 인스턴스 수준을 항상 최신으로 유지하기 위해 비건전 인스턴스는 해지되고 교체됩니다. 앱은 이미지의 원시 비트맵 데이터를 처리하기 위해 SQS 대기열에 배치합니다. 그리고 이미지를 처리한 후, 사용자가 볼 수 있는 처리된 이미지를 게시합니다. 이 시나리오의 아키텍처는 이미지 업로드 수가 항상 일정할 경우, 잘 작동합니다. 그러나 시간이 지남에 따라 업로드 수가 변경되는 경우, 동적 조정을 사용하여 Auto Scaling 그룹 용량의 조정을 고려할 수 있습니다.
올바른 지표에 대상 추적 사용
맞춤 Amazon SQS 대기열 지표에 근거하여 대상 추적 조정 정책을 사용하는 경우, 애플리케이션의 수요 곡선에 맞게 보다 효과적으로 동적 조정을 수행할 수 있습니다. 대상 추적에 대한 지표 선택에 대한 자세한 설명은 지표 선택 섹션을 참조하세요.
대상 추적과 같은 CloudWatch ApproximateNumberOfMessagesVisible
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 그룹을 조정하도록 구성하는 대상 추적 조정 정책을 생성하는 방법을 보여줍니다.
중요
비용을 절감하기 위해서는 지표 수학을 사용해야 한다는 점을 기억하세요. 자세한 설명은 지표 수학을 사용하여 Amazon EC2 Auto Scaling에서 대상 추적 조정 정책 생성 섹션을 참조하세요.
이러한 구성을 위해 세 가지 방법을 사용할 수 있습니다.
-
SQS 대기열의 메시지를 처리하기 위해 EC2 인스턴스를 관리하는 Auto Scaling 그룹.
-
Auto Scaling 그룹의 EC2 인스턴스당 대기열에 CloudWatch 있는 메시지 수를 측정하여 Amazon에 전송할 사용자 지정 지표입니다.
-
사용자 지정 지표와 설정된 목표 값을 기반으로 Auto Scaling 그룹이 확장되도록 구성하는 대상 추적 정책입니다. CloudWatch 경보는 조정 정책을 호출합니다.
다음 다이어그램은 이 구성의 아키텍처를 보여 줍니다.
제한 사항 및 사전 요건
이 구성을 사용하려면 다음과 같은 제한 사항을 숙지해야 합니다.
-
AWS CLI 또는 SDK를 사용하여 사용자 지정 지표를 게시해야 합니다. CloudWatch 그런 다음 를 사용하여 지표를 모니터링할 수 있습니다. 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 기반 크기 조정 구성
1단계: CloudWatch 사용자 지정 지표 생성
맞춤 지표는 지표 이름과 선택한 네임스페이스를 사용하여 정의됩니다. 맞춤 지표를 위한 네임스페이스는 AWS/
로 시작할 수 없습니다. 사용자 지정 지표 게시에 대한 자세한 내용은 Amazon CloudWatch User Guide의 사용자 지정 지표 게시 주제를 참조하십시오.
이 절차에 따라 먼저 AWS 계정에서 정보를 읽고 사용자 지정 지표를 생성하십시오. 그런 다음, 앞 섹션 에서 권장한 인스턴스당 백로그 지표를 계산합니다. 마지막으로, 이 수치를 1분 단위로 CloudWatch 세분화하여 게시하십시오. 가능하면 시스템 로드 변화에 빠르게 대응할 수 있도록 1분 단위로 지표를 조정하는 것이 좋습니다.
CloudWatch 사용자 지정 지표를 만들려면 ()AWS CLI
-
SQS get-queue-attributes 명령을 사용하여 대기열에서 대기 중인 메시지 수(
ApproximateNumberOfMessages
)를 확인합니다.aws sqs get-queue-attributes --queue-url
https://sqs.region.amazonaws.com/123456789/MyQueue
\ --attribute-names ApproximateNumberOfMessages -
describe-auto-scaling-groups명령을 사용하여 그룹의 실행 용량 (
InService
수명 주기 상태의 인스턴스 수) 을 가져옵니다. 이 명령은 Auto Scaling 그룹의 인스턴스와 해당 라이프사이클 상태를 반환합니다.aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names
my-asg
-
대기열에서 검색할 수 있는 대략적인 메시지 수를 그룹의 실행 용량으로 나누어 인스턴스당 백로그를 계산합니다.
-
1분마다 실행되는 스크립트를 생성하여 인스턴스당 백로그 값을 검색하고 이를 CloudWatch 사용자 지정 지표에 게시하십시오. 맞춤 지표를 게시할 때 지표의 이름, 네임스페이스, 단위, 값 및 0개 이상의 차원을 지정합니다. 차원은 차원 이름과 차원 값으로 구성됩니다.
사용자 지정 지표를 게시하려면
기울임꼴로
표시된 자리 표시자 값을 선호하는 지표 이름, 지표 값, 네임스페이스 ("AWS
“로 시작하지 않는 한) 및 차원 (선택 사항) 으로 바꾸고 다음 명령을 실행합니다. put-metric-dataaws cloudwatch put-metric-data --metric-name
MyBacklogPerInstance
--namespaceMyNamespace
\ --unit None --value20
--dimensionsMyOptionalMetricDimensionName=MyOptionalMetricDimensionValue
애플리케이션에서 해당 지표를 생성하면 데이터가 CloudWatch로 전송됩니다. 지표는 콘솔에서 볼 수 있습니다. CloudWatch 에 AWS Management Console 로그인하고 CloudWatch 페이지로 이동하면 액세스할 수 있습니다. 그런 다음 지표 페이지로 이동하거나 검색 상자에서 검색하여 지표를 볼 수 있습니다. 지표 보기에 대한 자세한 내용은 Amazon 사용 CloudWatch 설명서의 사용 가능한 지표 보기를 참조하십시오.
2단계: 대상 추적 조정 정책 생성
이제 생성한 지표를 대상 추적 스케일링 정책에 추가할 수 있습니다.
대상 추적 조정 정책(AWS CLI)을 생성하려면
-
다음
cat
명령을 사용하여 홈 디렉터리에config.json
라는 명칭의 JSON 파일에 조정 정책에 대한 목표값을 저장하고 맞춤 지표 규격을 지정합니다.user input placeholder
를 사용자의 정보로 바꿉니다.TargetValue
에, 인스턴스당 허용 백로그 지표를 계산하여 입력합니다. 이 값을 계산하려면 이전 섹션에서 설명한 대로 보통 지연 시간 값을 확인하여, 이 값을 메시지를 처리하는 데 걸리는 평균 시간으로 나눕니다.1단계에서 만든 지표에 대해 어떤 차원도 지정하지 않았다면 맞춤 지표 규격에 어떤 차원도 포함하지 마세요.
$ cat ~/config.json { "TargetValue":
100
, "CustomizedMetricSpecification":{ "MetricName":"MyBacklogPerInstance
", "Namespace":"MyNamespace
", "Dimensions":[ { "Name":"MyOptionalMetricDimensionName
", "Value":"MyOptionalMetricDimensionValue
" } ], "Statistic":"Average", "Unit":"None" } } -
put-scaling-policy 명령과 전 단계에서 만든
config.json
파일을 사용하여 조정 정책을 생성합니다.aws autoscaling put-scaling-policy --policy-name
sqs100-target-tracking-scaling-policy
\ --auto-scaling-group-namemy-asg
--policy-type TargetTrackingScaling \ --target-tracking-configurationfile://~/config.json
이 정책은 스케일 아웃과 축소에 대해 한 개씩 두 개의 경보를 생성합니다. 또한 등록된 정책의 Amazon Resource Name (ARN) 을 반환하는데 CloudWatch, 이 ARN (Amazon Resource Name) 은 측정치 임계값이 위반될 때마다 크기 조정을 호출하는 데 CloudWatch 사용됩니다.
3단계: 조정 정책 테스트
설정을 마친 후, 조정 정책이 작동하는지 확인합니다. SQS 대기열의 메시지 수를 늘린 다음 Auto Scaling 그룹에서 추가 EC2 인스턴스를 출범했는지 확인하여 테스트할 수 있습니다. 또한 SQS 대기열의 메시지 수를 줄인 다음 Auto Scaling 그룹에서 EC2 인스턴스를 해지했는지 확인하여 테스트할 수 있습니다.
스케일 아웃 기능을 테스트하려면
-
대기열(콘솔)로 메시지 보내기의 단계를 수행하여 대기열에 메시지를 추가합니다. 인스턴스당 백로그 지표가 목표값을 초과하도록 대기열의 메시지 수를 늘려야 합니다.
변경 사항에 따라 경보를 호출하기까지 몇 분 정도 걸릴 수 있습니다.
-
describe-auto-scaling-groups 명령을 사용하여 그룹에서 새 인스턴스를 시작했는지 확인합니다.
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name
my-asg
축소 기능을 테스트하려면
-
대기열에서 메시지를 삭제하려면 메시지 받기 및 삭제하기(콘솔)의 단계를 따르세요. 인스턴스당 백로그 지표가 목표값 미만이 되도록 대기열의 메시지 수를 줄여야 합니다.
변경 사항에 따라 경보를 호출하기까지 몇 분 정도 걸릴 수 있습니다.
-
describe-auto-scaling-groups 명령을 사용하여 그룹에서 새 인스턴스를 종료했는지 확인합니다.
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name
my-asg
Amazon SQS 및 인스턴스 스케일 인 방비
인스턴스를 해지할 때 처리되지 않은 메시지는 아직 실행 중인 인스턴스에서 처리할 수 있도록 SQS 대기열에 반환됩니다. 오래 실행 중인 작업을 수행하는 애플리케이션의 경우, 인스턴스 스케일 인 방비를 선택적으로 사용하여 Auto Scaling 그룹이 축소될 때 어떤 대기열 작업자를 해지할지 제어할 수 있습니다.
다음 유사 코드는 오래 실행되는 대기열 기반 작업자 프로세스가 축소 시 해지되지 않도록 방지하는 한 가지 방법을 보여 줍니다.
while (true) { SetInstanceProtection(False); Work = GetNextWorkUnit(); SetInstanceProtection(True); ProcessWorkUnit(Work); SetInstanceProtection(False); }
자세한 설명은 인스턴스 해지를 원활하게 처리할 수 있도록 Amazon EC2 Auto Scaling에서 애플리케이션을 설계하세요. 섹션을 참조하세요.