Créer une ressource Azure à l’aide de scripts dans Azure PowerShell

Effectué

En mode interactif, PowerShell vous permet d’écrire des commandes et de les exécuter immédiatement.

Rappelez-vous que l’objectif global de l’exemple de gestion de la relation client est de créer trois environnements de test contenant des machines virtuelles. Vous utilisez des groupes de ressources pour organiser les machines virtuelles dans des environnements distincts : un pour les tests unitaires, un pour les tests d’intégration et un pour les tests d’acceptation. Vous n’avez besoin de créer les groupes de ressources qu’une seule fois, l’utilisation du mode interactif de PowerShell dans ce cas d’usage est donc un bon choix.

Quand vous entrez une commande dans PowerShell, PowerShell la fait correspondre à une applet de commande, puis effectue l’action demandée. D’abord, nous allons examiner certaines commandes courantes que vous pouvez utiliser, puis nous verrons comment installer la prise en charge d’Azure pour PowerShell.

Que sont les applets de commande PowerShell ?

Une commande PowerShell est appelée une cmdlet (prononcez « command-let »). Une cmdlet est une commande qui manipule une fonctionnalité unique. Le terme cmdlet implique une « petite commande ». Par convention, on suggère aux auteurs d’applets de commande de garder les applets de commande simples et à usage unique.

Le produit PowerShell de base est fourni avec des cmdlets qui travaillent avec des fonctionnalités telles que des sessions et des tâches d'arrière-plan. Vous pouvez ajouter des modules à votre installation PowerShell pour obtenir des applets de commande qui manipulent d’autres fonctionnalités. Par exemple, il existe des modules tiers pour travailler avec un ftp, administrer votre système d’exploitation, accéder au système de fichiers, etc.

Les applets de commande suivent une convention de nommage de type verbe-nom, par exemple Get-Process, Format-Table et Start-Service. Il existe également une convention quant au choix du verbe : « get » pour récupérer des données, « set » pour insérer ou mettre à jour des données, « format » pour mettre en forme des données, « out » pour diriger une sortie vers une destination, etc.

Les auteurs d’applets de commande sont encouragés à inclure un fichier d’aide pour chaque applet de commande créé. L’applet de commande Get-Help affiche le fichier d’aide des applets de commande. Par exemple, pour obtenir de l’aide sur l’applet de commande Get-ChildItem, entrez l’instruction suivante dans une session Windows PowerShell :

Get-Help -Name Get-ChildItem -Detailed

Qu’est-ce qu’un module PowerShell ?

Les applets de commande sont livrées dans des modules. Un module PowerShell est une bibliothèque de liens dynamiques (DLL) comprenant le code pour traiter chaque applet de commande disponible. Vous chargez des applets de commande dans PowerShell en chargeant le module qui les contient. Vous pouvez obtenir la liste des modules chargés en utilisant la commande Get-Module :

Get-Module

