Pilas de implementación (versión preliminar)

Una pila de implementación de Azure es un tipo de recurso de Azure que permite la administración de un grupo de recursos de Azure como una unidad atómica. Cuando se envía un archivo Bicep, o una plantilla JSON de ARM, a una pila de implementación, este define los recursos administrados por la pila. Si se quita un recurso que se incluyó anteriormente en la plantilla, se desasociará o eliminará en función del comportamiento de actionOnUnmanage especificado de la pila de implementación. De forma similar a otros recursos de Azure, el acceso a la pila de implementación se puede restringir mediante el control de acceso basado en roles de Azure (RBAC de Azure).

Para crear y actualizar una pila de implementación, puede usar la CLI de Azure, Azure PowerShell o Azure Portal junto con los archivos de Bicep. Estos archivos de Bicep se traducen en plantillas JSON de ARM, que luego la pila implementa como un objeto de implementación. La pila de implementación ofrece funcionalidades adicionales más allá de los recursos de implementación conocidos, que sirven como un superconjunto de esas funcionalidades.

Microsoft.Resources/deploymentStacks es el tipo de recurso para las pilas de implementación. Consta de una plantilla principal que puede realizar actualizaciones de 1 a varios entre ámbitos en los recursos que describe y bloquear los cambios no deseados en esos recursos.

Al planear la implementación y determinar qué grupos de recursos deben formar parte de la misma pila, es importante tener en cuenta el ciclo de vida de administración de esos recursos, lo que incluye la creación, actualización y eliminación. Por ejemplo, supongamos que necesita aprovisionar algunas máquinas virtuales de prueba para varios equipos de aplicaciones en distintos ámbitos de grupos de recursos. En este caso, se puede usar una pila de implementación para crear estos entornos de prueba y actualizar las configuraciones de las máquinas virtuales de prueba mediante actualizaciones posteriores de la pila de implementación. Después de completar el proyecto, puede ser necesario quitar o eliminar los recursos creados, como las máquinas virtuales de prueba. Mediante el uso de una pila de implementación, los recursos administrados se pueden quitar fácilmente especificando la marca de eliminación adecuada. Este enfoque simplificado ahorra tiempo durante la limpieza del entorno, ya que implica una única actualización del recurso de la pila en lugar de modificar o quitar individualmente cada máquina virtual de prueba en varios ámbitos de grupos de recursos.

Las pilas de implementación requieren Azure PowerShell versión 10.1.0 o posterior o la CLI de Azure versión 2.50.0 o posterior.

Para crear la primera pila de implementación, consulte Inicio rápido: creación de una pila de implementación.

¿Por qué usar pilas de implementación?

Las pilas de implementación proporcionan las siguientes ventajas:

  • Aprovisionamiento y administración de recursos simplificados en distintos ámbitos como una entidad cohesiva.
  • Impiden las modificaciones no deseadas en los recursos administrados mediante la configuración de denegación.
  • Limpieza eficaz del entorno mediante el empleo de marcas de eliminación durante las actualizaciones de la pila de implementación.
  • Uso de plantillas estándar, como Bicep, plantillas de ARM o especificaciones de plantilla para las pilas de implementación.

Limitaciones conocidas

  • La pila no administra los recursos creados implícitamente. Por lo tanto, no se pueden realizar asignaciones de denegación ni limpieza.
  • Las asignaciones de denegación no admiten etiquetas.
  • No se admiten asignaciones de denegación en el ámbito del grupo de administración.
  • Las pilas de implementación no pueden eliminar secretos del almacén de claves. Si va a quitar secretos del almacén de claves de una plantilla, asegúrese de ejecutar también el comando update/delete de la pila de implementación con el modo de desasociación.

Problemas conocidos

  • Actualmente, durante la eliminación de grupos de recursos, se omiten las asignaciones de denegación. Al crear una pila de implementación en el ámbito del grupo de recursos, el archivo de Bicep no contiene la definición del grupo de recursos. A pesar de la configuración de asignación de denegación, es posible eliminar el grupo de recursos y su pila independiente. Sin embargo, si un bloqueo está activo en cualquier recurso del grupo, se producirá un error en la operación de eliminación.
  • What-if no está disponible en la versión preliminar.
  • Una pila de ámbito de grupo de administración está restringida a implementar en otro grupo de administración. Solo se puede implementar en el grupo de administración de la propia pila o en una suscripción secundaria.

