Amazon SQS 기반으로 확장 - Amazon EC2 Auto Scaling

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

Amazon SQS 기반으로 확장

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

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

올바른 지표와 함께 대상 추적 사용

사용자 지정 Amazon SQS 대기열 지표를 기반으로 대상 추적 조정 정책을 사용하는 경우 애플리케이션의 수요 곡선에 맞게 보다 효과적으로 동적 조정을 수행할 수 있습니다. 대상 추적에 대한 지표 선택에 대한 자세한 내용은 지표 선택 단원을 참조하십시오.

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

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

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

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

예제로 설명하기 위해 현재 ApproximateNumberOfMessages가 1,500개이고 플릿의 실행 용량이 10이라고 가정해 보겠습니다. 각 메시지의 평균 처리 시간 0.1초이고 가장 긴 허용 지연 시간이 10초인 경우, 인스턴스당 허용 가능한 백로그는 10/0.1인 100입니다. 즉, 목표 추적 정책의 목표값은 100입니다. 인스턴스당 백로그가 현재 150(1500/10)인 경우 플릿이 확장되고 5개의 인스턴스를 추가하여 목표값 비율을 유지합니다.

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

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

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

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

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

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


                        Amazon EC2 Auto Scaling 아키텍처 다이어그램을 사용하여

제한 사항 및 사전 조건

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

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

  • 사용자 지정 메트릭을 게시한 후에는AWS CLI또는 SDK를 사용하여 사용자 지정된 지표 사양을 가진 대상 추적 조정 정책을 생성할 수 있습니다.

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

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

Amazon SQS 기반으로 확장 구성

1단계: CloudWatch 사용자 지정 지표 만들기

사용자 지정 지표는 지표 이름과 선택한 네임스페이스를 사용하여 정의됩니다. 사용자 지정 지표의 네임스페이스는AWS/. 사용자 지정 메트릭을 게시하는 방법에 대한 자세한 내용은사용자 지정 지표 게시항목의Amazon CloudWatch 사용 설명서.

먼저 AWS 계정에서 정보를 읽어 사용자 지정 지표를 생성하려면 다음 절차를 따르십시오. 그런 다음, 앞 섹션 에서 권장한 인스턴스당 백로그 지표를 계산합니다. 마지막으로 이 수치를 1분 단위로 CloudWatch 에 게시합니다. 가능하면 시스템 로드 변화에 빠르게 대응할 수 있도록 1분 단위로 지표를 조정하는 것이 좋습니다.

CloudWatch 사용자 지정 지표를 생성하려면

  1. SQS 사용대기열 속성명령을 사용하여 대기열에서 대기 중인 메시지 수 (ApproximateNumberOfMessages).

    aws sqs get-queue-attributes --queue-url https://sqs.region.amazonaws.com/123456789/MyQueue \ --attribute-names ApproximateNumberOfMessages
  2. 사용자동 스케일링 그룹 설명명령을 사용하여 그룹의 실행 용량을 가져올 수 있습니다. 이 용량은InService수명 주기 상태입니다. 이 명령은 Auto Scaling 그룹의 인스턴스와 해당 수명 주기 상태를 반환합니다.

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names my-asg
  3. 대기열에서 검색할 수 있는 대략적인 메시지 수를 플릿의 실행 용량으로 나누어 인스턴스당 백로그를 계산합니다.

  4. 결과를 CloudWatch 사용자 지정 지표로 1분마다 게시합니다.

    CLI의 예는 다음과 같습니다.put-metric-data명령입니다.

    aws cloudwatch put-metric-data --metric-name MyBacklogPerInstance --namespace MyNamespace \ --unit None --value 20 --dimensions MyOptionalMetricDimensionName=MyOptionalMetricDimensionValue

애플리케이션에서 지표를 생성하면 데이터가 CloudWatch 로 전송됩니다. 이 지표는 CloudWatch 콘솔에 표시됩니다. 당신은에 로그인하여 액세스 할 수 있습니다AWS Management Console를 클릭하고 CloudWatch 페이지로 이동합니다. 그런 다음 지표 페이지로 이동하거나 검색 상자에서 검색하여 지표를 볼 수 있습니다. 지표 보기에 대한 자세한 내용은 단원을 참조하십시오.사용 가능한 지표 보기Amazon CloudWatch 사용 설명서.

2단계: 대상 추적 조정 정책을 생성하려면

사용자 지정 지표를 게시한 후 사용자 지정 지표 사양을 사용하여 대상 추적 조정 정책을 생성합니다.

대상 추적 조정 정책을 생성하려면

  1. 다음 명령을 사용하여 홈 디렉터리의 config.json 파일에 조정 정책에 대한 목표값을 지정합니다.

    TargetValue에, 인스턴스당 허용 백로그 지표를 계산하여 입력합니다. 이 값을 계산하려면 보통 지연 시간 값을 확인하여, 이 값을 메시지를 처리하는 데 걸리는 평균 시간으로 나눕니다.

    $ cat ~/config.json { "TargetValue":100, "CustomizedMetricSpecification":{ "MetricName":"MyBacklogPerInstance", "Namespace":"MyNamespace", "Dimensions":[ { "Name":"MyOptionalMetricDimensionName", "Value":"MyOptionalMetricDimensionValue" } ], "Statistic":"Average", "Unit":"None" } }
  2. 사용put-scaling-policy명령과 함께config.json파일을 사용하여 조정 정책을 생성합니다.

    aws autoscaling put-scaling-policy --policy-name sqs100-target-tracking-scaling-policy \ --auto-scaling-group-name my-asg --policy-type TargetTrackingScaling \ --target-tracking-configuration file://~/config.json

    이 정책은 확장과 축소에 대해 한 개씩 두 개의 경보를 생성합니다. 또한 CloudWatch Watch에 등록된 정책의 Amazon 리소스 이름 (ARN) 을 반환합니다. 이 이름은 지표가 위반될 때마다 CloudWatch에서 조정을 호출하기 위해 사용합니다.

3단계: 조정 정책 테스트

설정을 마친 후, 조정 정책이 작동하는지 확인합니다. SQS 대기열의 메시지 수를 늘린 다음 Auto Scaling 그룹에서 추가 EC2 인스턴스를 시작했는지 확인하여 테스트할 수 있습니다. 또한 SQS 대기열의 메시지 수를 줄인 다음 Auto Scaling 그룹에서 EC2 인스턴스를 종료했는지 확인하여 테스트할 수 있습니다.

확장 기능을 테스트하려면

  1. 단원을 따르십시오.자습서: Amazon SQS 대기열에 메시지 전송를 클릭하여 대기열에 메시지를 추가합니다. 인스턴스당 백로그 지표가 목표값을 초과하도록 대기열의 메시지 수를 늘려야 합니다.

    변경 사항에 따라 CloudWatch 경보가 발생하기까지 몇 분 정도 걸릴 수 있습니다.

  2. 사용자동 스케일링 그룹 설명명령을 사용하여 그룹에서 새 인스턴스를 시작했는지 확인합니다.

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

축소 기능을 테스트하려면

  1. 단원을 따르십시오.자습서: Amazon SQS 대기열에 메시지 전송를 사용하여 대기열에서 메시지를 제거합니다. 인스턴스당 백로그 지표가 목표값 미만이 되도록 대기열의 메시지 수를 줄여야 합니다.

    변경 사항에 따라 CloudWatch 경보가 발생하기까지 몇 분 정도 걸릴 수 있습니다.

  2. 사용자동 스케일링 그룹 설명명령을 사용하여 그룹에서 새 인스턴스를 종료했는지 확인합니다.

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