Samouczek: używanie stosu wdrożenia z aplikacją Bicep (wersja zapoznawcza)

W tym samouczku poznasz proces tworzenia stosu wdrożenia i zarządzania nim. Samouczek koncentruje się na tworzeniu stosu wdrożenia w zakresie grupy zasobów. Można jednak również tworzyć stosy wdrażania w zakresie subskrypcji. Aby uzyskać więcej informacji na temat tworzenia stosów wdrażania, zobacz Tworzenie stosów wdrożeń.

Wymagania wstępne

Tworzenie pliku Bicep

Utwórz plik Bicep w programie Visual Studio Code, aby utworzyć konto magazynu i sieć wirtualną. Ten plik służy do tworzenia stosu wdrożenia.

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

Zapisz plik Bicep jako main.bicep.

Tworzenie stosu wdrożenia

Aby utworzyć grupę zasobów i stos wdrożenia, wykonaj następujące polecenia, zapewniając odpowiednią ścieżkę pliku Bicep na podstawie lokalizacji wykonywania.

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

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

Przełącznik deny-settings-mode przypisuje określony typ uprawnień do zarządzanych zasobów, co uniemożliwia ich usunięcie przez nieautoryzowanych podmiotów zabezpieczeń. Aby uzyskać więcej informacji, zobacz Ochrona zasobów zarządzanych przed usunięciem.

Wyświetlanie listy stosu wdrożenia i zarządzanych zasobów

Aby zweryfikować wdrożenie, możesz wyświetlić listę stosu wdrożenia i wyświetlić listę zarządzanych zasobów stosu wdrożenia.

Aby wyświetlić listę wdrożonego stosu wdrożenia:

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

Dane wyjściowe zawierają dwa zarządzane zasoby — jedno konto magazynu i jedną sieć wirtualną:

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

Możesz również zweryfikować wdrożenie, wyświetlając listę zarządzanych zasobów w stosie wdrożenia:

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

Dane wyjściowe są podobne do następujących:

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

Aktualizowanie stosu wdrożenia

Aby zaktualizować stos wdrożenia, wprowadź niezbędne modyfikacje bazowego pliku Bicep, a następnie uruchom ponownie polecenie do utworzenia stosu wdrożenia lub użyj polecenia set w programie Azure PowerShell.

W tym samouczku wykonasz następujące czynności:

  • Aktualizowanie właściwości zasobu zarządzanego.
  • Dodaj zasób do stosu.
  • Odłącz zasób zarządzany.
  • Dołącz istniejący zasób do stosu.
  • Usuń zasób zarządzany.

Aktualizowanie zarządzanego zasobu

Na końcu poprzedniego kroku masz jeden stos z dwoma zasobami zarządzanymi. Zaktualizujesz właściwość zasobu konta magazynu.

Edytuj plik main.bicep, aby zmienić nazwę jednostki SKU z Standard_LRS na Standard_GRS:

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

Zaktualizuj zasób zarządzany, uruchamiając następujące polecenie:

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

Właściwość jednostki SKU można sprawdzić, uruchamiając następujące polecenie:

az resource list --resource-group "demoRg"

Dodawanie zasobu zarządzanego

Na końcu poprzedniego kroku masz jeden stos z dwoma zasobami zarządzanymi. Do stosu zostanie dodany jeszcze jeden zasób konta magazynu.

Edytuj plik main.bicep, aby uwzględnić inną definicję konta magazynu:

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

Zaktualizuj stos wdrożenia, uruchamiając następujące polecenie:

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

Wdrożenie można zweryfikować, wyświetlając listę zarządzanych zasobów w stosie wdrożenia:

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

Oprócz dwóch istniejących zasobów zobaczysz nowe konto magazynu.

Odłączanie zarządzanego zasobu

Na końcu poprzedniego kroku masz jeden stos z trzema zasobami zarządzanymi. Odłączysz jeden z zarządzanych zasobów. Po odłączeniu zasobu pozostanie on w grupie zasobów.

Edytuj plik main.bicep, aby usunąć następującą definicję konta magazynu z poprzedniego kroku:

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

Zaktualizuj stos wdrożenia, uruchamiając następujące polecenie:

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

Wdrożenie można zweryfikować, wyświetlając listę zarządzanych zasobów w stosie wdrożenia:

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

W stosie będą widoczne dwa zarządzane zasoby. Jednak odłączony zasób jest nadal wyświetlany w grupie zasobów. Zasoby w grupie zasobów można wyświetlić, uruchamiając następujące polecenie:

az resource list --resource-group 'demoRg'

Dołączanie istniejącego zasobu do stosu

