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à.
Recupero dei dati DLT dopo l'eliminazione dello stack
Questa sezione descrive come ripristinare gli scenari di test ed eseguire la cronologia in un nuovo stack DLT dopo l'eliminazione dello stack originale. Si applica quando i bucket S3 e le tabelle DynamoDB del cliente sono stati mantenuti (il comportamento predefinito) e il cliente desidera ricollegarli a una nuova implementazione.
Contesto
Quando uno stack DLT viene eliminato, le seguenti risorse vengono conservate nell'account AWS del cliente a causa delle politiche di protezione dei dati:
| Risorsa | Contiene | Denominazione |
|---|---|---|
|
Scenari: bucket S3 |
Script di test (JMeter/K6/Locust), file XML con i risultati per attività, risorse del framework JMeter |
Auto-generated (ad esempio,) |
|
Registra il bucket S3 |
I log di accesso S3 per tutti i bucket DLT |
Auto-generated |
|
Bucket S3 per console |
Risorse statiche dell'interfaccia utente Web |
Auto-generated |
|
Tabella degli scenari DynamoDB |
Definizioni, configurazioni e regole di pianificazione dei test |
Auto-generated (ad esempio,) |
|
Tabella Cronologia DynamoDB |
Risultati delle esecuzioni dei test, durate, percentuali di successo |
Auto-generated (ad esempio, |
|
CloudWatch gruppi di log |
Log di esecuzione Lambda ed ECS (conservazione per 10 anni) |
Denominati per funzione |
Tutti i nomi delle risorse vengono generati automaticamente da CloudFormation. Non sono prevedibili e non possono essere specificati come parametri durante la distribuzione di un nuovo stack.
Vincoli importanti
-
Il CloudFormation modello DLT non accetta parametri per tabelle DynamoDB o bucket S3 esistenti. Una nuova implementazione crea sempre nuove risorse.
-
La modifica diretta CloudFormation-managed delle risorse all'esterno dello stack causa la deriva dello stack. Tutte le migrazioni dei dati devono avvenire a livello di dati, non a livello di infrastruttura.
-
L'UUID della soluzione viene generato casualmente ad ogni nuova implementazione. Il nuovo stack avrà un UUID diverso da quello originale.
-
Le tabelle DynamoDB Point-in-Time hanno Recovery (PITR) abilitato per impostazione predefinita, fornendo backup continui per gli ultimi 35 giorni.
Processo di ripristino
Fase 1: Identificare le risorse conservate
Prima di distribuire un nuovo stack, individua le risorse conservate dallo stack eliminato.
# List retained DynamoDB tables (look for DLT naming patterns) aws dynamodb list-tables --query "TableNames[?contains(@, 'ScenariosTable') || contains(@, 'HistoryTable')]" # List retained S3 buckets (look for DLT naming patterns) aws s3api list-buckets --query "Buckets[?contains(Name, 'dlttestrunnerstoragedlts') || contains(Name, 'dltconsoleresourcesdltda')]"
Se hai annotato gli output dello CloudFormation stack prima dell'eliminazione, usa quei nomi esatti. I risultati rilevanti erano:
-
ScenariosBucket— il nome del bucket S3 -
ScenariosTable— il nome della tabella degli scenari DynamoDB
Per le risorse non esposte come output dello stack (come la tabella della cronologia), utilizzale list-stack-resources prima dell'eliminazione per ottenere gli ID delle risorse fisiche. Questo comando elenca tutte le risorse dello stack indipendentemente dal fatto che abbia un output corrispondente.
Fase 2: Implementazione di un nuovo stack DLT
Implementa un nuovo stack DLT utilizzando la stessa versione del CloudFormation modello (o più recente). Utilizza gli stessi parametri della distribuzione originale (impostazioni VPC, e-mail dell'amministratore, ecc.).
aws cloudformation create-stack \ --stack-name distributed-load-testing-new \ --template-url https://s3.amazonaws.com/solutions-reference/distributed-load-testing-on-aws/latest/distributed-load-testing-on-aws.template \ --parameters ParameterKey=AdminName,ParameterValue=<admin-name> \ ParameterKey=AdminEmail,ParameterValue=<admin-email> \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM CAPABILITY_AUTO_EXPAND
Attendi che lo stack CREATE_COMPLETE raggiunga lo stato.
Fase 3: Identifica le risorse del nuovo stack
Recupera i nomi delle risorse dagli output del nuovo stack.
aws cloudformation describe-stacks \ --stack-name distributed-load-testing-new \ --query "Stacks[0].Outputs"
Nota i valori per:
-
ScenariosBucket(nuovo nome del bucket) -
ScenariosTable(nuovo nome della tabella)
Per qualsiasi risorsa non esposta come output dello stack (come la tabella della cronologia), usa list-stack-resources per trovarla in base al suo ID logico:
aws cloudformation list-stack-resources \ --stack-name distributed-load-testing-new \ --query "StackResourceSummaries[?contains(LogicalResourceId, 'HistoryTable')].{LogicalId:LogicalResourceId,PhysicalId:PhysicalResourceId}"
Questo comando elenca tutte le risorse gestite dallo stack. È possibile filtrare in base alla sottostringa dell'ID logico per trovare qualsiasi risorsa.
Fase 4: Migrazione dei dati DynamoDB
Esporta i dati dalle tabelle conservate e importali nelle nuove tabelle. Utilizza le operazioni di esportazione dei dati o di scansione e scrittura in DynamoDB.
Opzione A: utilizzo di Export/Import DynamoDB (consigliato per set di dati di grandi dimensioni)
Per le tabelle con migliaia di elementi, utilizza un'esportazione DynamoDB in S3 seguita da un'importazione:
# Export from retained table to S3 aws dynamodb export-table-to-point-in-time \ --table-arn arn:aws:dynamodb:<region>:<account>:table/<old-scenarios-table> \ --s3-bucket <temporary-export-bucket> \ --s3-prefix dlt-migration/scenarios/ \ --export-format DYNAMODB_JSON # Wait for export to complete, then import into new table aws dynamodb import-table \ --s3-bucket-source S3Bucket=<temporary-export-bucket>,S3KeyPrefix=dlt-migration/scenarios/ \ --table-creation-parameters '{"TableName":"<new-scenarios-table>","KeySchema":[{"AttributeName":"testId","KeyType":"HASH"}],"AttributeDefinitions":[{"AttributeName":"testId","AttributeType":"S"}],"BillingMode":"PAY_PER_REQUEST"}' \ --input-format DYNAMODB_JSON
Nota
L'import-tableAPI crea una nuova tabella. Poiché il nuovo stack ha già creato la tabella di destinazione, utilizzate invece l'opzione B oppure eliminate prima la nuova tabella vuota e ricreatela tramite import (ciò causerà la deriva dello stack, vedi l'avviso di seguito).
Opzione B: scansione e (scelta consigliata) BatchWrite
Questo approccio legge direttamente dalle tabelle conservate e scrive nelle tabelle del nuovo stack senza causare variazioni dello stack. Richiede Python 3 e la boto3 libreria.
# Install boto3 if not already available pip install boto3
#!/usr/bin/env python3 """Migrate DynamoDB items directly from retained tables to new stack tables.""" import boto3 dynamodb = boto3.resource("dynamodb", region_name="<region>") def migrate_table(source_table_name, target_table_name): source = dynamodb.Table(source_table_name) target = dynamodb.Table(target_table_name) # Scan all items from the retained table (handles pagination automatically) items = [] response = source.scan() items.extend(response["Items"]) while "LastEvaluatedKey" in response: response = source.scan(ExclusiveStartKey=response["LastEvaluatedKey"]) items.extend(response["Items"]) print(f"Scanned {len(items)} items from {source_table_name}") # Write items to the new table using batch_writer (handles batching automatically) with target.batch_writer() as batch: for item in items: batch.put_item(Item=item) print(f"Wrote {len(items)} items to {target_table_name}") # Migrate scenarios migrate_table("<old-scenarios-table>", "<new-scenarios-table>") # Migrate history migrate_table("<old-history-table>", "<new-history-table>")
Per tabelle di grandi dimensioni (decine di migliaia di articoli), prendi in considerazione l'utilizzo di segmenti di scansione parallela per accelerare la fase di lettura.
Opzione C: ripristino da PITR (se entro una finestra di 35 giorni)
Se lo stack è stato eliminato negli ultimi 35 giorni e PITR è stato abilitato (per impostazione predefinita), puoi ripristinare la tabella a un determinato punto nel tempo. Tuttavia, i ripristini PITR creano una nuova tabella con un nome diverso, quindi è comunque necessario copiare i dati nella tabella gestita dallo stack utilizzando l'opzione B.
# Restore to a new temporary table aws dynamodb restore-table-to-point-in-time \ --source-table-name <old-scenarios-table> \ --target-table-name dlt-scenarios-restored \ --restore-date-time <timestamp-before-deletion> # Then scan from dlt-scenarios-restored and batch-write into the new stack's table
Fase 5: Migrazione dei dati S3
Copia gli script di test e i file dei risultati dal bucket mantenuto al bucket del nuovo stack.
# Copy all objects from the old scenarios bucket to the new one aws s3 sync \ s3://<old-scenarios-bucket> \ s3://<new-scenarios-bucket> \ --source-region <region> \ --region <region>
Questo copia:
-
Script di test (file JMeter, script K6,
.jmxfile Locust, archivi ZIP) -
File XML dei risultati del test organizzati per ID e regione del test
-
Risorse e plugin del framework JMeter
Fase 6: Verifica della migrazione
-
Accedi alla console web DLT utilizzando l'URL del nuovo stack (che si trova nell'output dello
WebConsolestack). -
Verifica che tutti gli scenari di test compaiano nell'elenco degli scenari.
-
Apri singoli scenari e verifica che la cronologia dei test eseguiti sia visibile.
-
Verifica che gli script di test siano scaricabili dalla pagina dei dettagli dello scenario.
-
Esegui un piccolo test per verificare la funzionalità end-to-end con il nuovo stack.
Fase 7: Pulisci le risorse conservate
Dopo aver verificato che tutti i dati siano stati migrati correttamente, elimina le vecchie risorse conservate per evitare costi di storage continui.
# Delete old DynamoDB tables aws dynamodb delete-table --table-name <old-scenarios-table> aws dynamodb delete-table --table-name <old-history-table> # Empty and delete old S3 buckets aws s3 rm s3://<old-scenarios-bucket> --recursive aws s3api delete-bucket --bucket <old-scenarios-bucket> aws s3 rm s3://<old-logs-bucket> --recursive aws s3api delete-bucket --bucket <old-logs-bucket> aws s3 rm s3://<old-console-bucket> --recursive aws s3api delete-bucket --bucket <old-console-bucket>
Esegui questo passaggio solo dopo aver verificato che il nuovo stack sia completamente operativo con tutti i dati storici intatti.
Evitare la deriva dello stack
La deriva dello stack si verifica quando lo stato effettivo di una risorsa è diverso da quello previsto. CloudFormation Per evitare la deriva durante questo processo di ripristino:
-
NON rinominate o modificate direttamente le tabelle DynamoDB o i bucket S3 del nuovo stack.
-
NON utilizzare
import-tableper sostituire le tabelle del nuovo stack (ciò richiederebbe prima l'eliminazione della tabella). CloudFormation-managed -
NON modificate le policy IAM, le policy dei bucket o le impostazioni delle tabelle al di fuori di. CloudFormation
-
Utilizza solo operazioni a livello di dati:
PutItem,,,BatchWriteItem.s3 syncs3 cp -
SCRIVI i dati nelle tabelle e nei bucket che hai creato. CloudFormation L'aggiunta di elementi a una tabella DynamoDB o di oggetti a un bucket S3 non costituisce deriva.
La scrittura di dati in CloudFormation-managed tabelle e bucket è sicura perché CloudFormation tiene traccia della configurazione delle risorse (schema della tabella, modalità di fatturazione, impostazioni di crittografia), non del contenuto dei dati.
Cosa non può essere recuperato
Quanto segue viene perso quando si elimina uno stack e non può essere ripristinato tramite questo processo:
| Elemento | Motivo |
|---|---|
|
Account utente Cognito |
Il pool di utenti viene eliminato con lo stack. Gli utenti devono registrarsi nuovamente. |
|
Pianificazioni attive EventBridge |
Le regole di test programmate vengono eliminate. Ricrea le pianificazioni manualmente nell'interfaccia utente DLT. |
|
CloudWatch dashboard |
Per-test i dashboard ( |
|
UUID della soluzione |
Viene generato un nuovo UUID casuale. Ciò influisce solo sulla correlazione delle metriche operative. |
|
Associazioni di stack regionali |
Gli stack regionali devono essere ridistribuiti e riassociati al nuovo stack di hub. |
Misure preventive
Per semplificare gli scenari di ripristino futuri:
-
Registra gli output dello stack prima di qualsiasi eliminazione. Salva i nomi delle
ScenariosBuckettabelle e della cronologia.ScenariosTable -
Abilita DynamoDB PITR (abilitato di default in DLT). Verifica che rimanga attivo.
-
Abilita il controllo delle versioni S3 (abilitato per impostazione predefinita nel bucket degli scenari). Ciò protegge dall'eliminazione accidentale degli oggetti.
-
Valuta la possibilità di abilitare la protezione da eliminazione di DynamoDB negli scenari e nelle tabelle della cronologia come protezione aggiuntiva:
aws dynamodb update-table \ --table-name <scenarios-table> \ --deletion-protection-enabled -
Usa AWS Backup per creare backup pianificati delle tabelle DynamoDB per la conservazione a lungo termine oltre la finestra PITR di 35 giorni.