Installare Terraform in Windows con Azure PowerShell

Terraform consente di definire, visualizzare in anteprima e distribuire l'infrastruttura cloud. Con Terraform è possibile creare file di configurazione usando la sintassi HCL. La sintassi HCL consente di specificare il provider di servizi cloud, ad esempio Azure, e gli elementi che costituiscono l'infrastruttura cloud. Dopo aver creato i file di configurazione, è necessario creare un piano di esecuzione che consenta di visualizzare in anteprima le modifiche apportate all'infrastruttura prima che vengano distribuite. Dopo aver verificato le modifiche, è possibile applicare il piano di esecuzione per distribuire l'infrastruttura.

Questo articolo descrive come iniziare a usare Terraform in Azure con PowerShell.

In questo articolo vengono illustrate le operazioni seguenti:

  • Installare la versione più recente di PowerShell
  • Installare il nuovo modulo Az di PowerShell
  • Installare l'interfaccia della riga di comando di Azure
  • Installazione di Terraform
  • Informazioni sugli scenari comuni di autenticazione di Terraform e Azure
  • Eseguire l'autenticazione tramite un account Microsoft da Cloud Shell (usando Bash o PowerShell)
  • Eseguire l'autenticazione tramite un account Microsoft da Windows (usando Bash o PowerShell)
  • Creare un'entità servizio usando l'interfaccia della riga di comando di Azure
  • Creare un'entità servizio usando PowerShell
  • Specificare le credenziali dell'entità servizio nelle variabili di ambiente
  • Specificare le credenziali dell'entità servizio in un blocco del provider Terraform

1. Configurare l'ambiente

  • Sottoscrizione di Azure: Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

2. Installare Azure PowerShell

  1. Il modulo di PowerShell più recente che consente l'interazione con le risorse di Azure è denominato Az di Azure PowerShell. Quando si usa il modulo Az di Azure PowerShell, la versione consigliata è PowerShell 7 (o successiva) in tutte le piattaforme. Se PowerShell è installato, è possibile verificare la versione immettendo il comando seguente al prompt di PowerShell.

    $PSVersionTable.PSVersion
    
  2. Installare PowerShell. Questa demo è stata testata usando PowerShell 7.2.1 (x64) in Windows 10.

3. Installare l'interfaccia della riga di comando di Azure

Per eseguire l'autenticazione di Terraform in Azure, è necessario installare l'interfaccia della riga di comando di Azure. Questa demo è stata testata usando l'interfaccia della riga di comando di Azure versione 2.32.0.

4. Installare Terraform per Windows

  1. Scaricare Terraform. Questo articolo è stato testato usando Terraform versione 1.1.4.

  2. Dal download estrarre il file eseguibile in una directory di scelta , ad esempio c:\terraform.

  3. Aggiornare il percorso globale del sistema con il file eseguibile.

  4. Aprire una finestra del terminale.

  5. Verificare la configurazione del percorso globale con il comando terraform.

    terraform -version
    

5. Autenticare Terraform in Azure

Scenari di autenticazione di Terraform e Azure

Terraform supporta solo l'autenticazione in Azure tramite l'interfaccia della riga di comando di Azure. L'autenticazione tramite Azure PowerShell non è supportata. Pertanto, anche se è possibile usare il modulo Azure PowerShell durante l'esecuzione del lavoro di Terraform, è prima necessario eseguire l'autenticazione in Azure usando l'interfaccia della riga di comando di Azure.

Questo articolo illustra come autenticare Terraform in Azure per gli scenari seguenti. Per altre informazioni sulle opzioni per l'autenticazione di Terraform in Azure, vedere Autenticazione tramite l'interfaccia della riga di comando di Azure.

Eseguire l'autenticazione in Azure tramite un account Microsoft

Un account Microsoft è un nome utente (associato a un messaggio di posta elettronica e alle relative credenziali) usato per accedere ai servizi Microsoft, ad esempio Azure. Un account Microsoft può essere associato a una o più sottoscrizioni di Azure, con una delle sottoscrizioni predefinite.

La procedura seguente illustra come accedere ad Azure in modo interattivo usando un account Microsoft, elencare le sottoscrizioni di Azure associate all'account (incluso il valore predefinito) e impostare la sottoscrizione corrente.

  1. Aprire una riga di comando che ha accesso all'interfaccia della riga di comando di Azure.

  2. Eseguire az login senza parametri e seguire le istruzioni per accedere ad Azure.

    az login
    

    Punti principali:

    • Al termine dell'accesso, az login viene visualizzato un elenco delle sottoscrizioni di Azure associate all'account Microsoft connesso, inclusa la sottoscrizione predefinita.
  3. Per confermare la sottoscrizione di Azure corrente, eseguire az account show.

    az account show
    
  4. Per visualizzare tutti i nomi di sottoscrizione e gli ID di Azure per un account Microsoft specifico, eseguire az account list.

    az account list --query "[?user.name=='<microsoft_account_email>'].{Name:name, ID:id, Default:isDefault}" --output Table
    

    Punti principali:

    • Sostituire il segnaposto con l'indirizzo <microsoft_account_email> di posta elettronica dell'account Microsoft le cui sottoscrizioni di Azure da elencare.
    • Con un account Live, ad esempio hotmail o Outlook, potrebbe essere necessario specificare l'indirizzo di posta elettronica completo. Ad esempio, se l'indirizzo di posta elettronica è admin@hotmail.com, potrebbe essere necessario sostituire il segnaposto con live.com#admin@hotmail.com.
  5. Per usare una sottoscrizione di Azure specifica, eseguire az account set.

    az account set --subscription "<subscription_id_or_subscription_name>"
    

    Punti principali:

    • Sostituire il segnaposto con l'ID o il <subscription_id_or_subscription_name> nome della sottoscrizione da usare.
    • La chiamata a az account set non visualizza i risultati del passaggio alla sottoscrizione di Azure specificata. È però possibile usare az account show per confermare che la sottoscrizione di Azure corrente è cambiata.
    • Se si esegue il az account list comando del passaggio precedente, si noterà che la sottoscrizione di Azure predefinita è stata modificata alla sottoscrizione specificata con az account set.

