메뉴
Amazon EC2 Auto Scaling
사용 설명서

Amazon SQS에 따른 조정

Amazon Simple Queue Service(Amazon SQS)는 애플리케이션 아키텍처의 다양한 구성 요소 간을 이동하는 메시지를 저장하는 확장 가능한 메시지 대기열 시스템입니다. Amazon SQS를 사용하면 웹 서비스 애플리케이션에서 하나의 구성 요소에서 생성하고 다른 구성 요소에서 소비한 메시지를 신속하고 안정적으로 대기열에 포함할 수 있습니다. 대기열은 대기 중인 처리가 있는 메시지에 대한 임시 리포지토리입니다. 자세한 내용은 Amazon Simple Queue Service 개발자 안내서를 참조하십시오.

예를 들어, 고객으로부터 주문을 받는 웹 애플리케이션이 있다고 가정합니다. 이 애플리케이션은 일반적인 주문량을 처리하도록 구성된 Auto Scaling 그룹에서 EC2 인스턴스를 실행합니다. 이 애플리케이션은 처리를 위해 선택될 때까지 Amazon SQS 대기열에 주문을 배치한 후 해당 주문을 처리한 다음 처리된 주문을 다시 고객에게 전송합니다. 다음 다이어그램은 이 예의 아키텍처를 보여 줍니다.

 대기열 설계 다이어그램을 사용한 Auto Scaling

이 아키텍처는 주문 수준이 항상 동일한 수준을 유지하는 경우에 작동합니다. 그렇다면 주문 수준이 변경되면 어떻게 됩니까? 주문이 늘어나면 추가 EC2 인스턴스를 시작하고 주문이 줄어들면 추가 EC2 인스턴스를 종료해야 할 수 있습니다. 주문이 예측 가능한 일정으로 늘어나거나 줄어들면 시간과 날짜를 지정하여 조정 활동을 수행하도록 할 수 있습니다. 자세한 내용은 Amazon EC2 Auto Scaling의 예약된 조정 단원을 참조하십시오. 그렇지 않으면 SQS 대기열에 있는 메시지 수와 같은 기준에 따라 조정할 수 있습니다. 자세한 내용은 Amazon EC2 Auto Scaling의 동적 조정 단원을 참조하십시오.

대기열은 애플리케이션의 로드를 확인할 수 있는 편리한 메커니즘입니다. 대기열 길이(대기열에서 검색에 사용할 수 있는 메시지 수)를 사용하여 로드를 확인할 수 있습니다. 대기열의 각 메시지가 사용자의 요청을 나타내므로 대기열 길이를 측정하면 해당 애플리케이션의 로드를 대략적으로 알 수 있습니다. CloudWatch는 SQS와 통합하여 Amazon SQS 대기열에서 지표를 수집, 조회하고 분석할 수 있습니다. Amazon SQS에서 보낸 지표를 사용하여 원하는 시점의 SQS 대기열 길이를 확인할 수 있습니다. Amazon SQS에서 CloudWatch에 보낸 모든 지표 목록은 Amazon Simple Queue Service 개발자 안내서Amazon SQS 지표를 참조하십시오.

다음 예에서는 SQS 대기열에 있는 메시지 수에 따라 Auto Scaling 그룹을 조정하도록 구성하는 조정 정책을 생성합니다.

AWS CLI를 사용하여 Amazon SQS에 맞게 조정

다음 예에서는 축소 및 확장 정책을 생성하는 방법과 함께 해당 조정 정책에 대해 CloudWatch 경보를 생성, 확인 및 검증하는 방법을 보여 줍니다. 여기에서는 이미 SQS 대기열, Auto Scaling그룹, 또한 SQS 대기열을 사용하는 애플리케이션을 실행하는 EC2 인스턴스가 있는 것으로 가정합니다.

조정 정책 생성

지정된 조건이 변경될 때 Auto Scaling 그룹이 무엇을 수행할지 정의하는 조정 정책을 생성할 수 있습니다.

조정 정책을 생성하려면

  1. 다음 put-scaling-policy 명령을 사용하여 Auto Scaling 그룹에서 EC2 인스턴스가 하나씩 늘어나는 확장 정책을 생성합니다.

    aws autoscaling put-scaling-policy --policy-name my-sqs-scaleout-policy -–auto-scaling-group-name my-asg --scaling-adjustment 1 --adjustment-type ChangeInCapacity

    출력에는 새 정책에 대한 Amazon 리소스 이름(ARN)이 포함되어 있습니다. ARN을 안전한 위치에 저장합니다. 이것은 CloudWatch 경보를 생성할 때 필요합니다.

  2. 다음 put-scaling-policy 명령을 사용하여 Auto Scaling 그룹에서 EC2 인스턴스가 하나씩 줄어드는 축소 정책을 생성합니다.

    aws autoscaling put-scaling-policy --policy-name my-sqs-scalein-policy --auto-scaling-group-name my-asg --scaling-adjustment -1 --adjustment-type ChangeInCapacity

    출력에 새 정책에 대한 ARN이 포함됩니다. ARN을 안전한 위치에 저장합니다. 이것은 CloudWatch 경보를 생성할 때 필요합니다.

