Uso de la AWS CLI para administrar la función Auto Scaling de DynamoDB - Amazon DynamoDB

Uso de la AWS CLI para administrar la función Auto Scaling de DynamoDB

En lugar de utilizar la AWS Management Console, puede utilizar la AWS Command Line Interface (AWS CLI) para administrar la función Auto Scaling de Amazon DynamoDB. En el tutorial de esta sección se muestra cómo instalar y configurar la AWS CLI para administrar la función Auto Scaling de DynamoDB. En este tutorial, aprenderá a hacer lo siguiente:

  • Creación de una tabla de DynamoDB llamada TestTable. Los ajustes de desempeño iniciales son 5 unidades de capacidad de lectura y 5 unidades de capacidad de escritura.

  • Cree una política Auto Scaling de aplicaciones para TestTable. La política está dirigida a mantener una proporción objetivo del 50 % entre la capacidad de escritura consumida y la capacidad de escritura provisionada. El rango de esta métrica está comprendido entre 5 y 10 unidades de capacidad de escritura. (Auto Scaling de aplicaciones no puede ajustar el rendimiento fuera de este rango).

  • Ejecute un programa en Python para dirigir tráfico de escritura a TestTable. Cuando la proporción objetivo supere el 50 % durante un periodo prolongado, el Auto Scaling de aplicaciones se lo notificará a DynamoDB para que ajuste el rendimiento de TestTable al alza y, de este modo, mantener el 50 % de utilización de destinos.

  • Compruebe que DynamoDB haya ajustado correctamente la capacidad de escritura aprovisionada para TestTable.

nota

También puede programar el escalado de DynamoDB para que se realice en determinados momentos. Descubra los pasos básicos aquí.

Antes de empezar

Complete las siguientes tareas antes de comenzar el tutorial.

Instalar la AWS CLI

Si aún no lo ha hecho, debe instalar y configurar la AWS CLI. Para ello, siga las siguientes instrucciones en la Guía del usuario de AWS Command Line Interface:

Instalación de Python

Una parte de este tutorial requiere que se ejecute un programa en Python (consulte Paso 4: dirigir tráfico de escritura a TestTable). Si aún no lo tiene instalado, puede descargar Python.

Paso 1: crear una tabla de DynamoDB

En este paso, utilice la AWS CLI para crear una TestTable. La clave principal consta de pk (clave de partición) y sk (clave de ordenación). Ambos atributos son de tipo Number. Los ajustes de desempeño iniciales son 5 unidades de capacidad de lectura y 5 unidades de capacidad de escritura.

  1. Utilice el siguiente comando de la AWS CLI para crear la tabla.

    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 comprobar el estado de la tabla, use el comando siguiente.

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

    La tabla está lista para usarla cuando su estado es ACTIVE.

Paso 2: registrar un objetivo escalable

Ahora, vamos a registrar la capacidad de escritura de la tabla como objetivo escalable con Auto Scaling de aplicaciones. Esto permite que Auto Scaling de aplicaciones ajuste la capacidad de escritura aprovisionada para TestTable, pero solo dentro del rango de entre 5 y 10 unidades de capacidad.

nota

La función Auto Scaling de DynamoDB requiere la presencia de un rol (AWSServiceRoleForApplicationAutoScaling_DynamoDBTable) que lleve a cabo las acciones de escalado automático en su nombre. Este rol se crea automáticamente para usted. Para obtener más información, consulte Roles vinculados a servicios de Application Auto Scaling en la Guía del usuario de Application Auto Scaling.

  1. Ingrese el siguiente comando para registrar el objetivo escalable.

    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 comprobar el registro, utilice el siguiente comando.

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

    También puede registrar un destino escalable en un índice secundario global. Por ejemplo, para un índice secundario global (“test-index”), el ID de recurso y los argumentos de dimensión escalable se actualizan adecuadamente.

    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

Paso 3: crear una política de escalado

En este paso, se crea una política de escalado para TestTable. La política define los detalles según los cuales Auto Scaling de aplicaciones puede ajustar el rendimiento aprovisionado de la tabla y las acciones llevará a cabo para ello. Puede asociar esta política al objetivo escalable definido en el paso anterior (unidades de capacidad de escritura para la tabla TestTable).

La política contiene los componentes siguientes:

  • PredefinedMetricSpecification: métrica que puede ajustar Auto Scaling de aplicaciones. Para DynamoDB, los siguientes valores son válidos para PredefinedMetricType:

    • DynamoDBReadCapacityUtilization

    • DynamoDBWriteCapacityUtilization

  • ScaleOutCooldown: cantidad mínima de tiempo (en segundos) entre cada evento de Auto Scaling de aplicaciones que aumenta el rendimiento aprovisionado. Este parámetro permite que Auto Scaling de aplicaciones aumente de forma continua, pero no drástica, el rendimiento en respuesta a las cargas de trabajo reales. El ajuste predeterminado de ScaleOutCooldown es 0.

  • ScaleInCooldown: cantidad mínima de tiempo (en segundos) entre cada evento de Auto Scaling de aplicaciones que reduce el rendimiento aprovisionado. Este parámetro permite que Auto Scaling de aplicaciones disminuya el rendimiento de manera gradual y predecible. El ajuste predeterminado de ScaleInCooldown es 0.

  • TargetValue: Auto Scaling de aplicaciones se asegura de que la proporción entre capacidad consumida y capacidad aprovisionada se mantenga en este valor o en un valor próximo. TargetValue se define como un porcentaje.