Creare un'entità servizio

Gli strumenti automatici che distribuiscono o usano servizi di Azure, come Terraform, devono sempre avere autorizzazioni limitate. Invece di consentire alle applicazioni l'accesso come utenti con privilegi completi, Azure offre le identità servizio.

Il modello più comune consiste nell'accedere in modo interattivo ad Azure, creare un'entità servizio, testare l'entità servizio e quindi usare tale entità servizio per l'autenticazione futura (interattivamente o dagli script).

  1. Per creare un'entità servizio, accedere ad Azure. Dopo l'autenticazione in Azure tramite un account Microsoft, tornare qui.

  2. Se si crea un'entità servizio da Git Bash, impostare la MSYS_NO_PATHCONV variabile di ambiente. Questo passaggio non è necessario se si usa Cloud Shell.

    export MSYS_NO_PATHCONV=1    
    

    Punti principali:

    • È possibile impostare la MSYS_NO_PATHCONV variabile di ambiente a livello globale (per tutte le sessioni del terminale) o in locale (solo per la sessione corrente). Poiché la creazione di un'entità servizio non è spesso eseguita, l'esempio imposta il valore per la sessione corrente. Per impostare questa variabile di ambiente a livello globale, aggiungere l'impostazione al ~/.bashrc file.
  3. Per creare un'entità servizio, eseguire az ad sp create-for-rbac.

    az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>
    

    Punti principali:

    • È possibile sostituire l'oggetto <service-principal-name> con un nome personalizzato per l'ambiente o omettere completamente il parametro. Se si omette il parametro, il nome dell'entità servizio viene generato in base alla data e all'ora correnti.
    • Al termine, az ad sp create-for-rbac visualizza diversi valori. I valori appId, password e tenant vengono usati nel passaggio successivo.
    • Se viene persa, questa password non può essere recuperata. Di conseguenza, è consigliabile archiviarla in un luogo sicuro. Se si dimentica la password, è possibile reimpostare le credenziali dell'entità servizio.
    • Per questo articolo viene usata un'entità servizio con un ruolo Collaboratore . Per altre informazioni sui ruoli Role-Based Controllo di accesso (RBAC), vedere Controllo degli accessi in base al ruolo: ruoli predefiniti.
    • L'output dalla creazione dell'entità servizio include credenziali sensibili. Assicurarsi di non includere queste credenziali nel codice o controllare le credenziali nel controllo del codice sorgente.
    • Per altre informazioni sulle opzioni durante la creazione di un'entità servizio con l'interfaccia della riga di comando di Azure, vedere l'articolo Creare un'entità servizio di Azure con l'interfaccia della riga di comando di Azure.

Specificare le credenziali dell'entità servizio nelle variabili di ambiente

Dopo aver creato un'entità servizio, è possibile specificarne le credenziali per Terraform tramite le variabili di ambiente.

  1. Modificare il ~/.bashrc file aggiungendo le variabili di ambiente seguenti.

    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>"
    
  2. Per eseguire lo ~/.bashrc script, eseguire source ~/.bashrc (o il relativo equivalente . ~/.bashrcabbreviato). È anche possibile uscire e riaprire Cloud Shell affinché lo script venga eseguito automaticamente.

    . ~/.bashrc
    
  3. Dopo aver impostato le variabili di ambiente, è possibile verificare i relativi valori come indicato di seguito:

    printenv | grep ^ARM*
    

Punti principali:

  • Come per qualsiasi variabile di ambiente, per accedere a un valore di sottoscrizione di Azure dall'interno di uno script Terraform, usare la sintassi seguente: . ${env.<environment_variable>} Ad esempio, per accedere al ARM_SUBSCRIPTION_ID valore, specificare ${env.ARM_SUBSCRIPTION_ID}.
  • La creazione e l'applicazione di piani di esecuzione terraform apportano modifiche alla sottoscrizione di Azure associata all'entità servizio. Questo fatto può talvolta generare confusione se si è connessi a una sottoscrizione di Azure e le variabili di ambiente puntano a una seconda sottoscrizione di Azure. Esaminiamo l'esempio seguente per spiegare. Si supponga di avere due sottoscrizioni di Azure: SubA e SubB. Se la sottoscrizione di Azure corrente è SubA (determinata tramite az account show) mentre le variabili di ambiente puntano a SubB, le modifiche apportate da Terraform si trovano in SubB. È quindi necessario accedere alla sottoscrizione SubB per eseguire i comandi dell'interfaccia della riga di comando di Azure o Azure PowerShell comandi per visualizzare le modifiche.

Specificare le credenziali dell'entità servizio in un blocco del provider Terraform

Il blocco del provider di Azure definisce la sintassi che consente di specificare le informazioni di autenticazione della sottoscrizione di Azure.

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

Attenzione

La possibilità di specificare le credenziali della sottoscrizione di Azure in un file di configurazione terraform può essere utile, soprattutto durante il test. Tuttavia, non è consigliabile archiviare le credenziali in un file di testo non crittografato che può essere visualizzato da utenti non attendibili.

Risolvere i problemi di Terraform in Azure

Risolvere i problemi comuni relativi all'uso di Terraform in Azure

Passaggi successivi