Stosy wdrażania (wersja zapoznawcza)

Stos wdrażania platformy Azure to typ zasobu platformy Azure, który umożliwia zarządzanie grupą zasobów platformy Azure jako jednostką niepodzielna. Gdy plik Bicep lub szablon JSON usługi ARM jest przesyłany do stosu wdrożenia, definiuje zasoby zarządzane przez stos. Jeśli zasób, który został wcześniej uwzględniony w szablonie, zostanie on odłączony lub usunięty na podstawie określonej akcjiOnUnmanage zachowania stosu wdrożenia. Podobnie jak w przypadku innych zasobów platformy Azure dostęp do stosu wdrażania można ograniczyć przy użyciu kontroli dostępu opartej na rolach (RBAC) platformy Azure.

Aby utworzyć i zaktualizować stos wdrożenia, możesz użyć interfejsu wiersza polecenia platformy Azure, programu Azure PowerShell lub witryny Azure Portal wraz z plikami Bicep. Te pliki Bicep są transpilowane w szablonach JSON usługi ARM, które następnie są wdrażane jako obiekt wdrożenia przez stos. Stos wdrożenia oferuje dodatkowe możliwości poza znanymi zasobami wdrażania, które pełnią rolę nadzbioru tych możliwości.

Microsoft.Resources/deploymentStacks to typ zasobu dla stosów wdrożeń. Składa się on z głównego szablonu, który może wykonywać aktualizacje od 1 do wielu w różnych zakresach do opisanych zasobów i blokować wszelkie niepożądane zmiany w tych zasobach.

Podczas planowania wdrożenia i określania, które grupy zasobów powinny być częścią tego samego stosu, należy wziąć pod uwagę cykl życia zarządzania tych zasobów, który obejmuje tworzenie, aktualizowanie i usuwanie. Załóżmy na przykład, że musisz aprowizować niektóre testowe maszyny wirtualne dla różnych zespołów aplikacji w różnych zakresach grup zasobów. W takim przypadku można użyć stosu wdrożenia, aby utworzyć te środowiska testowe i zaktualizować konfiguracje testowej maszyny wirtualnej za pomocą kolejnych aktualizacji do stosu wdrożenia. Po ukończeniu projektu może być konieczne usunięcie lub usunięcie wszystkich utworzonych zasobów, takich jak testowe maszyny wirtualne. Korzystając ze stosu wdrożenia, zasoby zarządzane można łatwo usunąć, określając odpowiednią flagę usuwania. To usprawnione podejście pozwala zaoszczędzić czas podczas oczyszczania środowiska, ponieważ obejmuje pojedynczą aktualizację zasobu stosu, a nie pojedynczo modyfikuje lub usuwa każdą testową maszynę wirtualną w różnych zakresach grup zasobów.

Stosy wdrażania wymagają programu Azure PowerShell w wersji 10.1.0 lub nowszej lub interfejsu wiersza polecenia platformy Azure w wersji 2.50.0 lub nowszej.

Aby utworzyć pierwszy stos wdrożenia, wykonaj kroki z przewodnika Szybki start: tworzenie stosu wdrożenia.

Dlaczego warto używać stosów wdrażania?

Stosy wdrażania zapewniają następujące korzyści:

  • Uproszczona aprowizacja zasobów i zarządzanie nimi w różnych zakresach jako spójna jednostka.
  • Zapobieganie niepożądanym modyfikacjom zasobów zarządzanych za pomocą ustawień odmowy.
  • Wydajne czyszczenie środowiska dzięki użyciu flag usuwania podczas aktualizacji stosu wdrożenia.
  • Korzystanie ze standardowych szablonów, takich jak Bicep, szablony usługi ARM lub specyfikacje szablonów dla stosów wdrożeń.