Creación de pilas de implementación

Se puede crear un recurso de pila de implementación en el ámbito del grupo de recursos, la suscripción o el grupo de administración. La plantilla que se pasa a una pila de implementación define los recursos que se van a crear o actualizar en el ámbito de destino especificado para la implementación de la plantilla.

  • Una pila en el ámbito del grupo de recursos puede implementar la plantilla que se pasa al mismo ámbito del grupo de recursos donde existe la pila de implementación.
  • Una pila en el ámbito de la suscripción puede implementar la plantilla que se pasa a un ámbito del grupo de recursos (si se especifica) o al mismo ámbito de la suscripción donde existe la pila de implementación.
  • Una pila en el ámbito del grupo de administración puede implementar la plantilla pasada al ámbito de suscripción especificado.

Es importante tener en cuenta que donde existe una pila de implementación, también existe la asignación de denegación creada con la funcionalidad de configuración de denegación. Por ejemplo, mediante la creación de una pila de implementación en el ámbito de la suscripción que implementa la plantilla en el ámbito del grupo de recursos y con el modo DenyDelete de configuración de denegación, puede aprovisionar fácilmente recursos administrados en el grupo de recursos especificado y bloquear los intentos de eliminación de esos recursos. Al usar este método, también se mejora la seguridad de la pila de implementación separándola en el nivel de suscripción, en lugar del nivel de grupo de recursos. Esta separación garantiza que los equipos de desarrollo que trabajan con los recursos aprovisionados solo tengan acceso de visibilidad y escritura a los grupos de recursos, mientras que la pila de implementación permanece aislada en un nivel superior. Esto minimiza el número de usuarios que pueden editar una pila de implementación y realizar cambios en su asignación de denegación. Para obtener más información, consulte Protección de recursos administrados frente a la eliminación.

Los comandos create-stack también se pueden usar para actualizar las pilas de implementación.

Para crear una pila de implementación en el ámbito del grupo de recursos:

New-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "none"

Para crear una pila de implementación en el ámbito de la suscripción:

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentResourceGroupName "<resource-group-name>" `
  -DenySettingsMode "none"

El parámetro DeploymentResourceGroupName especifica el grupo de recursos usado para almacenar los recursos administrados. Si no se especifica el parámetro , los recursos administrados se almacenan en el ámbito de la suscripción.

Para crear una pila de implementación en el ámbito del grupo de administración:

New-AzManagmentGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentSubscriptionId "<subscription-id>" `
  -DenySettingsMode "none"

El parámetro deploymentSubscriptionId especifica la suscripción usada para almacenar los recursos administrados. Si no se especifica el parámetro, los recursos administrados se almacenan en el ámbito del grupo de administración.

Enumeración de las pilas de implementación

Para enumerar los recursos de pila de implementación en el ámbito del grupo de recursos:

Get-AzResourceGroupDeploymentStack `
  -ResourceGroupName "<resource-group-name>"

Para enumerar los recursos de la pila de implementación en el ámbito de la suscripción:

Get-AzSubscriptionDeploymentStack

Para enumerar los recursos de pila de implementación en el ámbito del grupo de administración:

Get-AzManagementGroupDeploymentStack `
  -ManagementGroupId "<management-group-id>"

Actualización de las pilas de implementación

Para actualizar una pila de implementación, que puede implicar agregar o eliminar un recurso administrado, debe realizar cambios en los archivos de Bicep subyacentes. Una vez realizadas las modificaciones, tiene dos opciones para actualizar la pila de implementación: ejecute el comando update o vuelva a ejecutar el comando create.

La lista de recursos administrados se puede controlar completamente mediante el modelo de diseño de infraestructura como código (IaC).

Uso del comando Set