CloudWatch 경보 생성

다음으로 조사하려는 지표를 식별하여 조정 조건을 정의하여 경보를 생성한 다음 해당 경보를 이전 작업에서 생성한 조정 정책과 연결합니다.

참고

모든 활성 SQS 대기열에서 5분마다 CloudWatch에 지표를 전송합니다. 여기에서는 경보 Period300초 이상으로 설정하는 것이 좋습니다. 경보 Period300초 미만으로 설정하면 지표를 기다리는 도중 경보가 INSUFFICIENT_DATA 상태가 될 수 있습니다.

CloudWatch 경보를 생성하려면

  1. 다음 put-metric-alarm 명령을 사용하여 처리에 사용할 수 있는 대기열의 메시지 수(ApproximateNumberOfMessagesVisible)가 3개로 증가하거나 적어도 5분 동안 3개 이상을 유지하는 경우 Auto Scaling 그룹의 크기를 증가시키는 경보를 생성합니다.

    aws cloudwatch put-metric-alarm --alarm-name AddCapacityToProcessQueue --metric-name ApproximateNumberOfMessagesVisible --namespace "AWS/SQS" --statistic Average --period 300 --threshold 3 --comparison-operator GreaterThanOrEqualToThreshold --dimensions Name=QueueName,Value=my-queue --evaluation-periods 2 --alarm-actions arn
  2. 다음 put-metric-alarm 명령을 사용하여 처리에 사용할 수 있는 대기열의 메시지 수(ApproximateNumberOfMessagesVisible)가 1개로 줄어들거나 적어도 5분 동안 1개 이하를 유지하는 경우 Auto Scaling 그룹의 크기를 줄이는 경보를 생성합니다.

    aws cloudwatch put-metric-alarm --alarm-name RemoveCapacityFromProcessQueue --metric-name ApproximateNumberOfMessagesVisible --namespace "AWS/SQS" --statistic Average --period 300 --threshold 1 --comparison-operator LessThanOrEqualToThreshold --dimensions Name=QueueName,Value=my-queue --evaluation-periods 2 --alarm-actions arn

조정 정책 및 CloudWatch 경보 확인

CloudWatch 경보와 조정 정책이 생성되었는지 확인할 수 있습니다.

CloudWatch 경보를 확인하려면

다음 describe-alarms 명령을 사용합니다.

aws cloudwatch describe-alarms --alarm-names AddCapacityToProcessQueue RemoveCapacityFromProcessQueue

조정 정책을 확인하려면

다음 describe-policies 명령을 사용합니다.

aws autoscaling describe-policies --auto-scaling-group-name my-asg

확장 및 축소 정책 테스트

SQS 대기열의 메시지 수를 늘린 다음 Auto Scaling 그룹에서 추가 EC2 인스턴스를 시작했는지 확인하여 확장 정책을 테스트할 수 있습니다. 마찬가지로 SQS 대기열의 메시지 수를 줄인 다음 Auto Scaling 그룹에서 EC2 인스턴스를 종료했는지 확인하여 축소 정책을 테스트할 수 있습니다.

확장 정책을 테스트하려면

  1. Amazon SQS 시작하기의 단계를 수행하여 SQS 대기열에 메시지를 추가합니다. 대기열에 메시지가 3개 이상 있는지 확인합니다.

    SQS 대기열 지표 ApproximateNumberOfmessagesVisible에서 CloudWatch 경보를 호출하려면 몇 분이 소요됩니다. CloudWatch 경보가 호출되면 조정 정책에 EC2 인스턴스 1개를 시작하라는 알림이 전송됩니다.

  2. 다음 describe-auto-scaling-groups 명령을 사용하여 그룹에서 인스턴스를 시작했는지 확인합니다.

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg

축소 정책을 테스트하려면

  1. Amazon SQS 시작하기의 단계를 수행하여 SQS 대기열에서 메시지를 제거합니다. 대기열에 메시지가 1개 이하인지 확인합니다.

    SQS 대기열 지표 ApproximateNumberOfmessagesVisible에서 CloudWatch 경보를 호출하려면 몇 분이 소요됩니다. CloudWatch 경보가 호출되면 조정 정책에 EC2 인스턴스 1개를 종료하라는 알림이 전송됩니다.

  2. 다음 describe-auto-scaling-groups 명령을 사용하여 그룹에서 인스턴스를 종료했는지 확인합니다.

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg