Implementatiestacks (preview)

Een Azure-implementatiestack is een type Azure-resource waarmee het beheer van een groep Azure-resources als een atomische eenheid mogelijk is. Wanneer een Bicep-bestand of een ARM JSON-sjabloon wordt verzonden naar een implementatiestack, worden de resources gedefinieerd die worden beheerd door de stack. Als een resource die eerder in de sjabloon is opgenomen, is verwijderd, wordt deze losgekoppeld of verwijderd op basis van het opgegeven actionOnUnmanage-gedrag van de implementatiestack. Net als bij andere Azure-resources kan de toegang tot de implementatiestack worden beperkt met behulp van op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC).

Als u een implementatiestack wilt maken en bijwerken, kunt u Azure CLI, Azure PowerShell of Azure Portal gebruiken, samen met Bicep-bestanden. Deze Bicep-bestanden worden getranspileerd in ARM JSON-sjablonen, die vervolgens worden geïmplementeerd als een implementatieobject door de stack. De implementatiestack biedt extra mogelijkheden buiten de vertrouwde implementatiebronnen, die fungeren als een superset van deze mogelijkheden.

Microsoft.Resources/deploymentStacks is het resourcetype voor implementatiestacks. Het bestaat uit een hoofdsjabloon die 1-op-veel-updates kan uitvoeren voor de resources die worden beschreven en eventuele ongewenste wijzigingen in deze resources blokkeren.

Wanneer u uw implementatie plant en bepaalt welke resourcegroepen deel moeten uitmaken van dezelfde stack, is het belangrijk om rekening te houden met de levenscyclus van deze resources, waaronder het maken, bijwerken en verwijderen van resources. Stel dat u enkele test-VM's moet inrichten voor verschillende toepassingsteams binnen verschillende resourcegroepbereiken. In dit geval kan een implementatiestack worden gebruikt om deze testomgevingen te maken en de configuraties van de test-VM bij te werken via volgende updates voor de implementatiestack. Nadat het project is voltooid, kan het nodig zijn om resources te verwijderen die zijn gemaakt, zoals de test-VM's. Door gebruik te maken van een implementatiestack, kunnen de beheerde resources eenvoudig worden verwijderd door de juiste verwijdervlag op te geven. Deze gestroomlijnde benadering bespaart tijd tijdens het opschonen van de omgeving, omdat er één update voor de stackresource nodig is in plaats van elke test-VM afzonderlijk te wijzigen of te verwijderen in verschillende resourcegroepbereiken.

Voor implementatiestacks is Azure PowerShell versie 10.1.0 of hoger of Azure CLI versie 2.50.0 of hoger vereist.

Als u uw eerste implementatiestack wilt maken, voert u de quickstart uit: een implementatiestack maken.

Waarom implementatiestacks gebruiken?

Implementatiestacks bieden de volgende voordelen:

  • Vereenvoudigd inrichten en beheren van resources binnen verschillende bereiken als een samenhangende entiteit.
  • Voorkomen dat ongewenste wijzigingen aan beheerde resources worden aangebracht via instellingen voor weigeren.
  • Efficiënt opschonen van omgevingen door verwijderingsvlagmen te gebruiken tijdens implementatiestackupdates.
  • Standaardsjablonen zoals Bicep, ARM-sjablonen of sjabloonspecificaties gebruiken voor uw implementatiestacks.

Bekende beperkingen

  • Impliciet gemaakte resources worden niet beheerd door de stack. Daarom is er geen weigeringstoewijzingen of opschoning mogelijk.
  • Toewijzingen weigeren bieden geen ondersteuning voor tags.
  • Weigeringstoewijzingen worden niet ondersteund binnen het bereik van de beheergroep.
  • Implementatiestacks kunnen key vault-geheimen niet verwijderen. Als u sleutelkluisgeheimen uit een sjabloon verwijdert, moet u ook de opdracht update/delete van de implementatiestack uitvoeren met de loskoppelmodus.

Bekende problemen

  • Als u resourcegroepen verwijdert, worden weigeringstoewijzingen momenteel overgeslagen. Wanneer u een implementatiestack maakt in het bereik van de resourcegroep, bevat het Bicep-bestand niet de definitie voor de resourcegroep. Ondanks de instelling voor weigeringstoewijzing is het mogelijk om de resourcegroep en de bijbehorende ingesloten stack te verwijderen. Als een vergrendeling echter actief is voor een resource binnen de groep, mislukt de verwijderbewerking.
  • Wat-als is niet beschikbaar in de preview.
  • Een beheergroep-scoped stack kan niet worden geïmplementeerd in een andere beheergroep. Het kan alleen worden geïmplementeerd in de beheergroep van de stack zelf of in een onderliggend abonnement.

Implementatiestacks maken

