Udostępnij za pośrednictwem


Stosy wdrażania

Stos wdrażania platformy Azure to zasób, który umożliwia zarządzanie grupą zasobów platformy Azure jako pojedynczą, spójną jednostką. Po przesłaniu pliku Bicep lub szablonu JSON usługi ARM do stosu wdrożenia definiuje zasoby zarządzane przez stos. Jeśli zasób wcześniej dołączony do szablonu zostanie usunięty, zostanie on odłączony lub usunięty na podstawie określonej akcjiOnUnmanage zachowania stosu wdrożenia. Dostęp do stosu wdrażania można ograniczyć przy użyciu kontroli dostępu opartej na rolach (RBAC) platformy Azure, podobnie jak w przypadku innych zasobów 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 12.0.0 lub nowszej lub interfejsu wiersza polecenia platformy Azure w wersji 2.61.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:

  • Usprawniona aprowizacja zasobów i zarządzanie nimi w różnych zakresach jako ujednolicona jednostka.
  • Zapobieganie niepożądanym modyfikacjom zasobów zarządzanych za pośrednictwem ustawień odmowy.
  • Wydajne oczyszczanie środowiska przy użyciu flag usuwania podczas aktualizacji stosu wdrożenia.
  • Używanie 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 jest możliwe żadne przypisania odmowy ani oczyszczanie.
  • Przypisania odmowy nie obsługują tagów.
  • Przypisania odmowy nie są obsługiwane w zakresie grupy zarządzania. Są one jednak obsługiwane w stosie grupy zarządzania, jeśli wdrożenie jest wskazywane na zakres subskrypcji.
  • 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 odmowy przypisania 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.
  • Obsługa warunkowej analizy warunkowej nie jest jeszcze dostępna.
  • 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.
  • Polecenie programu PowerShell zawiera listę DeleteResourcesAndResourcesGroups wartości przełącznika ActionOnUnmanage . Gdy ta wartość jest używana, polecenie odłącza zarządzane zasoby i grupy zasobów. Ta wartość zostanie usunięta w następnej aktualizacji. Nie używaj tej wartości.
  • W niektórych przypadkach polecenia cmdlet New i Set programu Azure PowerShell mogą zwracać ogólny błąd weryfikacji szablonu, który nie jest wyraźnie możliwy do wykonania. Ta usterka zostanie usunięta w następnej wersji, ale na razie, jeśli błąd jest niejasny, możesz uruchomić polecenie cmdlet w trybie debugowania, aby zobaczyć bardziej szczegółowy błąd w nieprzetworzonej odpowiedzi.

Wbudowane role

Ostrzeżenie

Wymuszanie uprawnienia RBAC Microsoft.Resources/deploymentStacks/manageDenySetting/action jest wdrażane w różnych regionach, w tym w chmurach dla instytucji rządowych.

Istnieją dwie wbudowane role dla stosu wdrożenia:

  • Współautor usługi Azure Deployment Stack: umożliwia użytkownikom zarządzanie stosami wdrożenia, ale nie może tworzyć ani usuwać przypisań odmowy w stosach wdrażania.
  • Właściciel usługi Azure Deployment Stack: umożliwia użytkownikom zarządzanie stosami wdrożeń, w tym z przypisaniami odmowy.

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.

