Creación de un recurso de Azure mediante scripts en Azure PowerShell

Completado

En el modo interactivo, PowerShell le permite escribir comandos y ejecutarlos de inmediato.

Recuerde que el objetivo general del ejemplo de Administración de relaciones con los clientes (CRM) es crear tres entornos de prueba que contienen máquinas virtuales. Usa los grupos de recursos para garantizar que las máquinas virtuales se organizan en entornos independientes: uno para las pruebas unitarias, otro para las pruebas de integración y un tercero para las pruebas de aceptación. Solo tiene que crear los grupos de recursos una vez, por lo que, en este caso de uso, el modo interactivo de PowerShell es una buena elección.

Cuando se escribe un comando en PowerShell, este lo hace coincidir con un cmdlet y luego realiza la acción solicitada. En primer lugar, veremos algunos comandos comunes que puede usar, después veremos cómo instalar la compatibilidad de Azure con PowerShell.

¿Qué son los cmdlets de PowerShell?

Un comando de PowerShell se denomina cmdlet (que se pronuncia “command-let”). Un cmdlet es un comando que manipula una sola característica. El término cmdlet quiere decir "pequeño comando". Por convención, se anima a los autores de cmdlets a hacerlos sencillos y con un único propósito.

El producto base de PowerShell incluye cmdlets que funcionan con características como las sesiones y los trabajos en segundo plano. Puede agregar módulos a la instalación de PowerShell para obtener cmdlets que manipulen otras características. Por ejemplo, hay módulos de terceros para trabajar con FTP, administrar el sistema operativo, acceder al sistema de archivos, etc.

Los cmdlets siguen una convención de nomenclatura verbo-sustantivo; por ejemplo, Get-Process, Format-Table y Start-Service. También hay una convención para la elección del verbo: "get" para recuperar datos, "set" para insertar o actualizar datos, "format" para dar formato a los datos, "out" para dirigir la salida a un destino, etc.

Se recomienda a los creadores de cmdlets incluir un archivo de ayuda con cada cmdlet. El cmdlet Get-Help muestra el archivo de ayuda de cualquier cmdlet. Por ejemplo, para obtener ayuda sobre el cmdlet Get-ChildItem, escriba la siguiente instrucción en una sesión de Windows PowerShell:

Get-Help -Name Get-ChildItem -Detailed

¿Qué son los módulos de PowerShell?

Los cmdlets se suministran en módulos. Un módulo PowerShell es una biblioteca de vínculos dinámicos (DLL) que incluye el código para procesar cada cmdlet disponible. Carga cmdlets en PowerShell mediante la carga del módulo en el que están contenidos. Para obtener una lista de los módulos cargados, use el comando Get-Module:

Get-Module

Este comando genera un resultado similar a este:

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é es el módulo Az de PowerShell?

Az es el nombre formal del módulo de Azure PowerShell, que contiene cmdlets para trabajar con las características de Azure. Contiene cientos de cmdlets que le permiten controlar casi cualquier aspecto de todos los recursos de Azure. Puede trabajar con grupos de recursos, almacenamiento, máquinas virtuales, Microsoft Entra ID, contenedores, aprendizaje automático, etc. El módulo Az es un componente de código abierto disponible en GitHub.

Nota:

Es posible que haya visto o usado comandos de Azure PowerShell con un formato -AzureRM. Como los módulos de Az PowerShell ya tienen todas las funcionalidades de los de AzureRM PowerShell, incluso más, el 29 de febrero de 2024 se van a retirar estos últimos. Para evitar interrupciones del servicio, actualice los scripts que usan los módulos de AzureRM PowerShell para que utilicen los de Az PowerShell antes del 29 de febrero de 2024. Para actualizar automáticamente los scripts, siga la guía de inicio rápido.

Instale el módulo Az de PowerShell.

El módulo Az de PowerShell está disponible en un repositorio global llamado Galería de PowerShell. Se puede instalar en la máquina local por medio del cmdlet Install-Module.

Para instalar el módulo Azure Az de PowerShell más reciente, ejecute los comandos siguientes:

  1. Abra el menú Inicio y escriba PowerShell.

  2. Seleccione el icono de PowerShell.

  3. Escriba el siguiente comando y presione Entrar:

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

El comando anterior instala el módulo para el usuario actual (controlado por el parámetro Scope).

El comando se basa en NuGet para recuperar componentes. En función de la versión de NuGet que haya instalado, es posible que reciba un mensaje para descargar e instalar la versión más reciente.

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"):

Escriba Y y presione Entrar.

De manera predeterminada, Galería de PowerShell no está configurada como un repositorio de confianza para PowerShellGet. Cada vez que realice una instalación desde un repositorio que no sea de confianza, se le pide que confirme que quiere instalar el módulo con la siguiente salida:

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"):

Escriba Y o A, y luego presione Entrar.

Error en la ejecución del script

En función de la configuración de seguridad, es posible que se produzca un error en Import-Module como el de la salida siguiente:

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

También es posible que no responda en absoluto y no se pueda realizar la acción. En este caso, presione Ctrl+C para detener el programa.

Los dos comportamientos normalmente indican que la directiva de ejecución está "restringida", lo que significa que no se pueden ejecutar los módulos que se descarguen de un origen externo (lo que incluye la Galería de PowerShell). Para comprobarlo, ejecute el cmdlet Get-ExecutionPolicy. Si el cmdlet devuelve "Restricted (Restringida)", entonces:

  1. Use el cmdlet Set-ExecutionPolicy para cambiar la directiva a "RemoteSigned":

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
    

    Se le pide permiso:

    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. Escriba Y o A, y luego presione Entrar.

  3. En el símbolo del sistema, presione la Flecha arriba del teclado y vuelva a ejecutar el comando Install-Module para Azure.

Debería poder ver que se carga del módulo Az de PowerShell. Cuando termine, podrá usar Import-Module para cargar los cmdlets.

Para la instalación de Azure PowerShell en Linux o macOS se usan los mismos comandos.

  1. En un terminal, ejecute el comando siguiente para iniciar PowerShell.

    pwsh
    
  2. Ejecute el comando siguiente en el símbolo del sistema de PowerShell para instalar Azure PowerShell.

    Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force
    
  3. Si se le pregunta si confía en los módulos de PSGallery, responda o Sí a todo.

Actualización de un módulo de PowerShell

Puede recibir una advertencia o un mensaje de error que indique que ya está instalada una versión del módulo Azure PowerShell. Si es así, puede emitir el siguiente comando para actualizar a la versión más reciente.

Update-Module -Name Az

Como sucede con el cmdlet Install-Module, responda o Sí a todo cuando se le pregunte si confía en el módulo. Si tiene problemas, también puede usar el comando Update-Module para volver a instalar un módulo.

Ejemplo: creación de un grupo de recursos con Azure PowerShell

Una vez que haya instalado el módulo de Azure, puede empezar a trabajar con Azure. Vamos a realizar una tarea común: crear un grupo de recursos. Como sabe, los grupos de recursos se usan para administrar conjuntamente los recursos relacionados. La creación de un grupo de recursos es una de las primeras tareas que se realizan al iniciar una nueva solución de Azure.

Debe realizar cuatro pasos:

  1. Importar los cmdlets de Azure.

  2. Conectarse a la suscripción de Azure.

  3. Crear el grupo de recursos.

  4. Compruebe que la creación se ha realizado correctamente.

En la siguiente ilustración se muestra información general de estos pasos:

Diagram showing the steps to create a resource group.

Cada paso corresponde a un cmdlet diferente.

Importación de los cmdlets de Azure

A partir de PowerShell 3.0, los módulos se cargan automáticamente cuando se usa un cmdlet dentro del módulo. Ya no es necesario importar manualmente módulos de PowerShell a menos que haya cambiado la configuración predeterminada de carga automática de módulos.

Conexión

Cuando trabaje con una instalación local de Azure PowerShell, tiene que autenticarse para poder ejecutar los comandos de Azure. El cmdlet Connect-AzAccount le pide las credenciales de Azure y luego se conecta a la suscripción de Azure. Tiene muchos parámetros opcionales, pero, si lo único que necesita es un aviso interactivo, no se necesita ningún parámetro:

Connect-AzAccount

Trabajo con suscripciones

Si es la primera vez que usa Azure, es probable que solo tenga una suscripción. Pero si ya lleva un tiempo usándolo, puede haber creado varias suscripciones de Azure. Puede configurar Azure PowerShell para ejecutar comandos en una suscripción determinada.

No puede estar en varias suscripciones a la vez. Use el cmdlet Get-AzContext para determinar qué suscripción está activa. Si no es la correcta, puede cambiar las suscripciones mediante otro cmdlet.

  1. Obtenga una lista de los nombres de todas las suscripciones de la cuenta con el comando Get-AzSubscription.

  2. Cambie la suscripción, para lo que debe usar el nombre de la que va a seleccionar.

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

Si necesita buscar el Id. de suscripción, vaya a Azure Portal y seleccione Suscripciones en la página de inicio.

Obtención de una lista de todos los grupos de recursos

Puede recuperar una lista de todos los grupos de recursos de la suscripción activa.

Get-AzResourceGroup

Para obtener una vista más concisa, puede enviar la salida de Get-AzResourceGroup al cmdlet Format-Table mediante el signo "| ".