Znane ograniczenia

  • Niejawnie utworzone zasoby nie są zarządzane przez stos. W związku z tym nie można odmówić przypisań ani oczyszczania.
  • Przypisania odmowy nie obsługują tagów.
  • Przypisania odmowy nie są obsługiwane w zakresie grupy zarządzania.
  • Stosy wdrażania nie mogą usuwać wpisów tajnych magazynu kluczy. Jeśli usuwasz wpisy tajne magazynu kluczy z szablonu, pamiętaj, aby również wykonać polecenie aktualizacji/usuwania stosu wdrożenia z trybem odłączania.

Znane problemy

  • Usuwanie grup zasobów obecnie pomija przypisania odmowy. Podczas tworzenia stosu wdrożenia w zakresie grupy zasobów plik Bicep nie zawiera definicji grupy zasobów. Pomimo ustawienia przypisania odmowy można usunąć grupę zasobów i jej zawarty stos. Jeśli jednak blokada jest aktywna w dowolnym zasobie w grupie, operacja usuwania zakończy się niepowodzeniem.
  • Co-jeżeli nie jest dostępne w wersji zapoznawczej.
  • Stos o zakresie grupy zarządzania jest ograniczony do wdrażania w innej grupie zarządzania. Można go wdrożyć tylko w grupie zarządzania samego stosu lub w subskrypcji podrzędnej.

Tworzenie stosów wdrożenia

Zasób stosu wdrożenia można utworzyć w zakresie grupy zasobów, subskrypcji lub grupy zarządzania. Szablon przekazany do stosu wdrożenia definiuje zasoby, które mają zostać utworzone lub zaktualizowane w zakresie docelowym określonym dla wdrożenia szablonu.

  • Stos w zakresie grupy zasobów może wdrożyć szablon przekazany do tego samego zakresu grupy zasobów, w którym istnieje stos wdrożenia.
  • Stos w zakresie subskrypcji może wdrożyć szablon przekazany do zakresu grupy zasobów (jeśli określono) lub ten sam zakres subskrypcji, w którym istnieje stos wdrożenia.
  • Stos w zakresie grupy zarządzania może wdrożyć szablon przekazany do określonego zakresu subskrypcji.

Należy pamiętać, że w przypadku, gdy istnieje stos wdrożenia, dlatego przypisanie odmowy utworzone za pomocą możliwości ustawienia odmowy. Na przykład przez utworzenie stosu wdrożenia w zakresie subskrypcji, który wdraża szablon w zakresie grupy zasobów i z trybem DenyDeleteustawienia odmowy, można łatwo aprowizować zarządzane zasoby do określonej grupy zasobów i blokować próby usunięcia tych zasobów. Korzystając z tego podejścia, można również zwiększyć bezpieczeństwo stosu wdrożenia, oddzielając go na poziomie subskrypcji, w przeciwieństwie do poziomu grupy zasobów. Ta separacja gwarantuje, że zespoły deweloperów współpracujące z zaaprowizowanymi zasobami mają dostęp tylko do wglądu i zapisu w grupach zasobów, podczas gdy stos wdrożenia pozostaje odizolowany na wyższym poziomie. Minimalizuje to liczbę użytkowników, którzy mogą edytować stos wdrożenia i wprowadzać zmiany w przypisaniu odmowy. Aby uzyskać więcej informacji, zobacz Ochrona zarządzanego zasobu przed usunięciem.

Polecenia create-stack mogą być również używane do aktualizowania stosów wdrażania.

Aby utworzyć stos wdrożenia w zakresie grupy zasobów:

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

Aby utworzyć stos wdrożenia w zakresie subskrypcji:

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

Parametr DeploymentResourceGroupName określa grupę zasobów używaną do przechowywania zasobów zarządzanych. Jeśli parametr nie zostanie określony, zasoby zarządzane są przechowywane w zakresie subskrypcji.

Aby utworzyć stos wdrożenia w zakresie grupy zarządzania:

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

