Share via


Esercitazione: Usare lo stack di distribuzione con Bicep (anteprima)

In questa esercitazione viene illustrato il processo di creazione e gestione di uno stack di distribuzione. L'esercitazione è incentrata sulla creazione dello stack di distribuzione nell'ambito del gruppo di risorse. Tuttavia, è anche possibile creare stack di distribuzione nell'ambito della sottoscrizione. Per ottenere altre informazioni dettagliate sulla creazione di stack di distribuzione, vedere Creare stack di distribuzione.

Prerequisiti

Creare un file Bicep

Creare un file Bicep in Visual Studio Code per creare un account di archiviazione e una rete virtuale. Questo file viene usato per creare lo stack di distribuzione.

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'
        }
      }
    ]
  }
}

Salvare il file Bicep come main.bicep.

Creare uno stack di distribuzione

Per creare un gruppo di risorse e uno stack di distribuzione, eseguire i comandi seguenti, assicurandosi di fornire il percorso del file Bicep appropriato in base al percorso di esecuzione.

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

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

L'opzione deny-settings-mode assegna un tipo specifico di autorizzazioni alle risorse gestite, che impedisce l'eliminazione da parte di entità di sicurezza non autorizzate. Per altre informazioni, vedere Proteggere le risorse gestite dall'eliminazione.

Elencare lo stack di distribuzione e le risorse gestite

Per verificare la distribuzione, è possibile elencare lo stack di distribuzione ed elencare le risorse gestite dello stack di distribuzione.

Per elencare lo stack di distribuzione distribuito:

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

L'output mostra due risorse gestite: un account di archiviazione e una rete virtuale:

{
  "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"
}

È anche possibile verificare la distribuzione elencando le risorse gestite nello stack di distribuzione:

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

L'output è simile a:

{
  "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"
}

Aggiornare lo stack di distribuzione

Per aggiornare uno stack di distribuzione, apportare le modifiche necessarie al file Bicep sottostante e quindi eseguire di nuovo il comando per creare lo stack di distribuzione o usare il comando set in Azure PowerShell.

In questa esercitazione vengono eseguite le attività seguenti:

  • Aggiornare una proprietà di una risorsa gestita.
  • Aggiungere una risorsa allo stack.
  • Scollegare una risorsa gestita.
  • Collegare una risorsa esistente allo stack.
  • Eliminare una risorsa gestita.

Aggiornare una risorsa gestita

Al termine del passaggio precedente, si dispone di uno stack con due risorse gestite. Si aggiornerà una proprietà della risorsa dell'account di archiviazione.

Modificare il file main.bicep per modificare il nome dello SKU da Standard_LRS a Standard_GRS:

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

Aggiornare la risorsa gestita eseguendo il comando seguente:

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

È possibile verificare la proprietà SKU eseguendo il comando seguente:

az resource list --resource-group 'demoRg'

Aggiungere una risorsa gestita

Al termine del passaggio precedente, si dispone di uno stack con due risorse gestite. Si aggiungerà uno più risorse dell'account di archiviazione allo stack.

Modificare il file main.bicep per includere un'altra definizione dell'account di archiviazione:

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

Aggiornare lo stack di distribuzione eseguendo il comando seguente:

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

È possibile verificare la distribuzione elencando le risorse gestite nello stack di distribuzione:

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

Verrà visualizzato il nuovo account di archiviazione oltre alle due risorse esistenti.

Scollegare una risorsa gestita

Al termine del passaggio precedente, si dispone di uno stack con tre risorse gestite. Si scollega una delle risorse gestite. Dopo la disconnessione della risorsa, rimarrà nel gruppo di risorse.

Modificare il file main.bicep per rimuovere la definizione dell'account di archiviazione seguente dal passaggio precedente:

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

Aggiornare lo stack di distribuzione eseguendo il comando seguente:

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

È possibile verificare la distribuzione elencando le risorse gestite nello stack di distribuzione:

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

Nello stack verranno visualizzate due risorse gestite. Tuttavia, la risorsa scollegata è ancora elencata nel gruppo di risorse. È possibile elencare le risorse nel gruppo di risorse eseguendo il comando seguente:

az resource list --resource-group 'demoRg'

Collegare una risorsa esistente allo stack