Para actualizar una pila de implementación en el ámbito del grupo de recursos:

Set-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "none"

Para crear una pila de implementación en el ámbito de la suscripción:

Set-AzSubscriptionDeploymentStack `
   -Name "<deployment-stack-name>" `
   -Location "<location>" `
   -TemplateFile "<bicep-file-name>" `
   -DeploymentResourceGroupName "<resource-group-name>" `
  -DenySettingsMode "none"

El parámetro DeploymentResourceGroupName especifica el grupo de recursos usado para almacenar los recursos de la pila de implementación. Si no especifica un nombre de grupo de recursos, el servicio de la pila de implementación creará automáticamente un nuevo grupo de recursos.

Para actualizar una pila de implementación en el ámbito del grupo de administración:

Set-AzManagmentGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentSubscriptionId "<subscription-id>" `
  -DenySettingsMode "none"

Uso del comando New

Recibirá una advertencia similar a la siguiente:

The deployment stack 'myStack' you're trying to create already exists in the current subscription/management group/resource group. Do you want to overwrite it? Detaching: resources, resourceGroups (Y/N)

Para obtener más información, consulte Creación de pilas de implementación.

Control de la desasociación y la eliminación

Un recurso desasociado (o un recurso no administrado) hace referencia a un recurso que la pila de implementación no administra ni realiza un seguimiento, pero que sigue existiendo en Azure.

Para indicar a Azure que elimine recursos no administrados, actualice la pila con el comando create stack con una de las marcas de eliminación siguientes. Para obtener más información, consulte Creación de pilas de implementación.

  • DeleteAll: use delete en lugar de detach para los recursos administrados y los grupos de recursos.
  • DeleteResources: use delete en lugar de detach para los recursos administrados solamente.
  • DeleteResourceGroups: use delete en lugar de detach para los grupo de recursos administrados solamente. No es válido usar DeleteResourceGroups por sí solo. DeleteResourceGroups se debe usar junto con DeleteResources.

Por ejemplo:

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "none" `
  -DeleteResourceGroups `
  -DeleteResources

Advertencia

Al eliminar grupos de recursos con las propiedades DeleteAll o DeleteResourceGroups, también se eliminarán los grupos de recursos administrados y todos los recursos contenidos en ellos.

Eliminación de implementación

Si ejecuta el comandos delete sin las marcas de eliminación, los recursos no administrados se desasocian, pero no se eliminan. Para eliminar los recursos no administrados, use los modificadores siguientes:

  • DeleteAll: elimina los recursos y los grupos de recursos.
  • DeleteResources: Elimina solo los recursos.
  • DeleteResourceGroups: elimina solo los grupos de recursos.

Incluso si especifica el modificador Delete all, si hay recursos no administrados dentro del grupo de recursos en el que se encuentra la pila de implementación, no se eliminarán el recurso no administrado ni el grupo de recursos.

Para eliminar los recursos de pila de implementación en el ámbito del grupo de recursos:

Remove-AzResourceGroupDeploymentStack `
  -name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  [-DeleteAll/-DeleteResourceGroups/-DeleteResources]

Para eliminar los recursos de la pila de implementación en el ámbito de la suscripción:

Remove-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  [-DeleteAll/-DeleteResourceGroups/-DeleteResources]

Para eliminar los recursos de pila de implementación en el ámbito del grupo de administración:

Remove-AzManagementGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ManagementGroupId "<management-group-id>" `
  [-DeleteAll/-DeleteResourceGroups/-DeleteResources]

Visualización de recursos administrados en la pila de implementación

Durante la versión preliminar pública, el servicio de pila de implementación aún no tiene una interfaz gráfica de usuario (GUI) de Azure Portal. Para ver los recursos administrados dentro de una pila de implementación, use los siguientes comandos de Azure Powershell o la CLI de Azure:

Para ver los recursos administrados en el ámbito del grupo de recursos:

(Get-AzResourceGroupDeploymentStack -Name "<deployment-stack-name>" -ResourceGroupName "<resource-group-name>").Resources

Para ver los recursos administrados en el ámbito de la suscripción:

