Usar a AWS CLI para gerenciar o Auto Scaling do Amazon DynamoDB - Amazon DynamoDB

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usar a AWS CLI para gerenciar o Auto Scaling do Amazon DynamoDB

Em vez de usar o AWS Management Console, você pode usar a AWS Command Line Interface (AWS CLI) para gerenciar o Auto Scaling do Amazon DynamoDB. O tutorial desta seção demonstra como instalar e configurar a AWS CLI para gerenciar o Auto Scaling do DynamoDB. Neste tutorial, você faz o seguinte:

  • Crie uma tabela do DynamoDB chamada TestTable. As configurações de throughput iniciais são 5 unidades de capacidade de leitura e 5 unidades de capacidade de gravação.

  • Crie uma política do Application Auto Scaling para TestTable. A política procura manter uma taxa de destino de 50% entre a capacidade de gravação consumida e a capacidade de gravação provisionada. O intervalo dessa métrica é entre 5 e 10 unidades de capacidade de gravação. (O Application Auto Scaling não tem permissão para ajustar o throughput além desse intervalo.)

  • Execute um programa Python para direcionar o tráfego de gravação para TestTable. Quando a taxa pretendida ultrapassar 50% por período contínuo, o Application Auto Scaling notificará o DynamoDB para aumentar o throughput de TestTable para que os 50% da utilização pretendida possam ser mantidos.

  • Verifique se o DynamoDB ajustou com sucesso a capacidade de gravação provisionada de TestTable.

nota

Você também pode programar o escalonamento do DynamoDB para que ele ocorra em determinados horários. Aprenda as etapas básicas aqui.

Antes de começar

Antes de iniciar o tutorial, é necessário concluir as tarefas a seguir.

Instalar a AWS CLI

Caso ainda não tenha feito isso, você deve instalar e configurar a AWS CLI. Para fazer isso, siga estas instruções no Guia do usuário do AWS Command Line Interface:

Instalar o Python

Parte deste tutorial requer que você execute um programa Python (consulte Etapa 4: direcionar o tráfego de gravação para TestTable). Caso ainda não esteja instalado, você poderá fazer download do Python.

Etapa 1: Crie uma tabela do DynamoDB

Nesta etapa, use a AWS CLI para criar uma TestTable. A chave primária de pk consiste em (chave de partição) e sk (chave de classificação). Ambos os atributos são do tipo Number. As configurações de throughput iniciais são 5 unidades de capacidade de leitura e 5 unidades de capacidade de gravação.

  1. Use o comando AWS CLI a seguir para criar a tabela:

    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. Para verificar o status da tabela, use o comando a seguir.

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

    A tabela está pronta para uso quando seu status é ACTIVE.

Etapa 2: registrar uma capacidade pretendida escalável

Agora você registrará a capacidade de gravação da tabela como uma capacidade pretendida escalável com o Application Auto Scaling. Isso permite que o Application Auto Scaling ajuste a capacidade de gravação provisionada para TestTable, mas somente dentro da faixa de 5 a 10 unidades de capacidade.

nota

O Auto Scaling do DynamoDB requer a presença de uma função vinculada ao serviço (AWSServiceRoleForApplicationAutoScaling_DynamoDBTable) que realize ações de Auto Scaling em seu nome. Esta função é criada automaticamente para você. Para ter mais informações, consulte Funções vinculadas a serviço do Application Auto Scaling, no Guia do usuário do Application Auto Scaling.

  1. Agora, insira o comando a seguir para registrar a capacidade pretendida.

    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. Para verificar o registro, use o comando a seguir:

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

    Você também pode registrar um valor pretendido escalável em relação a um índice secundário global. Por exemplo, em um índice secundário global (“test-index”), o ID do recurso e os argumentos de dimensão escalável são atualizados adequadamente.

    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

Etapa 3: criar uma política de dimensionamento

Nesta etapa, você cria uma política de escalabilidade para TestTable. A política define os detalhes sob os quais o Application Auto Scaling pode ajustar o throughput provisionado da tabela e as ações que serão executadas quando ele fizer isso. Você associa essa política à capacidade pretendida que definiu na etapa anterior (unidades de capacidade de gravação da tabela TestTable).

A política contém os elementos a seguir:

  • PredefinedMetricSpecification: a métrica que o Application Auto Scaling tem permissão para ajustar. Para o DynamoDB, os valores a seguir são válidos para PredefinedMetricType:

    • DynamoDBReadCapacityUtilization

    • DynamoDBWriteCapacityUtilization

  • ScaleOutCooldown: a quantidade mínima de tempo (em segundos) entre cada evento do Application Auto Scaling que aumenta o throughput provisionado. Esse parâmetro permite que o Application Auto Scaling aumente o throughput de forma contínua, mas não agressivamente, em resposta às workloads do mundo real. A configuração padrão de ScaleOutCooldown é 0.

  • ScaleInCooldown: a quantidade mínima de tempo (em segundos) entre cada evento do Application Auto Scaling que diminui o throughput provisionado. Esse parâmetro permite que o Application Auto Scaling diminua o throughput de forma gradual e previsível. A configuração padrão de ScaleInCooldown é 0.

  • TargetValue: o Application Auto Scaling garante que o índice de capacidade consumida para capacidade provisionada permaneça nesse valor ou próximo a ele. Você define TargetValue como uma porcentagem.