Al termine del passaggio precedente, si dispone di uno stack con due risorse gestite. Esiste una risorsa non gestita nello stesso gruppo di risorse delle risorse gestite. Questa risorsa non gestita verrà collegata allo stack.

Modificare il file main.bicep per includere la definizione dell'account di archiviazione della risorsa non gestita:

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

Aggiornare lo stack di distribuzione eseguendo il comando seguente:

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

È possibile verificare la distribuzione elencando le risorse gestite nello stack di distribuzione:

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

Verranno visualizzate tre risorse gestite.

Eliminare una risorsa gestita

Al termine del passaggio precedente, si dispone di uno stack con tre risorse gestite. In uno dei passaggi precedenti è stata scollegata una risorsa gestita. In alcuni casi, è possibile eliminare una risorsa invece di scollegarne una. Per eliminare una risorsa, usare un'opzione delete-resources con il comando create/set.

Modificare il file main.bicep per rimuovere la definizione dell'account di archiviazione seguente:

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

Eseguire il comando seguente con l'opzione delete-resources:

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

Oltre all'opzione delete-resources , sono disponibili altre due opzioni: delete-all e delete-resource-groups. Per altre informazioni, vedere Controllare lo scollegamento e l'eliminazione.

È possibile verificare la distribuzione elencando le risorse gestite nello stack di distribuzione:

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

Nello stack verranno visualizzate due risorse gestite. La risorsa viene rimossa anche dal gruppo di risorse. È possibile verificare il gruppo di risorse eseguendo il comando seguente:

az resource list --resource-group 'demoRg'

Configurare le impostazioni di negazione

Quando si crea uno stack di distribuzione, è possibile assegnare un tipo specifico di autorizzazioni alle risorse gestite, impedendo così l'eliminazione da entità di sicurezza non autorizzate. Queste impostazioni vengono referete come impostazioni di negazione.

L'interfaccia della riga di comando di Azure include questi parametri per personalizzare l'assegnazione di rifiuto:

  • deny-settings-mode: definisce le operazioni non consentite nelle risorse gestite per proteggersi da entità di sicurezza non autorizzate che tentano di eliminarle o aggiornarle. Questa restrizione si applica a tutti, a meno che non venga concesso in modo esplicito l'accesso. I valori includono: none, denyDeletee denyWriteAndDelete.
  • deny-settings-apply-to-child-scopes: le impostazioni di negazione vengono applicate agli ambiti di gestione figlio di Azure.
  • deny-settings-excluded-actions: elenco delle operazioni di gestione del controllo degli accessi in base al ruolo escluse dalle impostazioni di negazione. Sono consentite fino a 200 azioni.
  • deny-settings-excluded-principals: elenco di ID entità Microsoft Entra esclusi dal blocco. Sono consentite fino a cinque entità.

In questa esercitazione viene configurata la modalità di negazione delle impostazioni. Per altre informazioni sulle altre impostazioni di negazione, vedere Proteggere le risorse gestite dall'eliminazione.

Al termine del passaggio precedente, si dispone di uno stack con due risorse gestite.

Eseguire il comando seguente con l'opzione nega impostazioni impostata su deny-delete:

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

Il comando delete seguente non riesce perché la modalità di negazione delle impostazioni è impostata su deny-delete:

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

Aggiornare lo stack con la modalità di negazione delle impostazioni su nessuno, in modo da poter completare il resto dell'esercitazione:

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

Esportare il modello dallo stack

Esportando uno stack di distribuzione, è possibile generare un file Bicep. Questo file Bicep funge da risorsa per lo sviluppo futuro e le distribuzioni successive.

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

È possibile inviare tramite pipe l'output a un file.

Eliminare lo stack di distribuzione

Per eliminare lo stack di distribuzione e le risorse gestite, eseguire il comando seguente:

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

Se si eseguono i comandi delete senza eliminare tutti i parametri, le risorse gestite vengono scollegate ma non eliminate. Ad esempio:

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

I parametri seguenti possono essere usati per controllare tra scollegamento ed eliminazione.

  • --delete-all: eliminare sia le risorse che i gruppi di risorse.
  • --delete-resources: elimina solo le risorse.
  • --delete-resource-groups: elimina solo i gruppi di risorse.

Per altre informazioni, vedere Eliminare gli stack di distribuzione.

Passaggi successivi