Aan de slag: Terraform configureren in Azure Cloud Shell met Azure PowerShell
Terraform maakt de definitie, preview en implementatie van de cloudinfrastructuur mogelijk. Met behulp van Terraform maakt u configuratiebestanden met behulp van de HCL-syntaxis. Met de HCL-syntaxis kunt u de cloudprovider ( zoals Azure) en de elementen waaruit uw cloudinfrastructuur bestaat, opgeven. Nadat u uw configuratiebestanden hebt gemaakt, maakt u een uitvoeringsplan waarmee u een voorbeeld van de wijzigingen in uw infrastructuur kunt bekijken voordat ze worden geïmplementeerd. Nadat u de wijzigingen hebt gecontroleerd, moet u het uitvoeringsplan toepassen om de infrastructuur te implementeren.
In dit artikel wordt beschreven hoe u aan de slag gaat met Terraform in Azure met behulp Cloud Shell en PowerShell.
In dit artikel leert u het volgende:
- Een Cloud Shell
- Algemene terraform- en Azure-verificatiescenario's begrijpen
- Verifiëren via een Microsoft-account van Cloud Shell (met behulp van Bash of PowerShell)
- Verifiëren via een Microsoft-account van Windows (met behulp van Bash of PowerShell)
- Een service-principal maken met de Azure CLI
- Een service-principal maken met Azure PowerShell
- Referenties voor de service-principal opgeven in omgevingsvariabelen
- Referenties voor de service-principal opgeven in een Terraform-providerblok
1. Uw omgeving configureren
- Azure-abonnement: Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint.
2. Open Cloud Shell
Als u al een Cloud Shell geopend, kunt u naar de volgende sectie gaan.
Browse naar de Azure-portal
Meld u indien nodig aan bij uw Azure-abonnement en wijzig de Azure-directory.
Open Cloud Shell.
Als u deze nog niet eerder hebt Cloud Shell, configureert u de omgevings- en opslaginstellingen.
Selecteer de opdrachtregelomgeving.
3. Installeer de nieuwste versie van Terraform in Azure Cloud Shell
Cloud Shell enkele weken na de release automatisch bijgewerkt naar de nieuwste versie van Terraform. Als u echter eerder de meest recente versie nodig hebt, laten de volgende stappen zien hoe u de huidige versie van Terraform kunt downloaden en installeren.
Bepaal de versie van Terraform die wordt gebruikt in Cloud Shell.
terraform versionAls de Terraform-versie die is geïnstalleerd in Cloud Shell niet de nieuwste versie is, ziet u een bericht dat aangeeft dat de versie van Terraform verouderd is.
Als u goed werkt met de aangegeven versie, gaat u verder met de volgende sectie. Ga anders verder met de volgende stappen.
Blader naar de terraform-downloadpagina.
Schuif omlaag naar de Linux-downloadkoppelingen.
Beweeg de muis over de 64-bits koppeling. Dit is de koppeling voor de meest recente 64-bits Linux AMD-versie, die geschikt is voor Cloud Shell.
Kopieer de URL.
Voer
curluit en vervang de tijdelijke aanduiding door de URL uit de vorige stap.curl -O <terraform_download_url>Pak het bestand uit.
unzip <zip_file_downloaded_in_previous_step>Als de map niet bestaat, maakt u een map met de naam
bin.mkdir binVerplaats het
terraformbestand naar de mapbin.mv terraform bin/Controleer of de gedownloade versie van Terraform als eerste in het pad staat.
terraform version
4. Het standaard Azure-abonnement controleren
Wanneer u zich bij de Azure Portal met een Microsoft-account, wordt het standaard Azure-abonnement voor dat account gebruikt.
Terraform verifieert automatisch met behulp van gegevens uit het standaard Azure-abonnement.
Voer az account show uit om de huidige Microsoft-account en het Azure-abonnement te controleren.
az account show
Wijzigingen die u via Terraform aanmaakt, worden in strijd met het weergegeven Azure-abonnement. Als u dat wilt, slaat u de rest van dit artikel over.
5. Terraform verifiëren bij Azure
Terraform- en Azure-verificatiescenario's
Terraform biedt alleen ondersteuning voor de authenticatie bij Azure via de Azure CLI. Authenticeren met Azure PowerShell wordt niet ondersteund. Hoewel u de module Azure PowerShell gebruiken bij het uitvoeren van uw Terraform-werk, moet u zich dus eerst verifiëren bij Azure met behulp van de Azure CLI.
In dit artikel wordt uitgelegd hoe u Terraform verifieert bij Azure voor de volgende scenario's. Zie Authenticating using the Azure CLI(Verifiëren met behulp van de Azure CLI) voor meer informatie over opties voor het verifiëren van Terraform bij Azure.
- Authenticeren via een Microsoft-account met Cloud Shell (met Bash of PowerShell) en
- Authenticeren via een Microsoft-account met Windows (met Bash of PowerShell)
- Authenticeren via een service-principal:
- Als u geen service-principal hebt, maakt u een service-principal.
- Verifiëren bij Azure met behulp van omgevingsvariabelen of verifiëren bij Azure met behulp van het Terraform-providerblok
Verifiëren bij Azure via een Microsoft-account
Een Microsoft-account is een gebruikersnaam (gekoppeld aan een e-mailbericht en de bijbehorende referenties) die wordt gebruikt om u aan te melden bij Microsoft-services, zoals Azure. Een Microsoft-account kan worden gekoppeld aan een of meer Azure-abonnementen, en een van deze abonnementen is de standaardinstelling.
In de volgende stappen ziet u hoe u zich interactief aanmeldt bij Azure met behulp van een Microsoft-account, de gekoppelde Azure-abonnementen van het account vermeldt (inclusief de standaardinstelling) en het huidige abonnement in stelt.
Open een opdrachtregel die toegang heeft tot de Azure CLI.
Voer az login uit zonder parameters en volg de instructies om u aan te melden bij Azure.
az loginBelangrijkste punten:
- Na een geslaagde aanmelding wordt een lijst weergegeven met de Azure-abonnementen die zijn gekoppeld aan de aangemelde Microsoft-account, met
az logininbegrip van het standaardabonnement.
- Na een geslaagde aanmelding wordt een lijst weergegeven met de Azure-abonnementen die zijn gekoppeld aan de aangemelde Microsoft-account, met
Voer az account show uit om het huidige Azure-abonnement te bevestigen.
az account showVoer az account list uit om alle namen en ID's van het Azure-abonnement voor een Microsoft-account te bekijken.
az account list --query "[?user.name=='<microsoft_account_email>'].{Name:name, ID:id, Default:isDefault}" --output TableBelangrijkste punten:
- Vervang de
<microsoft_account_email>tijdelijke aanduiding door het Microsoft-account mailadres waarvan u de Azure-abonnementen wilt toevoegen. - Met een Live-account, zoals een hotmail of outlook, moet u mogelijk het volledig gekwalificeerde e-mailadres opgeven. Als uw e-mailadres bijvoorbeeld is, moet u de tijdelijke aanduiding mogelijk
admin@hotmail.comvervangen doorlive.com#admin@hotmail.com.
- Vervang de
Voer az account set uit om een specifiek Azure-abonnement te gebruiken.
az account set --subscription "<subscription_id_or_subscription_name>"Belangrijkste punten:
- Vervang de
<subscription_id_or_subscription_name>tijdelijke aanduiding door de id of naam van het abonnement dat u wilt gebruiken. - Bij
az account sethet aanroepen worden de resultaten van het overschakelen naar het opgegeven Azure-abonnement niet weergegeven. U kunt echter gebruiken omaz account showte bevestigen dat het huidige Azure-abonnement is gewijzigd. - Als u de opdracht uit de vorige stap hebt uitgevoerd, ziet u dat het standaard Azure-abonnement is gewijzigd in het abonnement dat
az account listu hebt opgegeven metaz account set.
- Vervang de
Een service-principal maken
Geautomatiseerde hulpprogramma's die Azure-services implementeren of gebruiken, zoals Terraform, moeten altijd beperkte machtigingen hebben. In plaats van dat toepassingen zich aanmelden als een gebruiker met volledige bevoegdheden, biedt Azure service-principals.
Het meest voorkomende patroon is om u interactief aan te melden bij Azure, een service-principal te maken, de service-principal te testen en die service-principal vervolgens te gebruiken voor toekomstige verificatie (interactief of vanuit uw scripts).
Meld u aan bij Azure om een service-principal te maken. Nadat u zich bij Azure via een Microsoft-account,keert u hier terug.
Als u een service-principal maakt vanuit Git Bash, stelt u de
MSYS_NO_PATHCONVomgevingsvariabele in. (Deze stap is niet nodig als u Cloud Shell.)export MSYS_NO_PATHCONV=1Belangrijkste punten:
- U kunt de
MSYS_NO_PATHCONVomgevingsvariabele globaal instellen (voor alle terminalsessies) of lokaal (voor alleen de huidige sessie). Omdat het maken van een service-principal niet iets is wat u vaak doet, stelt het voorbeeld de waarde voor de huidige sessie in. Als u deze omgevingsvariabele globaal wilt instellen, voegt u de instelling toe aan het~/.bashrcbestand .
- U kunt de
Voer az ad sp create-for-rbac uit om een service-principal te maken.
az ad sp create-for-rbac --name <service_principal_name> --role ContributorBelangrijkste punten:
- U kunt de
<service-principal-name>vervangen door een aangepaste naam voor uw omgeving of de parameter volledig weglaten. Als u de parameter weglaten, wordt de naam van de service-principal gegenereerd op basis van de huidige datum en tijd. - Als de uitvoering is voltooid,
az ad sp create-for-rbacworden verschillende waarden weergegeven. DeappIdwaarden , en worden gebruikt in de volgendepasswordtenantstap. - Het wachtwoord kan niet worden opgehaald als u het kwijt bent. Als zodanig moet u uw wachtwoord op een veilige plaats opslaan. Als u uw wachtwoord bent vergeten, kunt u de referenties van de service-principal opnieuw instellen.
- Voor dit artikel wordt een service-principal met de rol Inzender gebruikt. Zie RBAC: ingebouwde rollen voor meer informatie over Role-Based Access Control (RBAC) en rollen.
- De uitvoer van het maken van de service-principal bevat gevoelige referenties. Zorg ervoor dat u deze referenties niet in uw code op neem of controleer de referenties in uw broncodebeheer.
- Zie het artikel Een Azure-service-principalmaken met de Azure CLI voor meer informatie over opties bij het maken van een service-principal met de Azure CLI.
- U kunt de
Referenties voor de service-principal opgeven in omgevingsvariabelen
Zodra u een service-principal hebt gemaakt, kunt u de referenties voor Terraform opgeven via omgevingsvariabelen.
Bewerk het
~/.bashrcbestand door de volgende omgevingsvariabelen toe te voegen.export ARM_SUBSCRIPTION_ID="<azure_subscription_id>" export ARM_TENANT_ID="<azure_subscription_tenant_id>" export ARM_CLIENT_ID="<service_principal_appid>" export ARM_CLIENT_SECRET="<service_principal_password>"Als u het
~/.bashrcscript wilt uitvoeren, voert u uit (of hetsource ~/.bashrcverkorte equivalent. ~/.bashrcervan). U kunt het script ook afsluiten Cloud Shell opnieuw openen om het script automatisch uit te voeren.. ~/.bashrcZodra de omgevingsvariabelen zijn ingesteld, kunt u de waarden als volgt controleren:
printenv | grep ^ARM*
Belangrijkste punten:
- Net als bij elke omgevingsvariabele gebruikt u de volgende syntaxis om vanuit een Terraform-script toegang te krijgen tot de waarde van een Azure-abonnement:
${env.<environment_variable>}. Als u bijvoorbeeld toegang wilt krijgen totARM_SUBSCRIPTION_IDde waarde, geeft u${env.ARM_SUBSCRIPTION_ID}op. - Als u Terraform-uitvoeringsplannen maakt en toe passen, worden wijzigingen aangebracht in het Azure-abonnement dat is gekoppeld aan de service-principal. Dit kan soms verwarrend zijn als u bent aangemeld bij één Azure-abonnement en de omgevingsvariabelen naar een tweede Azure-abonnement wijzen. Laten we het volgende voorbeeld eens bekijken om uit te leggen. Stel dat u twee Azure-abonnementen hebt: SubA en SubB. Als het huidige Azure-abonnement SubA is (bepaald via ) terwijl de omgevingsvariabelen naar SubB wijzen, worden alle wijzigingen die door Terraform zijn aangebracht, op
az account showSubB uitgevoerd. Daarom moet u zich aanmelden bij uw SubB-abonnement om Azure CLI-opdrachten uit te voeren of om Azure PowerShell om uw wijzigingen weer te geven.
Referenties voor de service-principal opgeven in een Terraform-providerblok
Het blok Azure-provider definieert de syntaxis waarmee u de verificatiegegevens van uw Azure-abonnement kunt opgeven.
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>2.0"
}
}
}
provider "azurerm" {
features {}
subscription_id = "<azure_subscription_id>"
tenant_id = "<azure_subscription_tenant_id>"
client_id = "<service_principal_appid>"
client_secret = "<service_principal_password>"
}
# Your code goes here
Waarschuwing
De mogelijkheid om uw Azure-abonnementsreferenties op te geven in een Terraform-configuratiebestand kan handig zijn, met name bij het testen. Het wordt echter niet aangeraden referenties op te slaan in een bestand met duidelijke tekst dat kan worden bekeken door niet-vertrouwde personen.
Problemen met Terraform in Azure oplossen
Veelvoorkomende problemen bij het gebruik van Terraform in Azure oplossen