Creación de un recurso de Azure mediante scripts en Azure PowerShell
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:
Abra el menú Inicio y escriba PowerShell.
Seleccione el icono de PowerShell.
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:
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
Escriba Y o A, y luego presione Entrar.
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.
En un terminal, ejecute el comando siguiente para iniciar PowerShell.
pwsh
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
Si se le pregunta si confía en los módulos de PSGallery, responda Sí 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 Sí 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:
Importar los cmdlets de Azure.
Conectarse a la suscripción de Azure.
Crear el grupo de recursos.
Compruebe que la creación se ha realizado correctamente.
En la siguiente ilustración se muestra información general de estos pasos:
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.
Obtenga una lista de los nombres de todas las suscripciones de la cuenta con el comando
Get-AzSubscription
.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.