Installer Terraform sur Windows avec Azure PowerShell
Terraform permet la définition, l’aperçu et le déploiement d’une infrastructure cloud. Terraform vous permet de créer des fichiers de configuration à l’aide de la syntaxe HCL. La syntaxe HCL vous permet de spécifier un fournisseur de services cloud, tel qu’Azure, et les éléments qui composent votre infrastructure cloud. Après avoir créé vos fichiers de configuration, vous créez un plan d’exécution qui vous permet d’afficher un aperçu de vos modifications d’infrastructure avant leur déploiement. Une fois que vous avez vérifié les modifications, vous appliquez le plan d’exécution pour déployer l’infrastructure.
Cet article explique comment débuter avec Terraform sur Azure à l’aide de PowerShell.
Dans cet article, vous apprendrez comment :
- Installer la version la plus récente de PowerShell
- Installer le nouveau module PowerShell Az
- Installer l’interface de ligne de commande Microsoft Azure
- Installer Terraform
- Comprendre les scénarios d’authentification Terraform et Azure courants
- S’authentifier par le biais d’un compte Microsoft à partir de Cloud Shell (avec Bash ou PowerShell)
- S’authentifier par le biais d’un compte Microsoft à partir de Windows (avec Bash ou PowerShell)
- Créer un principal de service avec Azure CLI
- Créer un principal de service avec Azure PowerShell
- Spécifier les informations d’identification du principal de service dans des variables d’environnement
- Spécifier les informations d’identification du principal de service dans un bloc provider Terraform
1. Configurer votre environnement
- Abonnement Azure : Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
2. Installer Azure PowerShell
Le module PowerShell le plus récent qui permet l’interaction avec les ressources Azure se nomme le module Azure PowerShell Az. Lors de l’utilisation du module Azure PowerShell Az, PowerShell 7 (ou version ultérieure) est la version recommandée sur toutes les plateformes. Si PowerShell est déjà installé, vous pouvez vérifier sa version en entrant la commande suivante à une invite PowerShell.
$PSVersionTable.PSVersion
Installez PowerShell. Cette démonstration a été testée à l’aide de PowerShell 7.2.1 (x64) sur Windows 10.
3. Installer Azure CLI
Pour que Terraform s’authentifie auprès d’Azure, vous devez installer l’interface Azure CLI. Cette démonstration a été testée à l’aide d’Azure CLI version 2.32.0.
4. Installer Terraform pour Windows
Téléchargez Terraform. Cet article a été testé à l’aide de Terraform version 1.1.4.
À partir du téléchargement, extrayez l’exécutable dans le répertoire de votre choix (par exemple,
c:\terraform
).Mettez à jour le chemin global de votre système vers l’exécutable.
Ouvrez une fenêtre de terminal.
Vérifiez la configuration du chemin global à l’aide de la commande
terraform
.terraform -version
5. Authentifier Terraform auprès d’Azure
Scénarios d’authentification Terraform et Azure
Terraform prend uniquement en charge l’authentification sur Azure par le biais d’Azure CLI. L’authentification à l’aide de Azure PowerShell n’est pas prise en charge. Ainsi, même si vous pouvez utiliser le module Azure PowerShell avec Terraform, vous devez d’abord vous authentifier auprès d’Azure en utilisant Azure CLI.
Cet article explique comment authentifier Terraform auprès d’Azure pour les scénarios suivants. Pour plus d’informations sur les options d’authentification de Terraform auprès d’Azure, consultez Authentification à l’aide d’Azure CLI.
- S’authentifier via un compte Microsoft à l’aide de Cloud Shell (avec Bash ou PowerShell)
- S’authentifier via un compte Microsoft à l’aide de Windows (avec Bash ou PowerShell)
- Authentifiez-vous via un principal de service :
- Si vous n’avez pas de principal de service, créez-en un.
- Authentifiez-vous auprès d’Azure en utilisant des variables d’environnement ou en utilisant le bloc provider Terraform.
S’authentifier auprès d’Azure par le biais d’un compte Microsoft
Un compte Microsoft est un nom d’utilisateur (associé à un e-mail et à ses informations d’identification) qui est utilisé pour se connecter aux services Microsoft, tels qu’Azure. Un compte Microsoft peut être associé à un ou plusieurs abonnements Azure, l’un d’entre eux étant celui par défaut.
Pour cela, procédez comme suit :
- Se connecter à Azure de manière interactive à l’aide d’un compte Microsoft
- Répertorier les abonnements Azure associés au compte (y compris la valeur par défaut)
- Définissez l’abonnement actuel.
Ouvrez une ligne de commande qui a accès à Azure CLI.
Exécutez az login sans aucun paramètre et suivez les instructions pour vous connecter à Azure.
az login
Points essentiels :
- Une fois la connexion établie,
az login
affiche une liste des abonnements Azure associés au compte Microsoft connecté, y compris l’abonnement par défaut.
- Une fois la connexion établie,
Pour confirmer l’abonnement Azure actuel, exécutez az account show.
az account show
Pour voir tous les noms et ID d’abonnement Azure d’un compte Microsoft spécifique, exécutez az account list.
az account list --query "[?user.name=='<microsoft_account_email>'].{Name:name, ID:id, Default:isDefault}" --output Table
Points essentiels :
- Remplacez l’espace réservé
<microsoft_account_email>
par l’adresse e-mail du compte Microsoft dont vous voulez lister les abonnements Azure. - Avec un compte live , tel qu’un hotmail ou Outlook, vous devrez peut-être spécifier l’adresse e-mail complète. Par exemple, si votre adresse e-mail est
admin@hotmail.com
, vous aurez peut-être besoin de remplacer l’espace réservé parlive.com#admin@hotmail.com
.
- Remplacez l’espace réservé
Pour utiliser un abonnement Azure spécifique, exécutez az account set.
az account set --subscription "<subscription_id_or_subscription_name>"
Points essentiels :
- Remplacez l’espace réservé
<subscription_id_or_subscription_name>
par l’ID (ou le nom) de l’abonnement que vous voulez utiliser. - L’appel de
az account set
n’affiche pas les résultats du basculement vers l’abonnement Azure spécifié. Toutefois, vous pouvez utiliseraz account show
pour confirmer que l’abonnement Azure actuel a changé. - Si vous exécutez la commande
az account list
de l’étape précédente, vous pouvez voir que l’abonnement Azure par défaut a été remplacé par l’abonnement que vous avez spécifié avecaz account set
.
- Remplacez l’espace réservé
Créer un principal du service
Les outils automatisés qui déploient ou utilisent des services Azure, tels que Terraform, doivent toujours avoir des autorisations restreintes. Plutôt que de faire se connecter des applications en tant qu’utilisateur entièrement privilégié, Azure offre des principaux du service.
Le modèle le plus courant consiste à se connecter de manière interactive à Azure, à créer un principal de service, à tester le principal de service, puis à utiliser ce principal de service pour l’authentification future (de manière interactive ou à partir de vos scripts).
Pour créer un principal de service, connectez-vous à Azure. Après vous être authentifié auprès d’Azure par le biais d’un compte Microsoft, revenez ici.
Si vous créez un principal de service à partir de Git Bash, définissez la variable d’environnement
MSYS_NO_PATHCONV
. (Cette étape n’est pas nécessaire si vous utilisez Cloud Shell.)export MSYS_NO_PATHCONV=1
Points essentiels :
- Vous pouvez définir la variable d’environnement
MSYS_NO_PATHCONV
globalement (pour toutes les sessions de terminal) ou localement (uniquement pour la session active). Comme la création d’un principal de service n’est pas une chose que vous effectuez souvent, l’exemple définit la valeur de la session active. Pour définir cette variable d’environnement globalement, ajoutez le paramètre au fichier~/.bashrc
.
- Vous pouvez définir la variable d’environnement
Pour créer un principal de service, exécutez az ad sp create-for-rbac.
az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>
Points essentiels :
- Vous pouvez remplacer
<service-principal-name>
par un nom personnalisé pour votre environnement ou omettre complètement le paramètre. Si vous omettez le paramètre, le nom du principal de service est généré en fonction de la date et de l’heure actuelles. - À la fin de l’opération,
az ad sp create-for-rbac
affiche plusieurs valeurs. Les valeursappId
,password
ettenant
sont utilisées à l’étape suivante. - Le mot de passe ne peut pas être récupéré en cas de perte. Par conséquent, vous devez conserver votre mot de passe en lieu sûr. Si vous oubliez votre mot de passe, vous pouvez réinitialiser les informations d’identification du principal de service.
- Pour cet article, un principal de service doté d’un rôle Contributeur est utilisé. Pour plus d’informations sur les rôles Role-Based Access Control (RBAC), consultez RBAC : rôles intégrés.
- La sortie de la création du principal de service comprend des informations d’identification sensibles. Veillez à ne pas inclure ces informations d’identification dans votre code ou vérifiez les informations d’identification dans votre contrôle de code source.
- Pour plus d’informations sur les options de création d’un principal de service avec Azure CLI, consultez l’article Créer un principal de service Azure avec Azure CLI.
- Vous pouvez remplacer
Spécifier les informations d’identification du principal de service dans des variables d’environnement
Une fois que vous avez créé un principal de service, vous pouvez spécifier ses informations d’identification pour Terraform par le biais de variables d’environnement.
Modifiez le fichier
~/.bashrc
en ajoutant les variables d’environnement suivantes.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>"
Pour exécuter le script
~/.bashrc
, exécutezsource ~/.bashrc
(ou son équivalent abrégé. ~/.bashrc
). Vous pouvez aussi quitter et rouvrir Cloud Shell pour que le script s’exécute automatiquement.. ~/.bashrc
Une fois les variables d’environnement définies, vous pouvez vérifier leurs valeurs comme suit :
printenv | grep ^ARM*
Points essentiels :
- Comme pour toute variable d’environnement, pour accéder à une valeur d’abonnement Azure à partir d’un script Terraform, utilisez la syntaxe suivante :
${env.<environment_variable>}
. Par exemple, pour accéder à la valeurARM_SUBSCRIPTION_ID
, spécifiez${env.ARM_SUBSCRIPTION_ID}
. - La création et l’application de plans d’exécution Terraform apportent des modifications à l’abonnement Azure associé au principal de service. Cela peut parfois prêter à confusion si vous êtes connecté à un abonnement Azure et que les variables d’environnement pointent vers un autre abonnement Azure. Examinons l’exemple suivant pour mieux comprendre. Supposons que vous avez deux abonnements Azure : AboA et AboB. Si l’abonnement Azure actif est AboA (déterminé par le biais de la commande
az account show
) alors que les variables d’environnement pointent vers AboB, toutes les modifications apportées par Terraform le sont sur AboB. Vous avez donc besoin de vous connecter à votre abonnement AboB pour exécuter des commandes Azure CLI ou Azure PowerShell afin de voir vos modifications.
Spécifier les informations d’identification du principal de service dans un bloc provider Terraform
Le bloc provider Azure définit la syntaxe qui vous permet de spécifier les informations d’authentification de votre abonnement 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
Attention
La possibilité de spécifier les informations d’identification de votre abonnement Azure dans un fichier de configuration Terraform peut s’avérer pratique, notamment dans le cadre de tests. Toutefois, il n’est pas recommandé de stocker les informations d’identification dans un fichier en texte clair qui peut être consulté par des personnes non approuvées.
Résoudre les problèmes liés à Terraform sur Azure
Résoudre les problèmes courants liés à l’utilisation de Terraform sur Azure