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
- Konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
- Program Azure PowerShell w wersji 10.1.0 lub nowszej lub interfejsu wiersza polecenia platformy Azure w wersji 2.50.0 lub nowszej.
- Program Visual Studio Code z rozszerzeniem Bicep.
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
,denyDelete
idenyWriteAndDelete
.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ń.