Een implementatiestackresource kan worden gemaakt op het bereik van de resourcegroep, het abonnement of de beheergroep. De sjabloon die wordt doorgegeven aan een implementatiestack definieert de resources die moeten worden gemaakt of bijgewerkt op het doelbereik dat is opgegeven voor de sjabloonimplementatie.

  • Een stack binnen het bereik van de resourcegroep kan de sjabloon implementeren die is doorgegeven aan hetzelfde bereik van de resourcegroep waar de implementatiestack bestaat.
  • Een stack op abonnementsbereik kan de sjabloon implementeren die is doorgegeven aan een resourcegroepbereik (indien opgegeven) of hetzelfde abonnementsbereik waar de implementatiestack bestaat.
  • Een stack op het bereik van de beheergroep kan de sjabloon implementeren die is doorgegeven aan het opgegeven abonnementsbereik.

Het is belangrijk om te weten dat waar een implementatiestack bestaat, dus de weigeringstoewijzing die is gemaakt met de mogelijkheid om instellingen voor weigeren te weigeren. Als u bijvoorbeeld een implementatiestack maakt op abonnementsbereik waarmee de sjabloon wordt geïmplementeerd in het bereik van de resourcegroep en de modus DenyDeleteInstellingen weigeren, kunt u eenvoudig beheerde resources inrichten in de opgegeven resourcegroep en verwijderingspogingen naar deze resources blokkeren. Door deze methode te gebruiken, verbetert u ook de beveiliging van de implementatiestack door deze te scheiden op abonnementsniveau, in plaats van op het niveau van de resourcegroep. Deze scheiding zorgt ervoor dat de ontwikkelaarsteams die met de ingerichte resources werken alleen zichtbaarheid en schrijftoegang tot de resourcegroepen hebben, terwijl de implementatiestack op een hoger niveau geïsoleerd blijft. Dit minimaliseert het aantal gebruikers dat een implementatiestack kan bewerken en wijzigingen kan aanbrengen in de weigeringstoewijzing. Zie Beheerde resource beveiligen tegen verwijdering voor meer informatie.

De opdrachten voor create-stack kunnen ook worden gebruikt om implementatiestacks bij te werken.

Een implementatiestack maken op het bereik van de resourcegroep:

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

Een implementatiestack maken in het abonnementsbereik:

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

De DeploymentResourceGroupName parameter geeft de resourcegroep op die wordt gebruikt voor het opslaan van de beheerde resources. Als de parameter niet is opgegeven, worden de beheerde resources opgeslagen in het abonnementsbereik.

Een implementatiestack maken op het bereik van de beheergroep:

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

De deploymentSubscriptionId parameter geeft het abonnement op dat wordt gebruikt voor het opslaan van de beheerde resources. Als de parameter niet is opgegeven, worden de beheerde resources opgeslagen in het bereik van de beheergroep.

Implementatiestacks vermelden

Resources voor implementatiestacks weergeven op het bereik van de resourcegroep:

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

Resources voor implementatiestacks weergeven op het abonnementsbereik:

Get-AzSubscriptionDeploymentStack

Resources voor implementatiestacks weergeven op het bereik van de beheergroep:

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

Implementatiestacks bijwerken

Als u een implementatiestack wilt bijwerken, waarbij mogelijk een beheerde resource moet worden toegevoegd of verwijderd, moet u wijzigingen aanbrengen in de onderliggende Bicep-bestanden. Zodra de wijzigingen zijn aangebracht, hebt u twee opties om de implementatiestack bij te werken: voer de updateopdracht uit of voer de opdracht create opnieuw uit.

De lijst met beheerde resources kan volledig worden beheerd via het ontwerppatroon infrastructuur als code (IaC).

De opdracht Instellen gebruiken

Een implementatiestack bijwerken op het bereik van de resourcegroep:

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

Een implementatiestack bijwerken op het abonnementsbereik:

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

De DeploymentResourceGroupName parameter geeft de resourcegroep op die wordt gebruikt voor het opslaan van de implementatiestackresources. Als u geen naam voor een resourcegroep opgeeft, maakt de implementatiestackservice een nieuwe resourcegroep voor u.

Een implementatiestack bijwerken op het bereik van de beheergroep:

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

De opdracht Nieuw gebruiken

Er wordt een waarschuwing weergegeven die er ongeveer als volgt uitziet:

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)

Zie Implementatiestacks maken voor meer informatie.

Loskoppelen en verwijderen van besturingselementen

Een losgekoppelde resource (of onbeheerde resource) verwijst naar een resource die niet wordt bijgehouden of beheerd door de implementatiestack, maar nog steeds in Azure bestaat.

Als u Azure wilt instrueren om onbeheerde resources te verwijderen, werkt u de stack bij met de opdracht Stack maken met een van de volgende verwijdervlagmen. Zie Implementatiestack maken voor meer informatie.

  • DeleteAll: verwijder in plaats van loskoppelen voor beheerde resources en resourcegroepen.
  • DeleteResources: gebruik verwijderen in plaats van alleen loskoppelen voor beheerde resources.
  • DeleteResourceGroups: gebruik verwijderen in plaats van alleen loskoppelen voor beheerde resourcegroepen. Het is ongeldig om zelf te gebruiken DeleteResourceGroups . DeleteResourceGroups moet samen met DeleteResources.

Voorbeeld:

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

Waarschuwing

Wanneer u resourcegroepen verwijdert met de DeleteAll of DeleteResourceGroups eigenschappen, worden ook de beheerde resourcegroepen en alle resources in de resourcegroepen verwijderd.

