Creare un esperimento di Chaos che usa un errore diretto al servizio con l'interfaccia della riga di comando di Azure
È possibile usare un esperimento chaos per verificare che l'applicazione sia resiliente agli errori causando tali errori in un ambiente controllato. In questo articolo si verifica un failover di Azure Cosmos DB con più operazioni di lettura e scrittura singola usando un esperimento di Chaos e Azure Chaos Studio. L'esecuzione di questo esperimento consente di difendersi dalla perdita di dati quando si verifica un evento di failover.
È possibile usare questi stessi passaggi per configurare ed eseguire un esperimento per qualsiasi errore diretto al servizio. Un errore diretto al servizio viene eseguito direttamente su una risorsa di Azure senza alcuna necessità di strumentazione, a differenza degli errori basati su agente che richiedono l'installazione dell'agente Chaos.
Prerequisiti
- Una sottoscrizione di Azure. Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.
- Un account Azure Cosmos DB. Se non si ha un account Azure Cosmos DB, è possibile crearne uno.
- Configurazione di almeno un'area di lettura e scrittura per il proprio account Azure Cosmos DB.
Aprire Azure Cloud Shell
Azure Cloud Shell è una shell interattiva gratuita che può essere usata per eseguire la procedura di questo articolo. Include strumenti comuni di Azure preinstallati e configurati per l'uso con l'account.
Per aprire Cloud Shell, selezionare Prova nell'angolo in alto a destra di un blocco di codice. È anche possibile aprire Cloud Shell in una scheda separata del browser visitando Bash. Selezionare Copia per copiare i blocchi di codice, incollarli in Cloud Shell e selezionare Invio per eseguirli.
Se si desidera installare e usare l'interfaccia della riga di comando in locale, per questa esercitazione è richiesta l'interfaccia della riga di comando di Azure versione 2.0.30 o successiva. Eseguire az --version
per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.
Nota
Queste istruzioni usano un terminale Bash in Cloud Shell. Alcuni comandi potrebbero non funzionare come descritto se si esegue l'interfaccia della riga di comando in locale o in un terminale di PowerShell.
Abilitare Chaos Studio nell'account Azure Cosmos DB
Chaos Studio non può inserire errori per una risorsa, a meno che tale risorsa non sia stata aggiunta prima a Chaos Studio. È possibile aggiungere una risorsa a Chaos Studio creando una destinazione e funzionalità nella risorsa. Gli account Azure Cosmos DB hanno soltanto un tipo di destinazione (diretta al servizio) e una funzionalità (failover). Altre risorse potrebbero avere fino a due tipi di destinazione. Un tipo di destinazione è per gli errori diretti al servizio. Un altro tipo di destinazione è per gli errori basati su agente. Altre risorse potrebbero avere molte funzionalità aggiuntive.
Creare una destinazione sostituendo
$RESOURCE_ID
con l'ID risorsa della risorsa che si sta aggiungendo. Sostituire$TARGET_TYPE
con il tipo di destinazione che si sta aggiungendo:az rest --method put --url "https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/$TARGET_TYPE?api-version=2023-11-01" --body "{\"properties\":{}}"
Ad esempio, se si aggiunge una macchina virtuale come destinazione diretta al servizio:
az rest --method put --url "https://management.azure.com/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myVM/providers/Microsoft.Chaos/targets/Microsoft-VirtualMachine?api-version=2023-11-01" --body "{\"properties\":{}}"
Creare le funzionalità nella destinazione sostituendo
$RESOURCE_ID
con l'ID risorsa della risorsa che si sta aggiungendo. Sostituire$TARGET_TYPE
con il tipo di destinazione che si sta aggiungendo. Sostituire$CAPABILITY
con il nome della funzionalità di errore che si sta abilitando.az rest --method put --url "https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/$TARGET_TYPE/capabilities/$CAPABILITY?api-version=2023-11-01" --body "{\"properties\":{}}"
Ad esempio, se si abilita la funzionalità di arresto della macchina virtuale:
az rest --method put --url "https://management.azure.com/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myVM/providers/Microsoft.Chaos/targets/Microsoft-VirtualMachine/capabilities/shutdown-1.0?api-version=2023-11-01" --body "{\"properties\":{}}"
L'account Azure Cosmos DB è stato aggiunto correttamente a Chaos Studio.
Creare un esperimento
È ora possibile creare l'esperimento. Un esperimento chaos definisce le azioni da eseguire sulle risorse di destinazione. Le azioni sono organizzate ed eseguite in passaggi sequenziali. L'esperimento chaos definisce anche le azioni che si desidera eseguire sui rami, che vengono eseguite in parallelo.
Creare il codice JSON dell'esperimento a partire dall'esempio JSON seguente. Modificare il codice JSON in modo che corrisponda all'esperimento che si desidera eseguire usando l'API Creare un esperimento e la libreria di errori.
{ "location": "eastus", "identity": { "type": "SystemAssigned" }, "properties": { "steps": [ { "name": "Step1", "branches": [ { "name": "Branch1", "actions": [ { "type": "continuous", "selectorId": "Selector1", "duration": "PT10M", "parameters": [ { "key": "readRegion", "value": "East US 2" } ], "name": "urn:csci:microsoft:cosmosDB:failover/1.0" } ] } ] } ], "selectors": [ { "id": "Selector1", "type": "List", "targets": [ { "type": "ChaosTarget", "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/chaosstudiodemo/providers/Microsoft.DocumentDB/databaseAccounts/myDB/providers/Microsoft.Chaos/targets/Microsoft-CosmosDB" } ] } ] } }
Creare l'esperimento usando l'interfaccia della riga di comando di Azure. Sostituire
$SUBSCRIPTION_ID
,$RESOURCE_GROUP
e$EXPERIMENT_NAME
con le proprietà per l'esperimento. Assicurarsi di aver salvato e caricato il codice JSON dell'esperimento. Aggiornareexperiment.json
con il nome file JSON.az rest --method put --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME?api-version=2023-11-01 --body @experiment.json
Ogni esperimento crea un'identità gestita assegnata dal sistema corrispondente. Prendere nota dell'ID entità per questa identità nella risposta per il passaggio successivo.
Concedere l'autorizzazione dell'esperimento all'account Azure Cosmos DB
Quando si crea un esperimento chaos, Chaos Studio crea un'identità gestita assegnata dal sistema che esegue errori sulle risorse di destinazione. Questa identità deve avere le autorizzazioni appropriate per la risorsa di destinazione affinché l'esperimento venga eseguito correttamente.
Concedere all'esperimento l'accesso alle risorse usando il comando seguente. Sostituire $EXPERIMENT_PRINCIPAL_ID
con l'ID entità del passaggio precedente. Sostituire $RESOURCE_ID
con l'ID risorsa della risorsa di destinazione. In questo caso, si tratta dell'ID risorsa dell'istanza di Azure Cosmos DB. Modificare il ruolo in base al ruolo predefinito appropriato per tale tipo di risorsa. Eseguire questo comando per ogni risorsa di destinazione nell'esperimento.
az role assignment create --role "Cosmos DB Operator" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope $RESOURCE_ID
Eseguire l'esperimento
Adesso è possibile eseguire l'esperimento. Per visualizzare l'effetto, è consigliabile aprire la panoramica dell'account Azure Cosmos DB e passare a Replica i dati a livello globale in una scheda separata del browser. Aggiornare la schermata periodicamente durante l'esperimento per visualizzare lo scambio di area.
Avviare l'esperimento usando l'interfaccia della riga di comando di Azure. Sostituire
$SUBSCRIPTION_ID
,$RESOURCE_GROUP
e$EXPERIMENT_NAME
con le proprietà per l'esperimento.az rest --method post --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME/start?api-version=2023-11-01
La risposta include un URL di stato che è possibile usare per eseguire una query sullo stato dell'esperimento durante l'esecuzione dell'esperimento.
Passaggi successivi
Dopo aver eseguito un esperimento diretto al servizio di Azure Cosmos DB, è possibile: