Felsöka vanliga problem när du använder Terraform i Azure
Den här artikeln innehåller vanliga problem och möjliga lösningar när du använder Terraform i Azure.
Om du stöter på ett problem som är specifikt för Terraform använder du en av HashiCorps community-supportkanaler.
HashiCorp Terraform-specifika supportkanaler
- Frågor, användningsfall och användbara mönster: Terraform-avsnittet i HashiCorp-communityportalen
- Providerrelaterade frågor: Avsnittet Terraform Providers i HashiCorp-communityportalen
Det går inte att lista providerns registreringsstatus
Felmeddelande:
Fel: Det går inte att lista providerns registreringsstatus, det är möjligt att detta beror på ogiltiga autentiseringsuppgifter eller att tjänstens huvudnamn inte har behörighet att använda Resource Manager-API:et, Azure-fel: resurser. ProvidersClient#List: Det gick inte att svara på begäran: StatusCode=403 – Ursprungligt fel: autorest/azure: Tjänsten returnerade ett fel. Status=403 Code="AuthorizationFailed" Message="Klienten '00000000-0000-0000-0000-0000-00000000' med objekt-ID '00000000-0000-0000-00000-00000000000000 har inte behörighet att utföra åtgärden "Microsoft.Resources/subscriptions/providers/read" över omfånget "/subscriptions/00000000-0000-0000-0000-0000000000000" eller omfånget är ogiltigt. Om åtkomst nyligen beviljats kan du uppdatera dina autentiseringsuppgifter.”
Bakgrund: Om du kör Terraform-kommandon från Cloud Shell och har definierat vissa Terraform-/Azure-miljövariabler kan du ibland se konflikter. Miljövariablerna och det Azure-värde som de representerar visas i följande tabell:
Miljövariabel | Azure-värde |
---|---|
ARM_SUBSCRIPTION_ID | Azure-prenumerations-ID |
ARM_TENANT_ID | Klient-ID för Microsoft-konto |
ARM_CLIENT_ID | App-ID för Azure-tjänstens huvudnamn |
ARM_CLIENT_SECRET | Lösenord för Azure-tjänstens huvudnamn |
Orsak: När det här skrivs skriver ARM_SUBSCRIPTION_ID
Terraform-skriptet som körs i Cloud Shell över miljövariablerna och ARM_TENANT_ID
med värden från den aktuella Azure-prenumerationen. Om tjänstens huvudnamn som refereras av miljövariablerna inte har behörighet till den aktuella Azure-prenumerationen misslyckas därför alla Terraform-åtgärder.
Fel vid anskaffning av tillståndslåset
Felmeddelande:
Fel: Det gick inte att hämta tillståndslåset. Felmeddelande: 2 fel inträffade:
* Tillståndsblob är redan låst
* blobmetadata "terraformlockid" var tom
Terraform hämtar ett tillståndslås för att skydda tillståndet från att skrivas av flera användare samtidigt. Lös problemet ovan och försök igen. För de flesta kommandon kan du inaktivera låsning med flaggan "-lock=false", men detta rekommenderas inte.
Bakgrund: Om du kör Terraform-kommandon mot en Terraform-tillståndsfil och det här felet är det enda meddelandet som visas kan följande orsaker gälla. Gäller för lokala filer och fjärrtillståndsfiler.
Orsak: Det finns två möjliga orsaker till det här felet. Den första är att ett Terraform-kommando redan körs mot tillståndsfilen och att det har tvingat fram ett lås på filen, så ingenting går sönder. Den andra potentiella orsaken är att ett anslutningsavbrott inträffade mellan tillståndsfilen och CLI när kommandon kördes. Det här avbrottet inträffar oftast när du använder fjärrtillståndsfiler.
Lösning: Kontrollera först att du inte redan kör några kommandon mot tillståndsfilen. Om du arbetar med en lokal tillståndsfil kontrollerar du om du har terminaler som kör några kommandon. Du kan också kontrollera dina distributionspipelines för att se om något som körs kan använda tillståndsfilen. Om detta inte löser problemet är det möjligt att den andra orsaken utlöste felet. För en fjärrtillståndsfil som lagras i en Azure Storage-kontocontainer kan du hitta filen och använda knappen Bryt lån .
Om du använder andra serverdelar för att lagra din tillståndsfil kan du se HashiCorp-dokumentationen för rekommendationer.
VPN-fel
Information om hur du löser VPN-fel finns i artikeln Felsöka en VPN-hybridanslutning.