Share via


Tutorial: Uso de la pila de implementación con Bicep (versión preliminar)

En este tutorial, aprenderá el proceso de creación y administración de una pila de implementación. El tutorial se centra en la creación de la pila de implementación en el ámbito del grupo de recursos. Sin embargo, también puede crear pilas de implementación en el ámbito de la suscripción. Para obtener más información sobre la creación de pilas de implementación, consulte Creación de pilas de implementación.

Prerrequisitos

Creación de un archivo de Bicep

Crear un archivo de Bicep en Visual Studio Code para crear una cuenta de almacenamiento y una red virtual. Este archivo se usa para crear la pila de implementación.

param resourceGroupLocation string = resourceGroup().location
param storageAccountName string = 'store${uniqueString(resourceGroup().id)}'
param vnetName string = 'vnet${uniqueString(resourceGroup().id)}'

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: resourceGroupLocation
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2022-11-01' = {
  name: vnetName
  location: resourceGroupLocation
  properties: {
    addressSpace: {
      addressPrefixes: [
        '10.0.0.0/16'
      ]
    }
    subnets: [
      {
        name: 'Subnet-1'
        properties: {
          addressPrefix: '10.0.0.0/24'
        }
      }
      {
        name: 'Subnet-2'
        properties: {
          addressPrefix: '10.0.1.0/24'
        }
      }
    ]
  }
}

Guarde el archivo de Bicep como main.bicep.

Creación de una pila de implementación

Para crear un grupo de recursos y una pila de implementación, ejecute los siguientes comandos, asegurándose de proporcionar la ruta de acceso de archivo de Bicep adecuada en función de la ubicación de ejecución.

az group create \
  --name 'demoRg' \
  --location 'centralus'

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

El modificador deny-settings-mode asigna un tipo específico de permisos a los recursos administrados, lo que impide su eliminación por entidades de seguridad no autorizadas. Para más información, consulte Protección de recursos administrados frente a la eliminación.

Enumeración de la pila de implementación y los recursos administrados

Para comprobar la implementación, puede enumerar la pila de implementación y enumerar los recursos administrados de la pila de implementación.

Para enumerar la pila de implementación implementada:

az stack group show \
  --resource-group 'demoRg' \
  --name 'demoStack'

La salida muestra dos recursos administrados, que son una cuenta de almacenamiento y una red virtual:

{
  "actionOnUnmanage": {
    "managementGroups": "detach",
    "resourceGroups": "detach",
    "resources": "detach"
  },
  "debugSetting": null,
  "deletedResources": [],
  "denySettings": {
    "applyToChildScopes": false,
    "excludedActions": null,
    "excludedPrincipals": null,
    "mode": "none"
  },
  "deploymentId": "/subscriptions/00000000-0000-0000-0000-000000000000/demoRg/providers/Microsoft.Resources/deployments/demoStack-2023-06-08-14-58-28-fd6bb",
  "deploymentScope": null,
  "description": null,
  "detachedResources": [],
  "duration": "PT30.1685405S",
  "error": null,
  "failedResources": [],
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/demoRg/providers/Microsoft.Resources/deploymentStacks/demoStack",
  "location": null,
  "name": "demoStack",
  "outputs": null,
  "parameters": {},
  "parametersLink": null,
  "provisioningState": "succeeded",
  "resourceGroup": "demoRg",
  "resources": [
    {
      "denyStatus": "none",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/demoRg/providers/Microsoft.Network/virtualNetworks/vnetthmimleef5fwk",
      "resourceGroup": "demoRg",
      "status": "managed"
    },
    {
      "denyStatus": "none",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/demoRg/providers/Microsoft.Storage/storageAccounts/storethmimleef5fwk",
      "resourceGroup": "demoRg",
      "status": "managed"
    }
  ],
  "systemData": {
    "createdAt": "2023-06-08T14:58:28.377564+00:00",
    "createdBy": "johndole@contoso.com",
    "createdByType": "User",
    "lastModifiedAt": "2023-06-08T14:58:28.377564+00:00",
    "lastModifiedBy": "johndole@contoso.com",
    "lastModifiedByType": "User"
  },
  "tags": null,
  "template": null,
  "templateLink": null,
  "type": "Microsoft.Resources/deploymentStacks"
}