Cette commande donne quelque chose comme :

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   3.1.0.0    Microsoft.PowerShell.Management     {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Con...
Manifest   3.1.0.0    Microsoft.PowerShell.Utility        {Add-Member, Add-Type, Clear-Variable, Compare-Object...}
Binary     1.0.0.1    PackageManagement                   {Find-Package, Find-PackageProvider, Get-Package, Get-Pack...
Script     1.0.0.1    PowerShellGet                       {Find-Command, Find-DscResource, Find-Module, Find-RoleCap...
Script     2.0.0      PSReadline                          {Get-PSReadLineKeyHandler, Get-PSReadLineOption, Remove-PS...

Qu’est-ce que le module Az PowerShell ?

Az est le nom officiel du module Azure PowerShell qui contient les applets de commande qui permettent d’utiliser les fonctionnalités Azure. Il contient des centaines d’applets de commande qui vous permettent de contrôler quasiment tous les aspects de chaque ressource Azure. Vous pouvez travailler avec des groupes de ressources, du stockage, des machines virtuelles, Microsoft Entra ID, des conteneurs, le Machine Learning, etc. Le module Az est un composant open source disponible sur GitHub.

Notes

Vous avez peut-être vu ou utilisé des commandes Azure PowerShell utilisant un format -AzureRM. Étant donné que les modules Az PowerShell ont maintenant toutes les fonctionnalités des modules AzureRM PowerShell et plus encore, nous allons mettre hors service les modules AzureRM PowerShell le 29 février 2024. Pour éviter les interruptions de service, mettez à jour vos scripts qui utilisent les modules AzureRM PowerShell pour utiliser les modules Az PowerShell avant le 29 février 2024. Pour mettre à jour automatiquement vos scripts, suivez le Guide de démarrage rapide.

Installer le module Az PowerShell

Le module Az PowerShell est disponible à partir d’un dépôt global appelé PowerShell Gallery. Vous pouvez installer le module sur votre machine locale via l’applet de commande Install-Module.

Pour installer le module Azure Az PowerShell le plus récent, exécutez les commandes suivantes :

  1. Ouvrez le menu Démarrer, puis entrez PowerShell.

  2. Sélectionnez l’icône PowerShell.

  3. Saisissez la commande suivante, puis appuyez sur Entrée :

    Install-Module -Name Az -Scope CurrentUser -Repository PSGallery
    

La commande précédente permet d’installer le module pour votre utilisateur actuel (contrôlé par le paramètre Scope).

La commande s’appuie sur NuGet pour récupérer les composants. Ainsi, en fonction de la version que vous avez installée, une invite pour télécharger et installer la dernière version de NuGet peut s’afficher.

NuGet provider is required to continue
PowerShellGet requires NuGet provider version '2.8.5.201' or newer to interact with NuGet-based repositories. The NuGet
 provider must be available in 'C:\Program Files\PackageManagement\ProviderAssemblies' or
'C:\Users\<username>\AppData\Local\PackageManagement\ProviderAssemblies'. You can also install the NuGet provider by running
'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force'. Do you want PowerShellGet to install and import
 the NuGet provider now?
 [Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"):

Entrez O, puis appuyez sur Entrée.

Par défaut, PowerShell Gallery n’est pas configurée en tant que dépôt approuvé pour PowerShellGet. Chaque fois que vous effectuez une installation à partir d’un dépôt non approuvé, vous êtes invité à confirmer l’installation du module avec la sortie suivante :

You are installing the modules from an untrusted repository. If you trust this repository, change its
InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from
'PSGallery'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"):

Entrez O ou A, puis appuyez sur Entrée.

Échec de l’exécution du script

Selon votre configuration de sécurité, Import-Module peut échouer avec une sortie similaire à celle-ci :

import-module : File C:\Program Files\PowerShell\Modules\az\6.3.0\Az.psm1 cannot be loaded
because running scripts is disabled on this system. For more information, see about_Execution_Policies at
https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ import-module Az
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [Import-Module], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess,Microsoft.PowerShell.Commands.ImportModuleCommand

Elle peut également échouer en ne répondant pas du tout. Dans ce cas, appuyez sur Ctrl+C pour arrêter le programme.

Les deux comportements indiquent généralement que la stratégie d’exécution est « restreinte », ce qui signifie que vous ne pouvez pas exécuter les modules que vous téléchargez à partir d’une source externe, notamment PowerShell Gallery. Vous pouvez procéder à la vérification en exécutant l’applet de commande Get-ExecutionPolicy. Si l’applet de commande retourne « restreinte », alors :

  1. Utilisez l’applet de commande Set-ExecutionPolicy pour passer la stratégie sur « RemoteSigned » :

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
    

    Vous êtes invité à fournir l’autorisation :

    The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose
    you to the security risks described in the about_Execution_Policies help topic at
    https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): Y
    
  2. Entrez O ou A, puis appuyez sur Entrée.

  3. À l’invite de commandes, utilisez la touche flèche haut de votre clavier, puis réexécutez la commande Install-Module pour Azure.

Vous devez pouvoir voir le module Az PowerShell se charger. Une fois l’opération effectuée, vous pouvez utiliser Import-Module pour charger les applets de commande.

L’installation d’Azure PowerShell sur Linux ou macOS utilise les mêmes commandes.

  1. Dans un terminal, exécutez la commande suivante pour lancer PowerShell.

    pwsh
    
  2. Exécutez la commande suivante à l’invite PowerShell pour installer Azure PowerShell.

    Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force
    
  3. S’il vous est demandé si vous faites confiance aux modules de PSGallery, répondez Oui ou Oui pour tout.

Mettre à jour un module PowerShell

Vous recevrez peut-être un message d’avertissement ou d’erreur indiquant qu’une version du module Azure PowerShell est déjà installée. Si c’est le cas, vous pouvez émettre la commande suivante pour effectuer la mise à jour vers la dernière version.

Update-Module -Name Az

Comme avec l’applet de commande Install-Module, répondez Oui ou Oui pour tout quand vous êtes invité à faire confiance au module. Vous pouvez également utiliser la commande Update-Module pour réinstaller un module si vous rencontrez des problèmes.

Exemple : Guide pratique pour créer un groupe de ressources avec Azure PowerShell

Une fois le module Azure installé, vous pouvez commencer à utiliser Azure. Nous allons effectuer une tâche courante : créer un groupe de ressources. Comme vous le savez, nous utilisons des groupes de ressources pour gérer des ressources associées. La création d’un groupe de ressources est une des premières tâches que vous effectuez quand vous démarrez une nouvelle solution Azure.

Il existe quatre étapes que vous devez effectuer :

  1. Importez les applets de commande Azure.

  2. Connectez-vous à votre abonnement Azure.

  3. Créez le groupe de ressources.

  4. Vérifiez que la création a abouti.

L’illustration suivante propose une vue d’ensemble de ces étapes :

Diagram showing the steps to create a resource group.

Chaque étape correspond à une applet de commande différente.

Importez les applets de commande Azure

À partir de PowerShell 3.0, les modules sont chargés automatiquement quand vous utilisez une applet de commande dans le module. Il n’est plus nécessaire d’importer manuellement les modules PowerShell, sauf si vous avez changé les paramètres de chargement automatique des modules par défaut.

Connecter

Quand vous utilisez une installation locale d’Azure PowerShell, vous devez vous authentifier pour pouvoir exécuter des commandes Azure. L’applet de commande Connect-AzAccount vous invite à entrer vos informations d’identification Azure, puis se connecte à votre abonnement Azure. Elle comprend de nombreux paramètres facultatifs, mais si vous avez uniquement besoin d’une invite interactive, aucun paramètre n’est nécessaire :

Connect-AzAccount

Utiliser des abonnements

Si vous débutez avec Azure, vous avez probablement un seul abonnement. Cependant, si vous utilisez Azure depuis un moment déjà, vous avez peut-être créé plusieurs abonnements Azure. Vous pouvez configurer Azure PowerShell pour exécuter les commandes sur un abonnement spécifique.

Vous ne pouvez être que dans un seul abonnement à la fois. Utilisez l’applet de commande Get-AzContext pour déterminer l’abonnement actif. S’il ne s’agit pas de l’abonnement approprié, vous pouvez le changer à l’aide d’une autre applet de commande.

  1. Obtenez une liste de tous les noms d’abonnement de votre compte avec la commande Get-AzSubscription.

  2. Modifiez l’abonnement en passant le nom de celui à sélectionner.

Set-AzContext -Subscription '00000000-0000-0000-0000-000000000000'

Si vous avez besoin de rechercher l’ID d’abonnement, accédez au portail Azure et, dans la page d’accueil, sélectionnez Abonnements.

Obtenir la liste de tous les groupes de ressources

Vous pouvez récupérer une liste de tous les groupes de ressources dans l’abonnement actif.

Get-AzResourceGroup

Pour obtenir une vue plus concise, vous pouvez envoyer le résultat de Get-AzResourceGroup à l’applet de commande Format-Table à l’aide d’un signe « | ».

Get-AzResourceGroup | Format-Table

La sortie ressemble à ceci :

ResourceGroupName                  Location       ProvisioningState Tags TagsTable ResourceId
-----------------                  --------       ----------------- ---- --------- ----------
cloud-shell-storage-southcentralus southcentralus Succeeded                        /subscriptions/00000000-0000-0000...
ExerciseResources                  eastus         Succeeded                        /subscriptions/00000000-0000-0000...

Créer un groupe de ressources

Comme vous le savez, quand vous créez des ressources dans Azure, vous les placez toujours dans un groupe de ressources pour pouvoir les gérer. Un groupe de ressources est souvent une des premières choses que vous créez quand vous démarrez une nouvelle application.

Vous pouvez créer des groupes de ressources à l’aide de l’applet de commande New-AzResourceGroup. Vous devez spécifier un nom et un emplacement. Le nom doit être unique dans votre abonnement. La localisation détermine où sont stockées les métadonnées de votre groupe de ressources (ce qui peut être important pour des raisons de conformité). Vous utilisez des chaînes telles que « USA Ouest », « Europe Nord » ou « Inde Ouest » pour spécifier l’emplacement. Comme avec la plupart des applets de commande Azure, New-AzResourceGroup comprend de nombreux paramètres facultatifs. Toutefois, la syntaxe de base est la suivante :

New-AzResourceGroup -Name <name> -Location <location>

Remarque

N’oubliez pas que nous travaillons dans un bac à sable Azure actif, qui crée le groupe de ressources à votre place. Utilisez la commande précédente si vous préférez utiliser votre propre abonnement.

Vérifier les ressources

L’applet de commande Get-AzResource répertorie vos ressources Azure, ce qui est utile pour vérifier que les ressources ont été créées et que la création du groupe de ressources a réussi.

Get-AzResource

Comme la commande Get-AzResourceGroup, vous pouvez obtenir une vue plus concise à l’aide de l’applet de commande Format-Table :

Get-AzResource | Format-Table

Vous pouvez également la filtrer pour certains groupes de ressources, afin de répertorier uniquement les ressources associées à ces groupes :

Get-AzResource -ResourceGroupName ExerciseResources

Créer une machine virtuelle Azure

Une autre tâche courante que vous pouvez effectuer avec PowerShell consiste à créer des machines virtuelles.

Azure PowerShell fournit l’applet de commande New-AzVm pour créer une machine virtuelle. L’applet de commande peut prendre de nombreux paramètres pour traiter le grand nombre de paramètres de configuration de machine virtuelle. La plupart des paramètres ayant des valeurs par défaut raisonnables, il nous suffit d’en spécifier cinq :

  • ResourceGroupName : groupe de ressources dans lequel la nouvelle machine virtuelle doit être placée.
  • Name : Nom de la machine virtuelle dans Azure.
  • Emplacement : emplacement géographique où la machine virtuelle doit être provisionnée.
  • Credential : Objet contenant le nom d’utilisateur et le mot de passe du compte Administrateur de la machine virtuelle. Nous utilisons l’applet de commande Get-Credential. Cette applet de commande demande un nom d’utilisateur et un mot de passe, et les place dans un objet d’informations d’identification.
  • Image : image du système d’exploitation à utiliser pour la machine virtuelle. Il s’agit généralement d’une distribution Linux ou de Windows Server.
   New-AzVm
       -ResourceGroupName <resource group name>
       -Name <machine name>
       -Credential <credentials object>
       -Location <location>
       -Image <image name>

Vous pouvez fournir ces paramètres directement auprès de l’applet de commande comme indiqué dans l’exemple précédent. Vous pouvez également utiliser d’autres applets de commande pour configurer la machine virtuelle, comme Set-AzVMOperatingSystem, Set-AzVMSourceImage, Add-AzVMNetworkInterface et Set-AzVMOSDisk.

Voici un exemple qui lie l’applet de commande Get-Credential au paramètre -Credential :

New-AzVM -Name MyVm -ResourceGroupName ExerciseResources -Credential (Get-Credential) ...

Le suffixe AzVM est spécifique aux commandes basées sur une machine virtuelle dans PowerShell. Vous pouvez en utiliser d’autres :

Commande Description
Remove-AzVM Supprime une machine virtuelle Azure
Start-AzVM Démarre une machine virtuelle arrêtée
Stop-AzVM Arrête une machine virtuelle en cours d’exécution
Restart-AzVM Redémarre une machine virtuelle
Update-AzVM Met à jour la configuration d’une machine virtuelle

Exemple : Obtention d’informations pour une machine virtuelle

Vous pouvez lister les machines virtuelles de votre abonnement à l’aide de la commande Get-AzVM -Status. Cette commande prend également en charge l’entrée d’une machine virtuelle spécifique quand vous incluez la propriété -Name. Ici, nous l’attribuons à une variable PowerShell :

$vm = Get-AzVM  -Name MyVM -ResourceGroupName ExerciseResources

Il s’agit d’un point intéressant, car cela montre que votre machine virtuelle est maintenant un objet avec lequel vous pouvez interagir. Par exemple, vous pouvez apporter des changements à cet objet, puis envoyer (push) les changements vers Azure à l’aide de la commande Update-AzVM :

$ResourceGroupName = "ExerciseResources"
$vm = Get-AzVM  -Name MyVM -ResourceGroupName $ResourceGroupName
$vm.HardwareProfile.vmSize = "Standard_DS3_v2"

Update-AzVM -ResourceGroupName $ResourceGroupName  -VM $vm

Le mode interactif de PowerShell est approprié pour les tâches ponctuelles. Dans notre exemple, comme nous utilisons le même groupe de ressources pendant toute la durée de vie du projet, vous pouvez le créer de manière interactive. Le mode interactif est souvent plus rapide et plus simple pour cette tâche que l’écriture et l’exécution d’un script.