Implementatiestacks verwijderen

Als u de verwijderopdrachten zonder de verwijdervlaggen uitvoert, worden de niet-beheerde resources losgekoppeld, maar niet verwijderd. Gebruik de volgende schakelopties om de niet-beheerde resources te verwijderen:

  • DeleteAll: Verwijder zowel de resources als de resourcegroepen.
  • DeleteResources: Verwijder alleen de resources.
  • DeleteResourceGroups: Verwijder alleen de resourcegroepen.

Zelfs als u de schakeloptie voor verwijderen opgeeft, worden zowel de niet-beheerde resource als de resourcegroep zelf niet-beheerde resources verwijderd binnen de resourcegroep waarin de implementatiestack zich bevindt.

Resources voor implementatiestacks verwijderen binnen het bereik van de resourcegroep:

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

Resources voor implementatiestacks verwijderen in het abonnementsbereik:

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

Resources voor implementatiestacks verwijderen binnen het bereik van de beheergroep:

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

Beheerde resources weergeven in implementatiestack

Tijdens de openbare preview heeft de implementatiestackservice nog geen grafische gebruikersinterface (GUI) van Azure Portal. Als u de beheerde resources in een implementatiestack wilt weergeven, gebruikt u de volgende Azure Powershell-/Azure CLI-opdrachten:

Beheerde resources weergeven op het bereik van de resourcegroep:

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

Beheerde resources weergeven op het abonnementsbereik:

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

Beheerde resources weergeven op het bereik van de beheergroep:

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

Resources toevoegen aan implementatiestack

Als u een beheerde resource wilt toevoegen, voegt u de resourcedefinitie toe aan de onderliggende Bicep-bestanden en voert u vervolgens de updateopdracht uit of voert u de opdracht maken opnieuw uit. Zie Update-implementatiestacks voor meer informatie.

Beheerde resources verwijderen uit de implementatiestack

Als u een beheerde resource wilt verwijderen, verwijdert u de resourcedefinitie uit de onderliggende Bicep-bestanden en voert u vervolgens de updateopdracht uit of voert u de opdracht maken opnieuw uit. Zie Update-implementatiestacks voor meer informatie.

Beheerde resources beschermen tegen verwijdering

Wanneer u een implementatiestack maakt, is het mogelijk om een specifiek type machtigingen toe te wijzen aan de beheerde resources, waardoor het verwijderen door onbevoegde beveiligingsprinciplen wordt voorkomen. Deze instellingen worden instellingen voor weigeren genoemd. U wilt de stack opslaan op een bovenliggend bereik.

De Azure PowerShell bevat deze parameters om de weigeringstoewijzing aan te passen:

  • DenySettingsMode: Definieert de bewerkingen die niet zijn toegestaan voor de beheerde resources om te beschermen tegen onbevoegde beveiligingsprinciplen die proberen ze te verwijderen of bij te werken. Deze beperking geldt voor iedereen, tenzij expliciet toegang wordt verleend. De waarden zijn: None, DenyDeleteen DenyWriteAndDelete.
  • DenySettingsApplyToChildScopes: Instellingen voor weigeren worden toegepast op geneste resources onder beheerde resources.
  • DenySettingsExcludedAction: Lijst met beheerbewerkingen op basis van rollen die zijn uitgesloten van de instellingen voor weigeren. Maximaal 200 acties zijn toegestaan.
  • DenySettingsExcludedPrincipal: Lijst met Microsoft Entra-principal-id's die zijn uitgesloten van de vergrendeling. Maximaal vijf principals zijn toegestaan.

Instellingen voor weigeren toepassen op het bereik van de resourcegroep:

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

De instellingen voor weigeren toepassen op het abonnementsbereik:

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

Gebruik de DeploymentResourceGroupName parameter om de naam van de resourcegroep op te geven waarop de implementatiestack wordt gemaakt. Als een bereik niet is opgegeven, wordt het bereik van de implementatiestack gebruikt.

Instellingen voor weigeren toepassen op het bereik van de beheergroep:

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

Gebruik de DeploymentSubscriptionId parameter om de abonnements-id op te geven waarop de implementatiestack wordt gemaakt. Als een bereik niet is opgegeven, wordt het bereik van de implementatiestack gebruikt.

Beheerde resources loskoppelen van implementatiestack

Standaard worden implementatiestacks losgekoppeld en worden onbeheerde resources niet verwijderd wanneer ze zich niet meer in het beheerbereik van de stack bevinden. Zie Update-implementatiestacks voor meer informatie.

Sjablonen exporteren uit implementatiestacks

U kunt de resources exporteren van een implementatiestack naar een JSON-uitvoer. U kunt de uitvoer doorsluisen naar een bestand.

Een implementatiestack exporteren op het bereik van de resourcegroep:

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

Een implementatiestack exporteren binnen het abonnementsbereik:

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

Een implementatiestack exporteren op het bereik van de beheergroep:

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

Volgende stappen

Als u een quickstart wilt doorlopen, raadpleegt u quickstart: een implementatiestack maken.