Na końcu poprzedniego kroku masz jeden stos z dwoma zasobami zarządzanymi. Istnieje zasób niezarządzany w tej samej grupie zasobów co zarządzane zasoby. Ten niezarządzany zasób zostanie dołączony do stosu.

Edytuj plik main.bicep, aby uwzględnić definicję konta magazynu niezarządzanego zasobu:

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

Zaktualizuj stos wdrożenia, uruchamiając następujące polecenie:

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

Wdrożenie można zweryfikować, wyświetlając listę zarządzanych zasobów w stosie wdrożenia:

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

Zostaną wyświetlone trzy zarządzane zasoby.

Usuwanie zasobu zarządzanego

Na końcu poprzedniego kroku masz jeden stos z trzema zasobami zarządzanymi. W jednym z poprzednich kroków odłączono zasób zarządzany. Czasami możesz chcieć usunąć zasób zamiast odłączyć go. Aby usunąć zasób, użyj przełącznika delete-resources z poleceniem create/set.

Edytuj plik main.bicep, aby usunąć następującą definicję konta magazynu:

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

Uruchom następujące polecenie za pomocą przełącznika delete-resources:

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

Oprócz przełącznika delete-resources dostępne są dwa inne przełączniki: delete-all i delete-resource-groups. Aby uzyskać więcej informacji, zobacz Kontrola odłączania i usuwania.

Wdrożenie można zweryfikować, wyświetlając listę zarządzanych zasobów w stosie wdrożenia:

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

W stosie będą widoczne dwa zarządzane zasoby. Zasób jest również usuwany z grupy zasobów. Grupę zasobów można zweryfikować, uruchamiając następujące polecenie:

az resource list --resource-group 'demoRg'

Konfigurowanie ustawień odmowy

Podczas tworzenia stosu wdrożenia można przypisać określony typ uprawnień do zarządzanych zasobów, co uniemożliwia ich usunięcie przez nieautoryzowanych podmiotów zabezpieczeń. Te ustawienia są nazywane ustawieniami odmowy.

Interfejs wiersza polecenia platformy Azure zawiera następujące parametry, aby dostosować przypisanie odmowy:

  • deny-settings-mode: definiuje operacje, które są zabronione dla zarządzanych zasobów w celu ochrony przed nieautoryzowanymi podmiotami zabezpieczeń próbującymi je usunąć lub zaktualizować. To ograniczenie dotyczy wszystkich, chyba że jawnie udzielono dostępu. Wartości obejmują: none, denyDeletei denyWriteAndDelete.
  • deny-settings-apply-to-child-scopes: Ustawienia odmowy są stosowane do podrzędnych zakresów zarządzania platformy Azure.
  • deny-settings-excluded-actions: Lista operacji zarządzania kontroli dostępu na podstawie ról (RBAC) wykluczonych z ustawień odmowy. Dozwolone są maksymalnie 200 akcji.
  • deny-settings-excluded-principals: Lista identyfikatorów podmiotów zabezpieczeń firmy Microsoft wykluczonych z blokady. Dozwolone są maksymalnie pięć podmiotów zabezpieczeń.

W tym samouczku skonfigurujesz tryb ustawień odmowy. Aby uzyskać więcej informacji na temat innych ustawień odmowy, zobacz Ochrona zasobów zarządzanych przed usunięciem.

Na końcu poprzedniego kroku masz jeden stos z dwoma zasobami zarządzanymi.

Uruchom następujące polecenie z przełącznikiem trybu odmowy ustawień ustawionym na wartość deny-delete:

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

Następujące polecenie usuwania zakończy się niepowodzeniem, ponieważ tryb odmowy ustawień jest ustawiony na odmowę usunięcia:

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

Zaktualizuj stos przy użyciu trybu odmowy ustawień na wartość none, aby ukończyć resztę samouczka:

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

Eksportowanie szablonu ze stosu

Eksportując stos wdrożenia, można wygenerować plik Bicep. Ten plik Bicep służy jako zasób do przyszłego programowania i kolejnych wdrożeń.

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

Dane wyjściowe można przesyłać potokiem do pliku.

Usuwanie stosu wdrożenia

Aby usunąć stos wdrożenia i zarządzane zasoby, uruchom następujące polecenie:

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

Jeśli uruchomisz polecenia usuwania bez usunięcia wszystkich parametrów, zarządzane zasoby zostaną odłączone, ale nie zostaną usunięte. Przykład:

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

Poniższe parametry mogą służyć do kontrolowania między odłączanie i usuwanie.

  • --delete-all: Usuń zarówno zasoby, jak i grupy zasobów.
  • --delete-resources: Usuń tylko zasoby.
  • --delete-resource-groups: Usuń tylko grupy zasobów.

Aby uzyskać więcej informacji, zobacz Usuwanie stosów wdrożeń.

Następne kroki