También puede comprobar la implementación mediante la enumeración de los recursos administrados en la pila de implementación:

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

La salida es parecida a esta:

{
  "actionOnUnmanage": {
    "managementGroups": "detach",
    "resourceGroups": "detach",
    "resources": "detach"
  },
  "debugSetting": null,
  "deletedResources": [],
  "denySettings": {
    "applyToChildScopes": false,
    "excludedActions": null,
    "excludedPrincipals": null,
    "mode": "none"
  },
  "deploymentId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Resources/deployments/demoStack-2023-06-05-20-55-48-38d09",
  "deploymentScope": null,
  "description": null,
  "detachedResources": [],
  "duration": "PT29.006353S",
  "error": null,
  "failedResources": [],
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Resources/deploymentStacks/demoStack",
  "location": null,
  "name": "demoStack",
  "outputs": null,
  "parameters": {},
  "parametersLink": null,
  "provisioningState": "succeeded",
  "resourceGroup": "demoRg",
  "resources": [
    {
      "denyStatus": "none",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Network/virtualNetworks/vnetzu6pnx54hqubm",
      "resourceGroup": "demoRg",
      "status": "managed"
    },
    {
      "denyStatus": "none",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Storage/storageAccounts/storezu6pnx54hqubm",
      "resourceGroup": "demoRg",
      "status": "managed"
    }
  ],
  "systemData": {
    "createdAt": "2023-06-05T20:55:48.006789+00:00",
    "createdBy": "johndole@contoso.com",
    "createdByType": "User",
    "lastModifiedAt": "2023-06-05T20:55:48.006789+00:00",
    "lastModifiedBy": "johndole@contoso.com",
    "lastModifiedByType": "User"
  },
  "tags": null,
  "template": null,
  "templateLink": null,
  "type": "Microsoft.Resources/deploymentStacks"
}

Actualización de pila de implementación

Para actualizar una pila de implementación, haga las modificaciones necesarias en el archivo de Bicep subyacente y, a continuación, vuelva a ejecutar el comando para crear la pila de implementación o use el comando set en Azure PowerShell.

En este tutorial, hará las siguientes actividades:

  • Actualice una propiedad de un recurso administrado.
  • Agregue un recurso a la pila.
  • Desasocie un recurso administrado.
  • Adjunte un recurso existente a la pila.
  • Elimine un recurso administrado.

Actualice un recurso administrado

Al final del paso anterior, tiene una pila con dos recursos administrados. Actualizará una propiedad del recurso de la cuenta de almacenamiento.

Edite el archivo main.bicep para cambiar el nombre de la SKU de Standard_LRS a Standard_GRS:

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_GRS'
  }
}

Actualice el recurso administrado ejecutando el comando siguiente:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

Puede comprobar la propiedad de SKU si ejecuta el siguiente comando:

az resource list --resource-group 'demoRg'

Añadir un recurso administrado

Al final del paso anterior, tiene una pila con dos recursos administrados. Agregará un recurso de cuenta de almacenamiento más a la pila.

Edite el archivo main.bicep para incluir otra definición de cuenta de almacenamiento:

resource storageAccount1 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: '1${storageAccountName}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

Actualice la pila de implementación mediante la ejecución del siguiente comando:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

Puede comprobar la implementación mediante la enumeración de los recursos administrados en la pila de implementación:

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

Verá la nueva cuenta de almacenamiento además de los dos recursos existentes.

Desasociación de un recurso administrado

Al final del paso anterior, tiene una pila con tres recursos administrados. Desasociará uno de los recursos administrados. Una vez desasociado el recurso, permanecerá en el grupo de recursos.

Edite el archivo main.bicep para quitar la siguiente definición de cuenta de almacenamiento del paso anterior:

resource storageAccount1 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: '1${storageAccountName}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

Actualice la pila de implementación mediante la ejecución del siguiente comando:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

Puede comprobar la implementación mediante la enumeración de los recursos administrados en la pila de implementación:

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

Verá dos recursos administrados en la pila. Sin embargo, el recurso desasociado sigue apareciendo en el grupo de recursos. Puede enumerar los recursos del grupo de recursos al ejecutar el siguiente comando:

az resource list --resource-group 'demoRg'

Adjuntar un recurso existente a la pila

Al final del paso anterior, tiene una pila con dos recursos administrados. Hay un recurso no administrado en el mismo grupo de recursos que los recursos administrados. Asociará este recurso no administrado a la pila.

Edite el archivo main.bicep para incluir la definición de la cuenta de almacenamiento del recurso no administrado:

resource storageAccount1 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: '1${storageAccountName}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

Actualice la pila de implementación mediante la ejecución del siguiente comando:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

Puede comprobar la implementación mediante la enumeración de los recursos administrados en la pila de implementación:

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

Verá tres recursos administrados.

Eliminación de un recurso administrado

Al final del paso anterior, tiene una pila con tres recursos administrados. En uno de los pasos anteriores, desasoció un recurso administrado. A veces, es posible que quiera eliminar un recurso en lugar de desasociarlo. Para eliminar un recurso, use un modificador delete-resources con el comando create/set.

Edite el archivo main.bicep para quitar la siguiente definición de cuenta de almacenamiento:

resource storageAccount1 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: '1${storageAccountName}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

Ejecute el siguiente comando con el modificador delete-resources:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none' \
  --delete-resources

Además del modificador delete-resources, hay otros dos modificadores disponibles: delete-all y delete-resource-groups. Para obtener más información, vea Control de desprendimiento y eliminación.

Puede comprobar la implementación mediante la enumeración de los recursos administrados en la pila de implementación:

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

Verá dos recursos administrados en la pila. El recurso también se quita del grupo de recursos. Puede comprobar el grupo de recursos si ejecuta el siguiente comando:

az resource list --resource-group 'demoRg'

Configuración de los valores de denegació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.

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

  • deny-settings-mode: 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.
  • deny-settings-apply-to-child-scopes: la configuración de denegación se aplica a los ámbitos secundarios de administración de Azure.
  • deny-settings-excluded-actions: lista de operaciones de administración de control de acceso basado en rol (RBAC) excluidas de la configuración de denegación. Se permiten hasta 200 acciones.
  • deny-settings-excluded-principals: lista de id. de entidad de seguridad de Microsoft Entra excluidos del bloqueo. Se permiten hasta cinco entidades de seguridad.

En este tutorial, configurará el modo de configuración de denegación. Para obtener más información sobre otras opciones de configuración de denegación, consulte Protección de recursos administrados frente a la eliminación.

Al final del paso anterior, tiene una pila con dos recursos administrados.

Ejecute el siguiente comando con el modificador del modo de configuración de denegación establecido en deny-delete:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'denyDelete'

Se producirá un error en el siguiente comando delete porque el modo de configuración de denegación está establecido en deny-delete:

az resource delete \
  --resource-group 'demoRg' \
  --name '<storage-account-name>' \
  --resource-type 'Microsoft.Storage/storageAccounts'

Actualice la pila con el modo de configuración de denegación a ninguno, para que pueda completar el resto del tutorial:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

Exportación de la plantilla desde la pila

Al exportar una pila de implementación, puede generar un archivo de Bicep. Este archivo de Bicep actúa como un recurso para futuras implementaciones de desarrollo y posteriores.

az stack group export \
  --name 'demoStack' \
  --resource-group 'demoRg'

Puede canalizar la salida a un archivo.

Eliminar la pila de implementación

Para eliminar la pila de implementación y los recursos administrados, ejecute el siguiente comando:

az stack group delete \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --delete-all

Si ejecuta los comandos Eliminar sin los parámetros delete all, los recursos administrados se desasocian, pero no se eliminan. Por ejemplo:

az stack group delete \
  --name 'demoStack' \
  --resource-group 'demoRg'

Los parámetros siguientes se pueden usar para controlar la desasociación y el eliminado.

  • --delete-all: Elimina recursos y grupos de recursos.
  • --delete-resources: Elimina solo los recursos.
  • --delete-resource-groups: Elimina solo los grupos de recursos.

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

Pasos siguientes