AWS CLI를 사용하여 DynamoDB Auto Scaling 관리 - Amazon DynamoDB

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

AWS CLI를 사용하여 DynamoDB Auto Scaling 관리

AWS Management Console을 사용하는 대신 AWS Command Line Interface(AWS CLI)를 사용하여 Amazon DynamoDB Auto Scaling을 관리할 수 있습니다. 이 단원의 자습서에서는 DynamoDB Auto Scaling을 관리할 수 있도록 AWS CLI를 설치 및 구성하는 방법을 보여 줍니다. 이 자습서에서는 다음 작업을 수행합니다.

  • TestTable이라는 DynamoDB 테이블을 생성합니다. 이 테이블의 초기 처리량 설정은 읽기 용량 단위 5, 쓰기 용량 단위 5입니다.

  • TestTable에 대한 Application Auto Scaling 정책을 생성합니다. 정책은 사용된 쓰기 용량과 할당된 쓰기 용량 사이의 비율이 50퍼센트 목표 비율이 되도록 유지하려 합니다. 이 수치의 범위는 쓰기 용량 단위 5-10입니다. (Application Auto Scaling은 이 범위를 초과하여 처리량을 조정할 수 없습니다.)

  • Python 프로그램을 실행하여 TestTable에 대해 쓰기 트래픽을 실행합니다. 목표 비율이 장기적으로 50퍼센트를 초과할 경우 Application Auto Scaling은 목표 사용률의 50퍼센트가 유지될 수 있도록 DynamoDB에 TestTable 처리량을 상향 조정하도록 알립니다.

  • DynamoDB가 TestTable에 대한 프로비저닝된 쓰기 용량을 조정했는지 확인합니다.

참고

또한 DynamoDB 스케일링이 특정 시간에 이루어지도록 스케줄링할 수 있습니다. 여기에서 기본 단계를 알아보십시오.

시작하기 전 준비 사항

이 자습서를 시작하기 전에 다음 작업을 완료해야 합니다.

AWS CLI 설치

AWS CLI를 아직 설치하지 않았다면 이를 설치하고 구성해야 합니다. 이를 위해 AWS Command Line Interface 사용 설명서에서 다음 지침을 따르세요.

Python 을 설치합니다.

이 자습서에서는 Python 프로그램을 실행해야 합니다.(4단계: 쓰기 트래픽을 다음으로 유도하십시오. TestTable 참조). 아직 설치하지 않은 경우 Python을 다운로드 할 수 있습니다 .

1단계: DynamoDB 테이블 생성

이 단계에서는 AWS CLI를 사용하여 TestTable를 생성합니다. 기본 키는 pk(파티션 키)와 sk(정렬 키)로 구성됩니다. 이 두 가지 속성 모두 Number 유형입니다. 이 테이블의 초기 처리량 설정은 읽기 용량 단위 5, 쓰기 용량 단위 5입니다.

  1. 다음 AWS CLI 명령을 사용하여 테이블을 생성합니다.

    aws dynamodb create-table \ --table-name TestTable \ --attribute-definitions \ AttributeName=pk,AttributeType=N \ AttributeName=sk,AttributeType=N \ --key-schema \ AttributeName=pk,KeyType=HASH \ AttributeName=sk,KeyType=RANGE \ --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5
  2. 테이블 상태를 확인하려면 다음 명령을 사용하십시오.

    aws dynamodb describe-table \ --table-name TestTable \ --query "Table.[TableName,TableStatus,ProvisionedThroughput]"

    테이블 상태가 ACTIVE이면 사용할 수 있습니다.

2단계: 크기 조정 가능 대상 등록

이제 Application Auto Scaling을 사용하여 테이블의 쓰기 용량을 확장 가능 목표로 등록할 수 있습니다. 이를 통해 Application Auto Scaling은 프로비저닝된 쓰기 용량을 5~10 용량 단위 범위 내에서만 조정할 수 있습니다. TestTable

참고

DynamoDB Auto Scaling을 사용하려면 사용자 대신 Auto Scaling 작업을 수행하는 서비스 연결 역할(AWSServiceRoleForApplicationAutoScaling_DynamoDBTable)이 있어야 합니다. 이 역할은 자동으로 생성됩니다. 자세한 정보는 Application Auto Scaling 사용 설명서Application Auto Scaling 서비스 연결 역할을 참조하세요.

  1. 다음 명령을 입력하여 확장 가능 목표를 등록합니다.

    aws application-autoscaling register-scalable-target \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --scalable-dimension "dynamodb:table:WriteCapacityUnits" \ --min-capacity 5 \ --max-capacity 10
  2. 등록을 확인하려면 다음 명령을 사용합니다.

    aws application-autoscaling describe-scalable-targets \ --service-namespace dynamodb \ --resource-id "table/TestTable"
    참고

    글로벌 보조 인덱스에 대한 확장 가능 목표를 등록할 수도 있습니다. 예를 들어 글로벌 보조 인덱스("test-index")의 경우 리소스 ID와 확장형 차원 인수는 적절하게 업데이트됩니다.

    aws application-autoscaling register-scalable-target \ --service-namespace dynamodb \ --resource-id "table/TestTable/index/test-index" \ --scalable-dimension "dynamodb:index:WriteCapacityUnits" \ --min-capacity 5 \ --max-capacity 10

3단계: 크기 조정 정책 생성

이 단계에서는 TestTable의 확장 정책을 만듭니다. 이 정책은 Application Auto Scaling이 테이블의 프로비저닝된 처리량을 조정할 수 있는 위치와 조정 시 수행하는 작업에 대한 정보를 정의합니다. 이 정책을 전 단계에서 정의한 확장 가능 목표(TestTable 테이블에 대한 쓰기 용량 단위)와 연결합니다.

정책에는 다음 요소가 포함됩니다.

  • PredefinedMetricSpecification - Application Auto Scaling이 조정할 수 있는 지표입니다. DynamoDB의 경우 PredefinedMetricType에 다음 값을 사용할 수 있습니다.

    • DynamoDBReadCapacityUtilization

    • DynamoDBWriteCapacityUtilization

  • ScaleOutCooldown - 프로비저닝된 처리량을 증가시키는 각 Application Auto Scaling 이벤트 간의 최소 시간(초). 이 파라미터를 사용하면 Application Auto Scaling이 실제 워크로드에 대응하여 지속적으로 과도하지 않게 처리량을 올릴 수 있습니다. ScaleOutCooldown의 기본 설정은 0입니다.

  • ScaleInCooldown - 프로비저닝된 처리량을 줄이는 각 Application Auto Scaling 이벤트 간의 최소 시간(초). 이 파라미터를 사용하면 Application Auto Scaling이 처리량을 점진적으로 예측 가능하게 줄일 수 있습니다. ScaleInCooldown의 기본 설정은 0입니다.

  • TargetValue - Application Auto Scaling이 사용되는 용량과 프로비저닝된 용량의 비율을 이 값 수준으로 유지하도록 합니다. TargetValue를 백분율로 지정합니다.

참고

TargetValue의 용도를 자세히 이해하기 위해 쓰기 용량 단위 200으로 할당 처리량을 설정한 테이블을 예로 들어 보겠습니다. 이 테이블에 대해 TargetValue가 70퍼센트인 확장 정책을 만들려고 합니다.

테이블에 대한 쓰기 트래픽을 시작했더니 실제 쓰기 처리량이 150 용량 단위였다고 가정해 보겠습니다. 현재 consumed-to-provisioned 비율은 (150/200), 즉 75% 입니다. 이 비율은 목표를 초과하므로 Application Auto Scaling은 프로비저닝된 쓰기 용량을 215로 늘려 비율이 (150/215) 또는 69.77%(TargetValue를 초과하지 않지만 최대한 가깝게)가 되게 합니다.

TestTable의 경우 TargetValue를 50%로 설정합니다. Application Auto Scaling은 테이블의 프로비저닝된 처리량을 용량 단위 5—10 (참조2단계: 크기 조정 가능 대상 등록) 범위 내에서 조정하여 consumed-to-provisioned 비율이 50% 가까이 유지되도록 합니다. ScaleOutCooldownScaleInCooldown의 값을 60초로 설정합니다.

  1. 다음 콘텐츠를 가진 scaling-policy.json이라는 파일을 생성합니다:

    { "PredefinedMetricSpecification": { "PredefinedMetricType": "DynamoDBWriteCapacityUtilization" }, "ScaleOutCooldown": 60, "ScaleInCooldown": 60, "TargetValue": 50.0 }
  2. 다음 AWS CLI 명령을 사용하여 정책을 생성합니다.

    aws application-autoscaling put-scaling-policy \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --scalable-dimension "dynamodb:table:WriteCapacityUnits" \ --policy-name "MyScalingPolicy" \ --policy-type "TargetTrackingScaling" \ --target-tracking-scaling-policy-configuration file://scaling-policy.json
  3. 출력에서 Application Auto Scaling은 조정 대상 범위의 상한과 하한에 대해 각각 CloudWatch 하나씩 두 개의 Amazon 경보를 생성했음을 알 수 있습니다.

  4. 다음 AWS CLI 명령을 사용하여 조정 정책에 대한 세부 정보를 확인합니다.

    aws application-autoscaling describe-scaling-policies \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --policy-name "MyScalingPolicy"
  5. 출력에서 정책 설정이 2단계: 크기 조정 가능 대상 등록 및 3단계: 크기 조정 정책 생성의 사양과 일치함을 확인합니다.