Parametr deploymentSubscriptionId określa subskrypcję używaną do przechowywania zasobów zarządzanych. Jeśli parametr nie zostanie określony, zasoby zarządzane są przechowywane w zakresie grupy zarządzania.

Wyświetlanie listy stosów wdrożeń

Aby wyświetlić listę zasobów stosu wdrożenia w zakresie grupy zasobów:

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

Aby wyświetlić listę zasobów stosu wdrożenia w zakresie subskrypcji:

Get-AzSubscriptionDeploymentStack

Aby wyświetlić listę zasobów stosu wdrożenia w zakresie grupy zarządzania:

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

Aktualizowanie stosów wdrożeń

Aby zaktualizować stos wdrożenia, który może obejmować dodawanie lub usuwanie zarządzanego zasobu, należy wprowadzić zmiany w źródłowych plikach Bicep. Po wprowadzeniu modyfikacji dostępne są dwie opcje aktualizacji stosu wdrożenia: uruchom polecenie aktualizacji lub uruchom ponownie polecenie create.

Lista zasobów zarządzanych może być w pełni kontrolowana za pomocą wzorca projektowego infrastruktury jako kodu (IaC).

Użyj polecenia Ustaw

Aby zaktualizować stos wdrożenia w zakresie grupy zasobów:

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

Aby zaktualizować stos wdrożenia w zakresie subskrypcji:

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

Parametr DeploymentResourceGroupName określa grupę zasobów używaną do przechowywania zasobów stosu wdrożenia. Jeśli nie określisz nazwy grupy zasobów, usługa stosu wdrożenia utworzy nową grupę zasobów.

Aby zaktualizować stos wdrożenia w zakresie grupy zarządzania:

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

Użyj nowego polecenia

Zostanie wyświetlone ostrzeżenie podobne do następującego:

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)

Aby uzyskać więcej informacji, zobacz Tworzenie stosów wdrażania.

Sterowanie odłączeniem i usuwaniem

Zasób odłączony (lub zasób niezarządzany) odnosi się do zasobu, który nie jest śledzony ani zarządzany przez stos wdrożenia, ale nadal istnieje na platformie Azure.

Aby poinstruować platformę Azure o usunięcie niezarządzanych zasobów, zaktualizuj stos za pomocą polecenia create stack za pomocą jednej z następujących flag usuwania. Aby uzyskać więcej informacji, zobacz Tworzenie stosu wdrożenia.

  • DeleteAll: należy używać funkcji usuwania, a nie odłączać zasobów zarządzanych i grup zasobów.
  • DeleteResources: użyj opcji usuń, a nie odłączaj tylko dla zasobów zarządzanych.
  • DeleteResourceGroups: użyj opcji usuń, a nie odłączaj tylko dla zarządzanych grup zasobów. Jest ono nieprawidłowe do użycia samodzielnie DeleteResourceGroups . DeleteResourceGroups należy używać razem z DeleteResources.

Na przykład:

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

Ostrzeżenie

Podczas usuwania grup zasobów z właściwościami DeleteAll lub DeleteResourceGroups zarządzane grupy zasobów i wszystkie zawarte w nich zasoby również zostaną usunięte.

Usuwanie stosów wdrożeń

Jeśli uruchomisz polecenia usuwania bez flag usuwania, niezarządzane zasoby zostaną odłączone, ale nie zostaną usunięte. Aby usunąć niezarządzane zasoby, użyj następujących przełączników:

  • DeleteAll: Usuń zarówno zasoby, jak i grupy zasobów.
  • DeleteResources: Usuń tylko zasoby.
  • DeleteResourceGroups: Usuń tylko grupy zasobów.

Nawet jeśli określisz usunięcie całego przełącznika, jeśli w grupie zasobów znajdują się zasoby niezarządzane, zarówno zasób niezarządzany, jak i sama grupa zasobów nie zostaną usunięte.

Aby usunąć zasoby stosu wdrożenia w zakresie grupy zasobów:

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

