Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo elenca i problemi comuni e le possibili soluzioni quando si usa Terraform in Azure.
Se si verifica un problema specifico di Terraform, usare uno dei canali di supporto della community di HashiCorp.
Canali di supporto specifici di HashiCorp Terraform
- Domande, casi d'uso e modelli utili: sezione Terraform del portale della community HashiCorp
- Domande, casi d'uso e modelli utili: sezione Terraform del portale della community HashiCorp
Impossibile elencare lo stato di registrazione del provider
Messaggio di errore:
Errore: Impossibile elencare lo stato di registrazione del provider. Questo errore può verificarsi a causa di credenziali non valide o perché l'entità servizio non dispone dell'autorizzazione per usare l'API Resource Manager. Errore di Azure: resources.ProvidersClient#List: Errore nella risposta alla richiesta: StatusCode=403 -- Errore originale: autorest/azure: Il servizio ha restituito un errore. Status=403 Code="AuthorizationFailed" Message="Il client '00000000-0000-0000-0000-000000000000' con ID oggetto '00000000-0000-0000-0000-000000000000' non dispone dell'autorizzazione per eseguire l'azione 'Microsoft.Resources/subscriptions/providers/read' nell'ambito '/subscriptions/00000000-0000-0000-0000-000000000000' oppure l'ambito non è valido." Se l'accesso è stato concesso di recente, aggiornare le credenziali."
Sfondo: Se si eseguono comandi Terraform dalla Cloud Shell e si definiscono determinate variabili di ambiente Terraform/Azure, è possibile che vengano visualizzati conflitti. Nella tabella seguente sono elencate le variabili di ambiente e i valori Azure che rappresentano:
| Variabile di ambiente | valore di Azure |
|---|---|
| ARM_SUBSCRIPTION_ID | ID sottoscrizione di Azure |
| ARM_TENANT_ID | ID del tenant dell'account Microsoft |
| ARM_CLIENT_ID | ID app del service principal di Azure |
| ARM_CLIENT_SECRET | Password dell'entità servizio di Azure |
Causa: a partire da questo articolo, lo script Terraform eseguito in Cloud Shell sovrascrive le ARM_SUBSCRIPTION_ID variabili di ambiente e ARM_TENANT_ID usando i valori della sottoscrizione corrente Azure. Di conseguenza, se l'entità servizio a cui fanno riferimento le variabili di ambiente non dispone dei diritti per la sottoscrizione corrente Azure, le operazioni di Terraform hanno esito negativo.
Errore durante l'acquisizione del blocco di stato
Messaggio di errore:
Errore: errore durante l'acquisizione del blocco di stato; Messaggio di errore: si sono verificati 2 errori:
* il BLOB di stato è già bloccato
* i metadati blob "terraformlockid" erano vuoti
Terraform ottiene un blocco dello stato per impedire che venga scritto contemporaneamente da parte di più utenti. Risolvere il problema precedente e riprovare. Per la maggior parte dei comandi, è possibile disabilitare il blocco con il flag "-lock=false", ma questo non è consigliato.
Sfondo: Se si eseguono comandi Terraform su un file di stato terraform e questo errore è l'unico messaggio visualizzato, potrebbero essere applicate le cause seguenti. Questo errore si applica ai file di stato locali e remoti.
Causa: Esistono due possibili cause per questo errore. La prima causa è che un comando Terraform è già in esecuzione sul file di stato e ha imposto un blocco, in modo che nulla si danneggi. La seconda causa potenziale è che si è verificata un'interruzione della connessione tra il file di stato e l'interfaccia della riga di comando durante l'esecuzione dei comandi. Questa interruzione si verifica più comunemente quando si usano file di stato remoti.
Risoluzione: Assicurarsi prima di tutto di non eseguire alcun comando nel file di stato. Se si usa un file di stato locale, verificare se sono presenti terminali che eseguono comandi. In alternativa, controllare le pipeline di distribuzione per verificare se un elemento in esecuzione potrebbe usare il file di stato. Se questa condizione non risolve il problema, è possibile che la seconda causa ha attivato l'errore. Per un file di stato remoto archiviato in un contenitore di un account di Archiviazione di Azure, puoi individuare il file e usare il pulsante Interrompi concessione.
Se si usano altri back-end per archiviare il file di stato, per consigli, vedere la documentazione di HashiCorp.
Errori VPN
Per informazioni sulla risoluzione degli errori VPN, vedere l'articolo Risolvere i problemi relativi a una connessione VPN ibrida.
Terraform prevede di eliminare e ricreare un account di archiviazione
Terraform potrebbe pianificare l'eliminazione e la ricreazione di un account di archiviazione di Azure in seguito a modifiche apportate da Azure all'account di archiviazione al di fuori di Terraform. Questo comportamento può verificarsi durante una conversione di ridondanza dell'account Archiviazione di Azure supportata in cui account_replication_type supera il limite tra il set non di zona (LRS, GRS, RA-GRS) e il set di zone (ZRS, GZRS, RA-GZRS).
Prima di applicare il piano, esaminare le modifiche proposte e verificare il motivo per cui Terraform considera necessaria la sostituzione dell'account di archiviazione. La ricreazione di un account di archiviazione può causare tempi di inattività o perdita di dati dell'applicazione.
Per ridurre questo rischio:
- Disabilita l'approvazione automatica per le distribuzioni che gestiscono gli account di archiviazione e rivedi ogni
terraform plan. - Configurare
lifecyclenel bloccoprevent_destroy = truedella risorsa dell'account di archiviazione. - Prima di avviare la conversione, aggiungere
account_replication_typetemporaneamente aignore_changes. - Dopo la conversione, eseguire
terraform apply -refresh-onlyper aggiornare lo stato terraform, quindi aggiornare la configurazione di Terraform in modo che corrisponda all'account di archiviazione distribuito. - Rimuovere
ignore_changessolo dopo l'esecuzioneterraform plane confermare che non segnala modifiche impreviste.
Per indicazioni dettagliate sulla conversione, vedere Impedire la deriva di Terraform per le risorse di Azure con stato.