4단계: 쓰기 트래픽을 다음으로 유도하십시오. TestTable

이제 TestTable에 데이터를 써서 확장 정책을 테스트할 수 있습니다. 이렇게 하려면 Python 프로그램을 실행합니다.

  1. 다음 콘텐츠를 가진 bulk-load-test-table.py이라는 파일을 생성합니다:

    import boto3 dynamodb = boto3.resource('dynamodb') table = dynamodb.Table("TestTable") filler = "x" * 100000 i = 0 while (i < 10): j = 0 while (j < 10): print (i, j) table.put_item( Item={ 'pk':i, 'sk':j, 'filler':{"S":filler} } ) j += 1 i += 1
  2. 다음 명령을 입력하여 프로그램을 실행합니다.

    python bulk-load-test-table.py

    TestTable의 프로비저닝된 쓰기 용량은 쓰기 용량 단위 5로 매우 낮아서 쓰기 조절(throttling)로 인해 프로그램이 때때로 중단됩니다. 이는 예상된 동작입니다.

    다음 단계로 이동하여 프로그램이 지속적으로 실행될 수 있도록 해 보겠습니다.

5단계: Application Auto Scaling 작업 보기

이 단계에서는 시작된 Application Auto Scaling 작업을 확인합니다. 또한 Application Auto Scaling이 TestTable의 프로비저닝된 쓰기 용량을 업데이트했는지 확인합니다.

  1. 다음 명령을 입력하여 Application Auto Scaling 작업을 확인합니다.

    aws application-autoscaling describe-scaling-activities \ --service-namespace dynamodb

    Python 프로그램이 실행되는 동안 이 명령을 때때로 다시 실행하십시오. (조정 정책이 호출되려면 몇 분 정도 걸립니다.) 다음과 같은 출력이 표시됩니다.

    ... { "ScalableDimension": "dynamodb:table:WriteCapacityUnits", "Description": "Setting write capacity units to 10.", "ResourceId": "table/TestTable", "ActivityId": "0cc6fb03-2a7c-4b51-b67f-217224c6b656", "StartTime": 1489088210.175, "ServiceNamespace": "dynamodb", "EndTime": 1489088246.85, "Cause": "monitor alarm AutoScaling-table/TestTable-AlarmHigh-1bb3c8db-1b97-4353-baf1-4def76f4e1b9 in state ALARM triggered policy MyScalingPolicy", "StatusMessage": "Successfully set write capacity units to 10. Change successfully fulfilled by dynamodb.", "StatusCode": "Successful" }, ...

    이는 Application Auto Scaling이 DynamoDB에 UpdateTable 요청을 보냈음을 나타냅니다.

  2. 다음 명령을 입력하여 DynamoDB가 테이블의 쓰기 용량을 늘렸음을 확인합니다.

    aws dynamodb describe-table \ --table-name TestTable \ --query "Table.[TableName,TableStatus,ProvisionedThroughput]"

    WriteCapacityUnits5에서 10으로 확장되었습니다.

(선택 사항) 6단계: 정리

이 자습서에서 몇 가지 리소스를 만들어 보았습니다. 이러한 리소스가 더 이상 필요하지 않으면 삭제하면 됩니다.

  1. TestTable에 대한 조정 정책을 삭제합니다.

    aws application-autoscaling delete-scaling-policy \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --scalable-dimension "dynamodb:table:WriteCapacityUnits" \ --policy-name "MyScalingPolicy"
  2. 확장 가능 목표의 등록을 취소합니다.

    aws application-autoscaling deregister-scalable-target \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --scalable-dimension "dynamodb:table:WriteCapacityUnits"
  3. TestTable 테이블을 삭제합니다.

    aws dynamodb delete-table --table-name TestTable