nota

Para entender cómo funciona TargetValue, imagine que tiene una tabla con una configuración de rendimiento aprovisionado de 200 unidades de capacidad de escritura. Decide crear una política de escalado para esta tabla, con un valor de TargetValue del 70 %.

Ahora, supongamos que comienza a dirigir el tráfico de escritura a la tabla, de tal forma que el rendimiento de escritura real es de 150 unidades de capacidad. La proporción entre capacidad consumida y aprovisionada es ahora de (150/200), es decir, del 75 %. Esta proporción supera su objetivo, de modo que Auto Scaling de aplicaciones aumenta la capacidad de escritura aprovisionada a 215 para que la proporción sea de (150/215), es decir, del 69,77 %; de esta forma se mantiene lo más próxima posible al valor de TargetValue, pero sin superarlo.

Para TestTable, configure TargetValue hasta el 50 %. Auto Scaling de aplicaciones ajusta el rendimiento aprovisionado de la tabla dentro del rango comprendido entre 5 y 10 unidades de capacidad (consulte Paso 2: registrar un objetivo escalable), de tal forma que la proporción entre capacidad consumida y provisionada se mantiene en el 50 % o en un valor próximo a este. Los valores de ScaleOutCooldown y ScaleInCooldown se establecen en 60 segundos.

  1. Cree un archivo denominado scaling-policy.json con el siguiente contenido.

    { "PredefinedMetricSpecification": { "PredefinedMetricType": "DynamoDBWriteCapacityUtilization" }, "ScaleOutCooldown": 60, "ScaleInCooldown": 60, "TargetValue": 50.0 }
  2. Utilice el siguiente comando de la AWS CLI para crear la 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. En el resultado, observe que Auto Scaling de aplicaciones ha creado dos alarmas de Amazon CloudWatch, una para cada límite (superior e inferior) del rango de escalado objetivo.

  4. Utilice el comando de AWS CLI siguiente para ver más detalles sobre la política de escalado.

    aws application-autoscaling describe-scaling-policies \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --policy-name "MyScalingPolicy"
  5. En el resultado, compruebe que los ajustes de la política coincidan con las especificaciones de Paso 2: registrar un objetivo escalable y Paso 3: crear una política de escalado.

Paso 4: dirigir tráfico de escritura a TestTable

Ahora puede probar la política de escalado escribiendo datos en TestTable. Para ello, deberá ejecutar un programa en Python.

  1. Cree un archivo denominado bulk-load-test-table.py con el siguiente contenido.

    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 ejecutar el programa, introduzca el siguiente comando.

    python bulk-load-test-table.py

    La capacidad de escritura provisionada de TestTable es muy baja (5 unidades de capacidad de escritura), por lo que el programa se ahoga en ocasiones a causa de la limitación controlada de escritura. Este es el comportamiento esperado.

    Permita que el programa continúe ejecutándose mientras avanza al paso siguiente.

Paso 5: consultar las acciones de Auto Scaling de aplicaciones

En este paso, consultaremos las acciones de Auto Scaling de aplicaciones que se han iniciado en su nombre. Además, comprobaremos que Auto Scaling de aplicaciones ha actualizado la capacidad de escritura provisionada para TestTable.

  1. Ingrese el siguiente comando para ver las acciones de Auto Scaling de aplicaciones.

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

    Vuelva a ejecutar este comando cada cierto tiempo mientras el programa en Python siga en ejecución. (Se tardarán varios minutos hasta que se invoque la política de escalado). En algún momento, debería aparecer el resultado siguiente.

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

    Esto indica que el Auto Scaling de aplicaciones ha emitido una solicitud UpdateTable a DynamoDB.

  2. Ingrese el siguiente comando para comprobar que DynamoDB ha aumentado la capacidad de escritura de la tabla.

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

    WriteCapacityUnits debería haberse escalado de 5 a 10.

(Opcional) Paso 6: limpiar

En este tutorial, ha creado varios recursos. Puede eliminar estos recursos cuando ya los necesite.

  1. Elimine la política de escalado para TestTable.

    aws application-autoscaling delete-scaling-policy \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --scalable-dimension "dynamodb:table:WriteCapacityUnits" \ --policy-name "MyScalingPolicy"
  2. Anule el registro del objetivo escalable.

    aws application-autoscaling deregister-scalable-target \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --scalable-dimension "dynamodb:table:WriteCapacityUnits"
  3. Elimine la tabla TestTable.

    aws dynamodb delete-table --table-name TestTable