Ważne jest, aby 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>" `
  -ActionOnUnmanage "detachAll" `
  -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>" `
  -ActionOnUnmanage "detachAll" `
  -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>" `
  -ActionOnUnmanage "detachAll" `
  -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>" `
  -ActionOnUnmanage "detachAll" `
  -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>" `
  -ActionOnUnmanage "detachAll" `
  -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>" `
  -ActionOnUnmanage "detachAll" `
  -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ą następującego przełącznika. Aby uzyskać więcej informacji, zobacz Tworzenie stosu wdrożenia.

Użyj przełącznika ActionOnUnmanage , aby zdefiniować, co się stanie z zasobami, które nie są już zarządzane po zaktualizowaniu lub usunięciu stosu. Dozwolone wartości to:

  • 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.
  • detachAll: odłącz zarządzane zasoby i grupy zasobów.

Na przykład:

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

Ostrzeżenie

Podczas usuwania grup zasobów z przełącznikiem akcji na niezarządzanym ustawionym na DeleteAll, grupy zasobów zarządzanych i wszystkie zawarte w nich zasoby również zostaną usunięte.

Obsługa błędu stack-out-of-sync

Podczas aktualizowania lub usuwania stosu wdrożenia może wystąpić następujący błąd stosu poza synchronizacją wskazujący, że lista zasobów stosu nie jest poprawnie zsynchronizowana.

The deployment stack '{0}' may not have an accurate list of managed resources. To ensure no resources are accidentally deleted, please check that the managed resource list does not have any additional values. If there is any uncertainty, we recommend redeploying the stack with the same template and parameters as the current iteration. To bypass this warning, please specify the 'BypassStackOutOfSyncError' flag.

Listę zasobów można uzyskać z witryny Azure Portal lub ponownie wdrożyć aktualnie wdrożony plik Bicep z tymi samymi parametrami. Dane wyjściowe zawierają zasoby zarządzane

...
Resources: /subscriptions/9e8db52a-71bc-4871-9007-1117bf304622/resourceGroups/demoRg/providers/Microsoft.Network/virtualNetworks/vnetthmimleef5fwk
           /subscriptions/9e8db52a-71bc-4871-9007-1117bf304622/resourceGroups/demoRg/providers/Microsoft.Storage/storageAccounts/storethmimleef5fwk

Po przejrzeniu i zweryfikowaniu listy zasobów w stosie możesz ponownie uruchomić polecenie za pomocą przełącznika BypassStackOutOfSyncError w programie Azure PowerShell (lub bypass-stack-out-of-sync-error w interfejsie wiersza polecenia platformy Azure). Ten przełącznik powinien być używany tylko po dokładnie przejrzeniu listy zasobów w stosie przed ponownym uruchomieniem polecenia. Ten przełącznik nigdy nie powinien być używany domyślnie.

Usuwanie stosów wdrożeń

Przełącznik ActionOnUnmanage definiuje akcję do zasobów, które nie są już zarządzane. Przełącznik ma następujące wartości:

  • DeleteAll: Usuń zarówno zasoby, jak i grupy zasobów.
  • DeleteResources: Usuń tylko zasoby.
  • DetachAll: Odłącz zasoby.

Nawet jeśli określisz przełącznik delete-all, niezarządzane zasoby w grupie zasobów, w której znajduje się stos wdrożenia, uniemożliwia usunięcie zarówno niezarządzanych zasobów, jak i samej grupy zasobów.

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

Remove-AzResourceGroupDeploymentStack `
  -name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -ActionOnUnmanage "<deleteAll/deleteResources/detachAll>"

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

Remove-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ActionOnUnmanage "<deleteAll/deleteResources/detachAll>"

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

Remove-AzManagementGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ManagementGroupId "<management-group-id>" `
  -ActionOnUnmanage "<deleteAll/deleteResources/detachAll>"

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

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.

Uwaga

Najnowsza wersja wymaga określonych uprawnień w zakresie stosu w celu:

  • Utwórz lub zaktualizuj stos wdrożenia i ustaw ustawienie odmowy na wartość inną niż "Brak".
  • Aktualizowanie lub usuwanie stosu wdrożenia przy użyciu istniejącego ustawienia odmowy innego niż "Brak"

Użyj wbudowanych ról, aby przyznać uprawnienia.

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>" `
  -ActionOnUnmanage "detachAll" `
  -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>" `
  -ActionOnUnmanage "detachAll" `
  -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>" `
  -ActionOnUnmanage "detachAll" `
  -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.