(Get-AzSubscriptionDeploymentStack -Name "<deployment-stack-name>").Resources

Para ver los recursos administrados en el ámbito del grupo de administración:

(Get-AzManagementGroupDeploymentStack -Name "<deployment-stack-name>" -ManagementGroupId "<management-group-id>").Resources

Adición de recursos a la pila de implementación

Para agregar un recurso administrado, agregue la definición de recurso a los archivos de Bicep subyacentes y, a continuación, ejecute el comando update o vuelva a ejecutar el comando create. Para obtener más información, consulte Actualización de las pilas de implementación.

Eliminación de recursos administrados de la pila de implementación

Para eliminar un recurso administrado, quite la definición de recurso de los archivos de Bicep subyacentes y, a continuación, ejecute el comando update o vuelva a ejecutar el comando create. Para obtener más información, consulte Actualización de las pilas de implementación.

Protección de los recursos administrados frente a la eliminación

Al crear una pila de implementación, es posible asignar un tipo específico de permisos a los recursos administrados, lo que impide su eliminación por entidades de seguridad no autorizadas. Esta configuración también se conoce como configuración de denegación. Quiere almacenar la pila en un ámbito primario.

Azure PowerShell incluye estos parámetros para personalizar la asignación de denegación:

  • DenySettingsMode: define las operaciones prohibidas en los recursos administrados para proteger contra entidades de seguridad no autorizadas que intentan eliminarlos o actualizarlos. Esta restricción se aplica a todos a menos que se conceda acceso explícitamente. Estos valores incluyen: None, DenyDelete y DenyWriteAndDelete.
  • DenySettingsApplyToChildScopes: la configuración de denegación se aplica a los recursos anidados bajo los recursos administrados.
  • DenySettingsExcludedAction: lista de operaciones de administración basadas en roles que se excluyen de la configuración de denegación. Se permiten hasta 200 acciones.
  • DenySettingsExcludedPrincipal: lista de id. de entidad de seguridad de Microsoft Entra excluidos del bloqueo. Se permiten hasta cinco entidades de seguridad.

Para aplicar la configuración de denegación en el ámbito del grupo de recursos:

New-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "DenyDelete" `
  -DenySettingsExcludedAction "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

Para aplicar la configuración de denegación en el ámbito de la suscripción:

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "DenyDelete" `
  -DenySettingsExcludedAction "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

Use el parámetro DeploymentResourceGroupName para especificar el nombre del grupo de recursos en el que se creará la pila de implementación. Si no se especifica un ámbito, se usa el ámbito de la pila de implementación.

Para aplicar la configuración de denegación en el ámbito del grupo de administración:

New-AzManagmentGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "DenyDelete" `
  -DenySettingsExcludedActions "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

Use el parámetro DeploymentSubscriptionId para especificar el id. de suscripción en el que se creará la pila de implementación. Si no se especifica un ámbito, se usa el ámbito de la pila de implementación.

Desasociación de recursos administrados de la pila de implementación

De forma predeterminada, las pilas de implementación desasocian y no eliminan los recursos no administrados cuando ya no están incluidos en el ámbito de administración de la pila. Para obtener más información, consulte Actualización de las pilas de implementación.

Exportación de plantillas desde pilas de implementación

Puede exportar los recursos de una pila de implementación a una salida JSON. Puede canalizar la salida a un archivo.

Para exportar una pila de implementación en el ámbito del grupo de recursos:

Save-AzResourceGroupDeploymentStack `
   -Name '<deployment-stack-name>' `
   -ResourceGroupName '<resource-group-name>' `

Para exportar una pila de implementación en el ámbito de la suscripción:

Save-AzSubscriptionDeploymentStack `
  -name '<deployment-stack-name>'

Para exportar una pila de implementación en el ámbito del grupo de administración:

Save-AzManagmentGroupDeploymentStack `
  -Name '<deployment-stack-name>' `
  -ManagementGroupId '<management-group-id>'

Pasos siguientes

Para ver un inicio rápido, consulte Inicio rápido: Creación de una pila de implementación.