nota

Para compreender melhor como o TargetValue funciona, suponha que você tenha uma tabela com uma configuração de throughput provisionado de 200 unidades de capacidade de gravação. Você decide criar uma política de dimensionamento para essa tabela, com um TargetValue de 70%.

Agora, suponha que você comece a direcionar tráfego de gravação para a tabela de forma que o throughput de gravação real seja de 150 unidades de capacidade. A consumed-to-provisioned proporção agora é (150/200), ou 75 por cento. Essa taxa excede o valor pretendido. Portanto, o Application Auto Scaling aumenta a capacidade de gravação provisionada para 215 de modo que a taxa seja (150/215) ou 69,77% — tão próxima ao seu TargetValue quanto possível, mas sem excedê-lo.

Para TestTable, defina TargetValue como 50%. O Application Auto Scaling ajusta a taxa de transferência provisionada da tabela na faixa de 5 a 10 unidades de capacidade (consulteEtapa 2: registrar uma capacidade pretendida escalável) para que a proporção permaneça em ou perto de 50%. consumed-to-provisioned Você define os valores de ScaleOutCooldown e ScaleInCooldown para 60 segundos.

  1. Crie um arquivo denominado scaling-policy.json com o seguinte conteúdo:

    { "PredefinedMetricSpecification": { "PredefinedMetricType": "DynamoDBWriteCapacityUtilization" }, "ScaleOutCooldown": 60, "ScaleInCooldown": 60, "TargetValue": 50.0 }
  2. Use o comando da AWS CLI a seguir para criar a política.

    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. Na saída, observe que o Application Auto Scaling criou dois CloudWatch alarmes da Amazon — um para cada limite superior e inferior da faixa alvo de escalabilidade.

  4. Use o comando da AWS CLI a seguir para visualizar mais detalhes sobre a política de escalabilidade.

    aws application-autoscaling describe-scaling-policies \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --policy-name "MyScalingPolicy"
  5. Na saída, verifique se as configurações da política correspondem às suas especificações de Etapa 2: registrar uma capacidade pretendida escalável e Etapa 3: criar uma política de dimensionamento.

Etapa 4: direcionar o tráfego de gravação para TestTable

Agora, você pode testar a política de escalabilidade gravando dados em TestTable. Para fazer isso, execute um programa Python.

  1. Crie um arquivo denominado bulk-load-test-table.py com o seguinte conteúdo:

    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. Para executar o programa, insira o comando a seguir.

    python bulk-load-test-table.py

    A capacidade de gravação provisionada de TestTable é muito baixa (5 unidades de capacidade de gravação), para que o programa pare ocasionalmente devido a limitações de gravação. Esse comportamento é esperado.

    Deixe o programa continuar em execução enquanto você avança para a próxima etapa.

Etapa 5: visualizar ações do Application Auto Scaling

Nesta etapa, você visualiza as ações do Application Auto Scaling que são iniciadas em seu nome. Você também pode verificar se o Application Auto Scaling atualizou a capacidade de gravação provisionada de TestTable.

  1. Insira o comando a seguir para visualizar as ações do Application Auto Scaling.

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

    Execute esse comando ocasionalmente, enquanto o programa Python está em execução. (Alguns minutos serão necessários antes que sua política de escalabilidade seja invocada.) Você deve finalmente ver a saída a seguir.

    ... { "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" }, ...

    Isso indica que o Application Auto Scaling emitiu uma solicitação UpdateTable para o DynamoDB.

  2. Digite o comando a seguir para verificar se o DynamoDB aumentou a capacidade de gravação da tabela.

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

    As WriteCapacityUnits devem ter sido dimensionadas de 5 para 10.

Etapa 6 (opcional): limpar

Neste tutorial, você criou vários recursos. Você pode excluir esses recursos se eles não forem mais necessários.

  1. Excluir a política de escalabilidade de TestTable.

    aws application-autoscaling delete-scaling-policy \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --scalable-dimension "dynamodb:table:WriteCapacityUnits" \ --policy-name "MyScalingPolicy"
  2. Cancelar o registro de capacidade pretendida escalável.

    aws application-autoscaling deregister-scalable-target \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --scalable-dimension "dynamodb:table:WriteCapacityUnits"
  3. Exclua a tabela TestTable.

    aws dynamodb delete-table --table-name TestTable