Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Dit artikel bevat veelvoorkomende problemen en mogelijke oplossingen bij het gebruik van Terraform op Azure.
Als u een probleem ondervindt dat specifiek is voor Terraform, gebruikt u een van de communityondersteuningskanalen van HashiCorp.
HashiCorp Terraform-specifieke ondersteuningskanalen
- Vragen, use cases en nuttige patronen: Terraform-sectie van de HashiCorp-communityportal
- Vragen, use cases en nuttige patronen: Terraform-sectie van de HashiCorp-communityportal
Kan de registratiestatus van de provider niet vermelden
Foutbericht:
Fout: kan de registratiestatus van de provider niet weergeven. Deze fout kan optreden vanwege ongeldige referenties of omdat de service-principal niet gemachtigd is om de Resource Manager-API te gebruiken. Azure fout: resources. ProvidersClient#List: Fout bij reageren op aanvraag: StatusCode=403 -- Oorspronkelijke fout: autorest/azure: Service heeft een fout geretourneerd. Status=403 Code="AuthorizationFailed" Message="De client '00000000-0000-0000-0000-000000000000' met object-id '00000000-0000-0000-0000-000000000000' heeft geen machtiging om de actie 'Microsoft.Resources/subscriptions/providers/read' uit te voeren voor het bereik '/subscriptions/00000000-0000-0000-0000-000000000000' of het bereik is ongeldig. Als u onlangs toegang hebt gekregen, vernieuw dan uw aanmeldingsgegevens.
Achtergrond: Als u Terraform-opdrachten uitvoert vanuit de Cloud Shell en bepaalde Terraform/Azure-omgevingsvariabelen definieert, kunnen er conflicten optreden. De volgende tabel bevat de omgevingsvariabelen en de Azure waarden die ze vertegenwoordigen:
| Omgevingsvariabele | Azure-waarde |
|---|---|
| ARM_SUBSCRIPTION_ID | Azure-abonnements-id |
| ARM_TENANT_ID | Tenant-id van Microsoft-account |
| ARM_CLIENT_ID | app-id van de Azure-service-principal |
| ARM_CLIENT_SECRET | wachtwoord voor Azure service-principal |
Oorzaak: Vanaf dit schrijven overschrijft het Terraform-script dat wordt uitgevoerd in Cloud Shell de ARM_SUBSCRIPTION_ID en ARM_TENANT_ID omgevingsvariabelen overschrijft met behulp van waarden uit het huidige Azure-abonnement. Als de service-principal waarnaar wordt verwezen door de omgevingsvariabelen geen rechten heeft voor het huidige Azure-abonnement, mislukken Terraform-bewerkingen.
Fout bij het verkrijgen van de statusvergrendeling
Foutbericht:
Fout: Fout bij het verkrijgen van de statusvergrendeling; Foutbericht: 2 fouten zijn opgetreden:
* statusblob is al vergrendeld
* de blobmetadata "terraformlockid" was leeg
Terraform verkrijgt een statusvergrendeling om de status te beschermen tegen het schrijven van meerdere gebruikers tegelijk. Los het bovenstaande probleem op en probeer het opnieuw. Voor de meeste opdrachten kunt u het vergrendelen uitschakelen met de vlag '-lock=false', maar dit wordt niet aanbevolen.
Achtergrond: Als u Terraform-opdrachten uitvoert voor een Terraform-statusbestand en deze fout het enige bericht is dat wordt weergegeven, kunnen de volgende oorzaken van toepassing zijn. Deze fout is van toepassing op lokale en externe statusbestanden.
Oorzaak: Er zijn twee mogelijke oorzaken voor deze fout. De eerste oorzaak is dat er al een Terraform-opdracht actief is voor het statusbestand en die het bestand heeft vergrendeld, zodat er niets misgaat. De tweede mogelijke oorzaak is dat er een verbindingsonderbreking is opgetreden tussen het statusbestand en de CLI wanneer opdrachten werden uitgevoerd. Deze onderbreking treedt meestal op wanneer u externe statusbestanden gebruikt.
Oplossing: Controleer eerst of u nog geen opdrachten uitvoert voor het statusbestand. Als u met een lokaal statusbestand werkt, controleert u of er terminals zijn waarop opdrachten worden uitgevoerd. U kunt ook uw deploymentpijplijnen controleren om te zien of iets dat wordt uitgevoerd mogelijk het statebestand gebruikt. Als dit probleem niet wordt opgelost, is het mogelijk dat de tweede oorzaak de fout heeft geactiveerd. Voor een extern statusbestand dat is opgeslagen in een container in een Azure Storage-account, kunt u het bestand opzoeken en de knop Lease verbreken gebruiken.
Als u andere back-ends gebruikt om uw statusbestand op te slaan, raadpleegt u de HashiCorp-documentatie voor aanbevelingen.
VPN-fouten
Zie het artikel Problemen met een hybride VPN-verbinding oplossen voor informatie over het oplossen van VPN-fouten.
Terraform is van plan een opslagaccount te verwijderen en opnieuw te maken
Terraform kan van plan zijn om een Azure opslagaccount te verwijderen en opnieuw te maken nadat Azure het opslagaccount buiten Terraform heeft gewijzigd. Dit gedrag kan optreden tijdens een ondersteunde Azure Storage accountredundantieconversie waarbij account_replication_type de grens tussen de niet-zonegebonden set (LRS, GRS, RA-GRS) en de zonegebonden set (ZRS, GZRS, RA-GZRS) wordt overschreden).
Voordat u het plan toepast, controleert u de voorgestelde wijzigingen en controleert u waarom Terraform de vervanging van het opslagaccount nodig acht. Het opnieuw maken van een opslagaccount kan uitvaltijd van toepassingen of gegevensverlies veroorzaken.
U kunt dit risico als volgt beperken:
- Schakel automatische goedkeuring uit voor implementaties die opslagaccounts beheren en controleer elke
terraform plan. - Configureer
prevent_destroy = truein hetlifecycle-blok van de opslagaccountresource. - Voordat u de conversie start, voegt u deze tijdelijk toe
account_replication_typeaanignore_changes. - Voer na de conversie
terraform apply -refresh-onlyde Terraform-status bij en werk vervolgens uw Terraform-configuratie bij zodat deze overeenkomt met het geïmplementeerde opslagaccount. - Verwijder
ignore_changespas nadat uterraform planhebt uitgevoerd en hebt bevestigd dat deze geen onverwachte wijzigingen meldt.
Zie Terraform-drift voorkomen voor statusbehoudende Azure-resources voor gedetailleerde richtlijnen voor conversie.