Get-AzResourceGroup | Format-Table

El resultado es parecido a este:

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

Crear un grupo de recursos

Como sabe, cuando vaya a crear recursos en Azure, siempre los pondrá en un grupo de recursos para facilitar su administración. A menudo un grupo de recursos es uno de los primeros elementos que se crean al iniciar una nueva aplicación.

Puede crear grupos de recursos con el cmdlet New-AzResourceGroup. Debe especificar un nombre y una ubicación. El nombre debe ser único dentro de su suscripción. La ubicación determina dónde se almacenan los metadatos del grupo de recursos (lo que puede ser importante por motivos de cumplimiento). Use cadenas como "Oeste de EE. UU.", "Europa del Norte" u "Oeste de la India" para especificar la ubicación. Como sucede con la mayoría de los cmdlets de Azure, New-AzResourceGroup tiene muchos parámetros opcionales. Sin embargo, la sintaxis principal es la siguiente:

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

Nota:

Recuerde que se trabajará en un espacio aislado de Azure activo, que crea automáticamente el grupo de recursos. Use el comando anterior si prefiere trabajar en una suscripción propia.

Comprobación de los recursos

Get-AzResource enumera los recursos de Azure, lo que resulta útil aquí para comprobar que la creación de los recursos y el grupo de recursos se ha realizado correctamente.

Get-AzResource

Al igual que el comando Get-AzResourceGroup, puede obtener una vista más concisa a través del cmdlet Format-Table:

Get-AzResource | Format-Table

También puede filtrarlo por grupos de recursos específicos para que solo se enumeren los recursos asociados a un grupo concreto:

Get-AzResource -ResourceGroupName ExerciseResources

Cree una máquina virtual de Azure.

Otra tarea común que puede hacer con PowerShell es crear máquinas virtuales.

Azure PowerShell proporciona el cmdlet New-AzVm para crear una máquina virtual. El cmdlet tiene muchos parámetros para que pueda controlar la gran cantidad de valores de configuración de la máquina virtual. La mayoría de los parámetros tiene valores predeterminados razonables, por lo que solo es necesario especificar cinco elementos:

  • ResourceGroupName: el grupo de recursos debería ponerse la nueva máquina virtual.
  • Name: el nombre de la máquina virtual en Azure.
  • Ubicación: la ubicación geográfica en la que debería aprovisionarse la máquina virtual.
  • Credential: un objeto que contiene el nombre de usuario y la contraseña de la cuenta de administrador de la máquina virtual. Aquí se usa el cmdlet Get-Credential. Este cmdlet pide un nombre de usuario y una contraseña, los empaqueta en un objeto de credencial.
  • Imagen: la imagen de sistema operativo que se va a usar para la máquina virtual, que normalmente es una distribución de Linux o Windows Server.
   New-AzVm
       -ResourceGroupName <resource group name>
       -Name <machine name>
       -Credential <credentials object>
       -Location <location>
       -Image <image name>

Estos parámetros se pueden suministrar directamente al cmdlet como se ha indicado en el ejemplo anterior. Como alternativa, puede usar otros cmdlets para configurar la máquina virtual, como Set-AzVMOperatingSystem, Set-AzVMSourceImage, Add-AzVMNetworkInterface y Set-AzVMOSDisk.

Este es un ejemplo de las cadenas del cmdlet Get-Credential junto con el parámetro -Credential:

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

El sufijo AzVM es específico de los comandos basados en máquina virtual de PowerShell. No obstante, se pueden usar otros:

Comando Descripción
Remove-AzVM Elimina una máquina virtual de Azure
Start-AzVM Inicia una máquina virtual detenida
Stop-AzVM Detiene una máquina virtual en ejecución
Restart-AzVM Reinicia una máquina virtual
Update-AzVM Actualiza la configuración de una máquina virtual

Ejemplo: Obtención de información de una máquina virtual

Puede enumerar las máquinas virtuales de la suscripción con el comando Get-AzVM -Status. Este comando también admite la especificación de una máquina virtual específica mediante la inclusión de la propiedad -Name. Aquí, se asigna a una variable de PowerShell:

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

Lo interesante es que ahora la máquina virtual es un objeto con el que puede interactuar. Por ejemplo, puede realizar cambios en ese objeto y, después, devolverlos a Azure con el comando Update-AzVM:

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

Update-AzVM -ResourceGroupName $ResourceGroupName  -VM $vm

El modo interactivo de PowerShell es adecuado para tareas aisladas. En el ejemplo, se usa el mismo grupo de recursos durante todo el proyecto, por lo que crearlo de forma interactiva es razonable. Para esta tarea, el modo interactivo suele ser más rápido y sencillo que escribir un script y ejecutarlo solo una vez.