Aby usunąć zasoby stosu wdrożenia w zakresie subskrypcji:

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

Aby usunąć zasoby stosu wdrożenia w zakresie grupy zarządzania:

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

Wyświetlanie zasobów zarządzanych w stosie wdrażania

W publicznej wersji zapoznawczej usługa stosu wdrożenia nie ma jeszcze graficznego interfejsu użytkownika (GUI) witryny Azure Portal. Aby wyświetlić zasoby zarządzane wewnątrz stosu wdrożenia, użyj następujących poleceń programu Azure PowerShell/interfejsu wiersza polecenia platformy Azure:

Aby wyświetlić zasoby zarządzane w zakresie grupy zasobów:

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

Aby wyświetlić zasoby zarządzane w zakresie subskrypcji:

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

Aby wyświetlić zasoby zarządzane w zakresie grupy zarządzania:

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

Dodawanie zasobów do stosu wdrożenia

Aby dodać zasób zarządzany, dodaj definicję zasobu do bazowych plików Bicep, a następnie uruchom polecenie update lub uruchom ponownie polecenie create. Aby uzyskać więcej informacji, zobacz Update deployment stacks (Stosy wdrażania aktualizacji).

Usuwanie zasobów zarządzanych ze stosu wdrożenia

Aby usunąć zasób zarządzany, usuń definicję zasobu z bazowych plików Bicep, a następnie uruchom polecenie update lub uruchom ponownie polecenie create. Aby uzyskać więcej informacji, zobacz Update deployment stacks (Stosy wdrażania aktualizacji).

Ochrona zasobów zarządzanych przed usunięciem

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

Program Azure PowerShell zawiera następujące parametry, aby dostosować przypisanie odmowy:

  • DenySettingsMode: 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.
  • DenySettingsApplyToChildScopes: Ustawienia odmowy są stosowane do zasobów zagnieżdżonych w ramach zasobów zarządzanych.
  • DenySettingsExcludedAction: Lista operacji zarządzania opartych na rolach, które są wykluczone z ustawień odmowy. Dozwolone są maksymalnie 200 akcji.
  • DenySettingsExcludedPrincipal: Lista identyfikatorów podmiotów zabezpieczeń firmy Microsoft wykluczonych z blokady. Dozwolone są maksymalnie pięć podmiotów zabezpieczeń.

Aby zastosować ustawienia odmowy w zakresie grupy zasobów:

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

Aby zastosować ustawienia odmowy w zakresie subskrypcji:

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

Użyj parametru , DeploymentResourceGroupName aby określić nazwę grupy zasobów, w której jest tworzony stos wdrożenia. Jeśli zakres nie jest określony, używa zakresu stosu wdrożenia.

Aby zastosować ustawienia odmowy w zakresie grupy zarządzania:

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

Użyj parametru , DeploymentSubscriptionId aby określić identyfikator subskrypcji, w której jest tworzony stos wdrożenia. Jeśli zakres nie jest określony, używa zakresu stosu wdrożenia.

Odłączanie zarządzanych zasobów od stosu wdrożenia

Domyślnie stosy wdrażania odłączają i nie usuwają niezarządzanych zasobów, gdy nie są już zawarte w zakresie zarządzania stosu. Aby uzyskać więcej informacji, zobacz Update deployment stacks (Stosy wdrażania aktualizacji).

Eksportowanie szablonów z stosów wdrażania

Zasoby można wyeksportować ze stosu wdrożenia do danych wyjściowych JSON. Dane wyjściowe można przesyłać potokiem do pliku.

Aby wyeksportować stos wdrożenia w zakresie grupy zasobów:

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

Aby wyeksportować stos wdrożenia w zakresie subskrypcji:

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

Aby wyeksportować stos wdrożenia w zakresie grupy zarządzania:

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

Następne kroki

Aby zapoznać się z przewodnikiem Szybki start, zobacz Szybki start: tworzenie stosu wdrożenia.