Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Invece di usare il AWS Management Console, puoi usare il AWS Command Line Interface (AWS CLI) per gestire la scalabilità automatica di Amazon DynamoDB. Nel tutorial in questa sezione viene illustrato come installare e configurare la AWS CLI per la gestione della scalabilità automatica di DynamoDB. In questo tutorial, esegui quanto indicato di seguito:
-
Crea una tabella DynamoDB denominata
TestTable
. Le impostazioni di velocità effettiva iniziali sono 5 unità di capacità di lettura e 5 unità di capacità di scrittura. -
Crea una policy di Application Auto Scaling per
TestTable
. La policy cerca di mantenere un rapporto obiettivo del 50% tra capacità di scrittura utilizzata e capacità di scrittura assegnata. L'intervallo per questo parametro è compreso tra 5 e 10 unità di capacità di scrittura. (Application Auto Scaling non può regolare la velocità effettiva oltre questo intervallo). -
Eseguire un programma Python per indirizzare il traffico di scrittura su
TestTable
. Quando il rapporto di destinazione supera il 50% per un periodo di tempo prolungato, Application Auto Scaling richiede a DynamoDB di regolare la velocità effettiva diTestTable
verso l'alto in modo da mantenere l'utilizzo della destinazione al 50%. -
Verificare che DynamoDB abbia regolato correttamente la capacità di scrittura assegnata per
TestTable
.
Nota
Puoi anche pianificare il ridimensionamento di DynamoDB in modo che avvenga in determinati momenti. Scopri i passaggi di base qui.
Argomenti
Prima di iniziare
Prima di iniziare il tutorial, completare le attività seguenti:
Installazione di AWS CLI
Se non l'hai ancora fatto, installa e configura AWS CLI. A questo scopo, seguire le istruzioni fornite nella Guida per l'utente di AWS Command Line Interface :
Installazione di Python
Parte di questo tutorial richiede l'esecuzione di un programma Python (vedere Passaggio 4: Indirizza il traffico di scrittura verso TestTable). Se non è già installato, scaricare Python
Fase 1: creazione di una tabella DynamoDB
In questo passaggio, usi il AWS CLI per creareTestTable
. La chiave primaria è costituita da pk
(chiave di partizione) e da sk
(chiave di ordinamento). Entrambi questi attributi sono di tipo Number
. Le impostazioni di velocità effettiva iniziali sono 5 unità di capacità di lettura e 5 unità di capacità di scrittura.
-
Utilizzate il seguente AWS CLI comando per creare la tabella.
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
-
Per verificare lo stato della tabella, utilizza il comando seguente.
aws dynamodb describe-table \ --table-name TestTable \ --query "Table.[TableName,TableStatus,ProvisionedThroughput]"
La tabella è pronta per l'uso quando lo stato diventa
ACTIVE
.
Fase 2: registrazione di una destinazione scalabile
Successivamente si registra la capacità di scrittura della tabella come destinazione scalabile con Application Auto Scaling. Ciò consente ad Application Auto Scaling di regolare la capacità di scrittura assegnata per TestTable, ma solo entro un intervallo di 5-10 unità di capacità.
Nota
La scalabilità automatica di DynamoDB richiede la presenza di un ruolo collegato al servizio (AWSServiceRoleForApplicationAutoScaling_DynamoDBTable
) che esegue operazioni di scalabilità automatica per conto tuo. Questo ruolo viene creato automaticamente per te. Per ulteriori informazioni, consulta Ruoli collegati ai servizi per Application Auto Scaling nella Guida per l'utente di Application Auto Scaling.
-
Utilizza il comando seguente per registrare la destinazione scalabile.
aws application-autoscaling register-scalable-target \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --scalable-dimension "dynamodb:table:WriteCapacityUnits" \ --min-capacity 5 \ --max-capacity 10
-
Utilizza il comando seguente per verificare la registrazione.
aws application-autoscaling describe-scalable-targets \ --service-namespace dynamodb \ --resource-id "table/TestTable"
Nota
È inoltre possibile registrare una destinazione scalabile rispetto a un indice secondario globale. Ad esempio, per un indice secondario globale ("test-index"), l'ID risorsa e gli argomenti della dimensione scalabile vengono aggiornati di conseguenza.
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
Fase 3: creazione di una policy di dimensionamento
In questa fase, viene creata una policy di dimensionamento per TestTable
. La policy definisce i dettagli in base ai quali Application Auto Scaling può regolare la velocità effettiva assegnata della tabella e le operazioni da intraprendere quando lo fa. Questa policy viene associata alla destinazione scalabile definita nel passaggio precedente (unità di capacità di scrittura per la tabella TestTable
).
La policy contiene i seguenti elementi:
-
PredefinedMetricSpecification
: il parametro che può essere regolato da Application Auto Scaling. Per DynamoDB, i seguenti valori sono valori validi perPredefinedMetricType
:-
DynamoDBReadCapacityUtilization
-
DynamoDBWriteCapacityUtilization
-
-
ScaleOutCooldown
: la quantità minima di tempo (espressa in secondi) tra ogni evento Application Auto Scaling che aumenta la velocità effettiva assegnata. Questo parametro consente ad Application Auto Scaling di aumentare continuamente, ma non in modo aggressivo, la velocità effettiva in risposta ai carichi di lavoro reali. L'impostazione predefinita perScaleOutCooldown
è 0. -
ScaleInCooldown
: la quantità minima di tempo (espressa in secondi) tra ogni evento Application Auto Scaling che diminuisce la velocità effettiva assegnata. Questo parametro consente ad Application Auto Scaling di ridurre la velocità effettiva in maniera graduale e prevedibile. L'impostazione predefinita perScaleInCooldown
è 0. -
TargetValue
: Application Auto Scaling assicura che il rapporto tra la capacità utilizzata e la capacità assegnata rimanga pari o vicino a questo valore.TargetValue
viene definito in percentuale.
Nota
Per capire meglio come funziona TargetValue
, supponiamo di avere una tabella con un'impostazione di velocità effettiva assegnata pari a 200 unità di capacità in scrittura. Si decide di creare una policy di dimensionamento per questa tabella, con un TargetValue
del 70%.
Si supponga ora di iniziare a guidare il traffico di scrittura verso la tabella in modo che la velocità effettiva di scrittura sia di 150 unità di capacità. Il consumed-to-provisioned rapporto è ora (150/ 200), ovvero il 75 percento. Questo rapporto supera l'obiettivo, pertanto Application Auto Scaling aumenta la capacità di scrittura assegnata a 215 in modo che il rapporto sia (150/215) o 69,77%, il più vicino possibile a TargetValue
ma senza superarlo.
Per TestTable
, TargetValue
si imposta al 50%. Application Auto Scaling regola il throughput assegnato dalla tabella entro un intervallo di 5-10 unità di capacità (vediFase 2: registrazione di una destinazione scalabile) in modo che il consumed-to-provisioned rapporto rimanga pari o vicino al 50 percento. I valori di ScaleOutCooldown
e ScaleInCooldown
vengono impostati su 60 secondi.
-
Crea un file denominato
scaling-policy.json
con i seguenti contenuti.{ "PredefinedMetricSpecification": { "PredefinedMetricType": "DynamoDBWriteCapacityUtilization" }, "ScaleOutCooldown": 60, "ScaleInCooldown": 60, "TargetValue": 50.0 }
-
Utilizzare il comando seguente per creare la politica 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
-
Nell'output, tieni presente che Application Auto Scaling ha creato due CloudWatch allarmi Amazon, uno per il limite superiore e inferiore dell'intervallo target di scalabilità.
-
Usa il seguente AWS CLI comando per visualizzare maggiori dettagli sulla politica di scalabilità.
aws application-autoscaling describe-scaling-policies \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --policy-name "MyScalingPolicy"
-
Nell'output, verificare che le impostazioni delle policy corrispondano alle specifiche da Fase 2: registrazione di una destinazione scalabile e Fase 3: creazione di una policy di dimensionamento.
Passaggio 4: Indirizza il traffico di scrittura verso TestTable
Ora è possibile testare la policy di dimensionamento scrivendo i dati in TestTable
. Per fare ciò, viene eseguito un programma Python.
-
Crea un file denominato
bulk-load-test-table.py
con i seguenti contenuti.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
-
Per eseguire il programma, immettere il comando seguente.
python bulk-load-test-table.py
La capacità di scrittura assegnata per
TestTable
è molto bassa (5 unità di capacità di scrittura), quindi il programma si blocca occasionalmente a causa della limitazione della scrittura. Questo è il comportamento previsto.Lasciare che il programma continui a funzionare mentre si passa alla fase successiva.
Fase 5: visualizzazione delle operazioni di Application Auto Scaling
In questa fase vengono visualizzate le operazioni di Application Auto Scaling che vengono avviate per conto tuo. Viene inoltre verificato che Application Auto Scaling abbia aggiornato la capacità di scrittura assegnata per TestTable
.
-
Immettere il comando seguente per visualizzare le operazioni di Application Auto Scaling.
aws application-autoscaling describe-scaling-activities \ --service-namespace dynamodb
Eseguire di nuovo questo comando occasionalmente, mentre il programma Python è in esecuzione. Occorrono diversi minuti prima che la policy di dimensionamento venga richiamata. Dovrebbe essere visualizzato l'output riportato di seguito.
... { "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" }, ...
Ciò indica che Application Auto Scaling ha emesso una richiesta
UpdateTable
a DynamoDB. -
Immettere il comando seguente per verificare che DynamoDB ha aumentato la capacità di scrittura della tabella.
aws dynamodb describe-table \ --table-name TestTable \ --query "Table.[TableName,TableStatus,ProvisionedThroughput]"
WriteCapacityUnits
dovrebbe essersi dimensionato da5
a10
.
(Opzionale) Fase 6: pulizia
In questo tutorial sono state create diverse risorse. È possibile eliminare queste risorse se non sono più necessarie.
-
Eliminare la policy di dimensionamento per
TestTable
.aws application-autoscaling delete-scaling-policy \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --scalable-dimension "dynamodb:table:WriteCapacityUnits" \ --policy-name "MyScalingPolicy"
-
Annullare la registrazione di una destinazione scalabile.
aws application-autoscaling deregister-scalable-target \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --scalable-dimension "dynamodb:table:WriteCapacityUnits"
-
Eliminare la tabella
TestTable
.aws dynamodb delete-table --table-name TestTable