Azure Resource Rightsizing

💼 Management Samenvatting

Resource rightsizing vormt een fundamentele discipline binnen Azure cost management waarbij organisaties systematisch analyseren of hun cloudresources optimaal zijn gedimensioneerd op basis van werkelijke gebruikspatronen. Effectief rightsizing helpt organisaties om aanzienlijke kostenbesparingen te realiseren door resources te verkleinen die overgedimensioneerd zijn, zonder in te boeten op prestaties of beschikbaarheid. Deze praktijk is essentieel voor Nederlandse overheidsorganisaties die verantwoordelijk zijn voor het efficiënt beheren van publieke middelen en het waarborgen van optimale prestaties tegen minimale kosten.

Aanbeveling
IMPLEMENTEREN VOOR KOSTENBESPARING
Risico zonder
Low
Risk Score
5/10
Implementatie
8u (tech: 4u)
Van toepassing op:
Azure Subscriptions

Zonder systematische rightsizing lopen organisaties het risico om aanzienlijk meer te betalen dan nodig is voor hun cloudresources. Het ontbreken van een gestructureerde aanpak voor rightsizing leidt tot verspilling van publieke middelen, waarbij virtuele machines, databases en andere resources onnodig groot worden ingericht op basis van conservatieve schattingen of piekbelastingen die zelden voorkomen. Deze overdimensionering resulteert in permanente kostenverspilling, waarbij organisaties maandelijks betalen voor capaciteit die niet wordt benut. Voor Nederlandse overheidsorganisaties is dit niet alleen financieel schadelijk, maar ook problematisch vanuit het oogpunt van verantwoordelijkheidsverantwoording, omdat organisaties moeten kunnen aantonen dat zij publieke middelen efficiënt en effectief besteden. Daarnaast kan overdimensionering leiden tot inefficiënt resourcegebruik dat de algehele cloudarchitectuur negatief beïnvloedt. Wanneer resources onnodig groot zijn, nemen zij meer capaciteit in beslag dan nodig, wat kan leiden tot problemen met resourceallocatie, schaalbaarheid en beheerbaarheid. Dit maakt het moeilijker om nieuwe workloads te implementeren of om bestaande workloads te schalen wanneer dat nodig is. Bovendien kan overdimensionering leiden tot valse gevoelens van veiligheid, waarbij organisaties denken dat zij voldoende capaciteit hebben terwijl in werkelijkheid de resources niet optimaal worden benut. Onderdimensionering vormt eveneens een risico wanneer organisaties resources te klein inrichten in een poging om kosten te besparen. Dit kan leiden tot prestatieproblemen, downtime en gebruikerservaring die niet voldoet aan verwachtingen. Wanneer resources ondergedimensioneerd zijn, kunnen workloads niet voldoende prestaties leveren, wat kan resulteren in langzame responsetijden, timeouts en mogelijk zelfs service-uitval. Dit is met name problematisch voor kritieke overheidsdiensten die burgers en bedrijven afhankelijk maken van beschikbaarheid en prestaties. Met een gestructureerde aanpak voor rightsizing beschikken organisaties over de tools en processen die nodig zijn om hun resources optimaal te dimensioneren op basis van werkelijke gebruikspatronen. Deze aanpak omvat regelmatige analyse van resourcegebruik, identificatie van over- en ondergedimensioneerde resources, implementatie van rightsizing-maatregelen, en continue monitoring om te waarborgen dat resources optimaal blijven gedimensioneerd. Door deze discipline te volgen kunnen organisaties aanzienlijke kostenbesparingen realiseren, vaak tussen de 20% en 40% van compute-kosten, terwijl prestaties en beschikbaarheid worden behouden of zelfs verbeterd.

PowerShell Modules Vereist
Primary API: Azure API
Connection: Connect-AzAccount
Required Modules: Az.CostManagement, Az.Compute, Az.Storage, Az.Network, Az.Advisor

Implementatie

Resource rightsizing is een continue discipline die verschillende strategieën en technieken omvat om Azure-resources optimaal te dimensioneren op basis van werkelijke gebruikspatronen en prestatievereisten. De praktijk van rightsizing begint met een grondige analyse van de huidige resourceconfiguraties en gebruikspatronen, waarbij wordt geïdentificeerd welke resources mogelijk overgedimensioneerd zijn, welke resources mogelijk ondergedimensioneerd zijn, en welke resources optimaal zijn gedimensioneerd. Deze analyse vormt de basis voor het identificeren van rightsizing-mogelijkheden en het prioriteren van acties die de grootste impact zullen hebben op zowel kosten als prestaties. Een belangrijk aspect van rightsizing is de analyse van historisch gebruikspatronen voor verschillende resource-typen. Voor virtuele machines betekent dit het analyseren van CPU-gebruik, geheugengebruik, netwerkgebruik en schijf-IO over een representatieve periode, meestal minimaal dertig dagen maar bij voorkeur negentig dagen of langer. Deze analyse helpt organisaties om te begrijpen wat de werkelijke resourcebehoefte is, wat de piekbelastingen zijn, en wat de gemiddelde belasting is. Op basis van deze gegevens kunnen organisaties bepalen of een virtuele machine kan worden verkleind zonder impact op prestaties, of dat een virtuele machine mogelijk moet worden vergroot om prestatieproblemen te voorkomen. Azure Advisor biedt geautomatiseerde rightsizing-aanbevelingen die organisaties helpen om te identificeren wanneer resources kunnen worden verkleind of vergroot. Advisor analyseert automatisch alle virtuele machines binnen een abonnement en biedt aanbevelingen op basis van historisch gebruik, waarbij wordt geanalyseerd of resources over- of ondergedimensioneerd zijn. Deze aanbevelingen zijn geprioriteerd op basis van potentiële kostenbesparing en impact op prestaties, waardoor organisaties kunnen focussen op rightsizing-acties die de grootste waarde opleveren. Advisor biedt ook aanbevelingen voor databases, storage-accounts en andere resource-typen, waardoor organisaties een holistische aanpak kunnen volgen voor rightsizing. Het analyseren van gebruikspatronen vormt een cruciaal onderdeel van effectief rightsizing. Organisaties moeten niet alleen kijken naar gemiddeld gebruik, maar ook naar piekbelastingen, seizoenspatronen, en trends over tijd. Een resource die gemiddeld 30% CPU-gebruik heeft maar regelmatig pieken tot 90% heeft, kan mogelijk niet veilig worden verkleind zonder impact op prestaties tijdens piekperioden. Daarentegen kan een resource die consistent laag gebruik heeft zonder pieken waarschijnlijk veilig worden verkleind. Door deze patronen te analyseren kunnen organisaties weloverwogen beslissingen nemen over rightsizing die zowel kosten besparen als prestaties waarborgen. Het testen van rightsizing-wijzigingen vormt een essentieel onderdeel van het rightsizing-proces. Voordat resources permanent worden verkleind of vergroot, moeten organisaties testen of de nieuwe configuratie voldoende prestaties biedt. Dit kan worden gedaan door resources tijdelijk te verkleinen in een testomgeving, door gebruik te maken van Azure's mogelijkheid om VM-groottes te wijzigen zonder downtime voor bepaalde VM-typen, of door resources te monitoren tijdens een proefperiode voordat wijzigingen permanent worden gemaakt. Door deze tests uit te voeren kunnen organisaties voorkomen dat rightsizing leidt tot prestatieproblemen die de gebruikerservaring negatief beïnvloeden. Het monitoren van de effectiviteit van rightsizing-wijzigingen is essentieel om te waarborgen dat rightsizing daadwerkelijk de beoogde resultaten oplevert. Organisaties moeten regelmatig analyseren of resources die zijn verkleind nog steeds voldoende prestaties bieden, of resources die zijn vergroot daadwerkelijk prestatieproblemen hebben opgelost, en of er nieuwe rightsizing-mogelijkheden zijn ontstaan door veranderende gebruikspatronen. Deze monitoring helpt om te identificeren wanneer rightsizing-wijzigingen moeten worden aangepast of teruggedraaid, en om te leren van eerdere rightsizing-acties om toekomstige rightsizing effectiever te maken. Automatische schaling vormt een complementaire strategie voor rightsizing, waarbij resources automatisch worden geschaald op basis van werkelijke vraag. In plaats van resources permanent groot genoeg te maken voor piekbelastingen, kunnen organisaties automatische schaling configureren die resources automatisch vergroot tijdens perioden van hoge vraag en verkleint tijdens perioden van lage vraag. Deze aanpak combineert de voordelen van rightsizing met de flexibiliteit van automatische schaling, waardoor organisaties kunnen betalen voor alleen de resources die daadwerkelijk worden gebruikt, zonder in te boeten op prestaties tijdens piekperioden.

Vereisten

Voor effectieve resource rightsizing in Azure zijn verschillende vereisten nodig op zowel technisch als organisatorisch vlak. Technisch gezien vereist rightsizing toegang tot Azure Monitor voor het analyseren van resourcegebruik, Azure Advisor voor rightsizing-aanbevelingen, en Azure Cost Management voor kostenanalyses. Organisaties moeten beschikken over gebruikers met de juiste toegangsrechten om resourcegebruik te analyseren, aanbevelingen te bekijken, en rightsizing-maatregelen te implementeren. De rol Reader is minimaal vereist voor het bekijken van resourcegebruik en aanbevelingen, terwijl de rollen Contributor of Owner nodig zijn voor het implementeren van rightsizing-maatregelen zoals het wijzigen van VM-groottes of het configureren van automatische schaling.

Voor geavanceerde rightsizing-analyses zijn Azure Monitor Log Analytics workspaces nodig om gedetailleerde gebruiksgegevens op te slaan en te analyseren. Deze workspaces maken het mogelijk om historische gebruiksgegevens te analyseren over langere perioden, wat essentieel is voor het identificeren van gebruikspatronen en trends. Daarnaast kunnen organisaties profiteren van Azure Cost Management APIs voor geautomatiseerde rightsizing-analyses, wat essentieel is voor organisaties die regelmatig grote aantallen resources moeten analyseren of die geautomatiseerde rightsizing-processen willen implementeren.

Organisatorisch gezien vereist rightsizing een gestructureerde aanpak waarbij verschillende stakeholders betrokken zijn. IT-teams zijn verantwoordelijk voor het technisch analyseren van resourcegebruik en het implementeren van rightsizing-maatregelen, applicatie-eigenaren zijn nodig om te bepalen welke prestatievereisten essentieel zijn en welke mogelijk kunnen worden aangepast, en business-eigenaren zijn betrokken bij het bepalen van de balans tussen kosten en prestaties. Deze samenwerking is essentieel omdat rightsizing niet alleen een technische oefening is, maar ook vereist dat organisaties begrijpen welke prestatievereisten waarde toevoegen aan de business en welke mogelijk kunnen worden geoptimaliseerd zonder impact op bedrijfsprocessen.

Voor effectieve rightsizing moeten organisaties ook beschikken over adequate monitoring en rapportagecapaciteiten. Dit omvat toegang tot Azure Monitor voor resourcegebruik-analyses, Azure Advisor voor rightsizing-aanbevelingen, en mogelijk externe tools voor geavanceerde analyse en rapportage. Organisaties moeten processen hebben voor het regelmatig uitvoeren van rightsizing-analyses, het evalueren van aanbevelingen, en het monitoren van de effectiviteit van genomen rightsizing-maatregelen. Zonder deze capaciteiten kunnen organisaties niet effectief rightsizing uitvoeren omdat zij niet beschikken over de inzichten die nodig zijn om rightsizing-mogelijkheden te identificeren en te prioriteren.

Tot slot vereist rightsizing een commitment van de organisatie om regelmatig tijd en middelen te investeren in het analyseren en optimaliseren van resourceconfiguraties. Dit betekent dat organisaties processen moeten hebben voor regelmatige rightsizing-reviews, waarbij wordt geanalyseerd welke resources mogelijk over- of ondergedimensioneerd zijn, welke rightsizing-mogelijkheden beschikbaar zijn, en welke maatregelen moeten worden genomen. Zonder deze commitment zal rightsizing niet effectief zijn omdat het een continue discipline is die regelmatige aandacht vereist, niet een eenmalige oefening die kan worden uitgevoerd en vervolgens vergeten.

Implementatie

Gebruik PowerShell-script resource-rightsizing.ps1 (functie Invoke-Implementation) – Implementeert resource rightsizing-strategieën.

De implementatie van resource rightsizing begint met een grondige analyse van de huidige resourceconfiguraties en gebruikspatronen. Organisaties moeten beginnen met het raadplegen van Azure Advisor voor rightsizing-aanbevelingen, die automatisch worden gegenereerd op basis van historisch gebruik. Advisor analyseert alle virtuele machines binnen een abonnement en biedt aanbevelingen voor het verkleinen of vergroten van resources op basis van werkelijke gebruikspatronen. Deze aanbevelingen zijn geprioriteerd op basis van potentiële kostenbesparing en impact op prestaties, waardoor organisaties kunnen focussen op rightsizing-acties die de grootste waarde opleveren.

Na het raadplegen van Advisor-aanbevelingen moeten organisaties gedetailleerde analyses uitvoeren van resourcegebruik via Azure Monitor. Deze analyses moeten zich richten op het identificeren van gebruikspatronen over een representatieve periode, meestal minimaal dertig dagen maar bij voorkeur negentig dagen of langer. Voor virtuele machines betekent dit het analyseren van CPU-gebruik, geheugengebruik, netwerkgebruik en schijf-IO, waarbij wordt gekeken naar gemiddeld gebruik, piekbelastingen, en trends over tijd. Deze analyse helpt organisaties om te begrijpen wat de werkelijke resourcebehoefte is en of resources kunnen worden verkleind zonder impact op prestaties.

Het prioriteren van rightsizing-acties is essentieel om te waarborgen dat de grootste impact wordt gerealiseerd met beperkte middelen. Organisaties moeten beginnen met resources die de hoogste kosten genereren en de grootste potentiële besparing opleveren, waarbij wordt geanalyseerd of deze resources kunnen worden verkleind zonder impact op prestaties. Daarnaast moeten organisaties rekening houden met de impact van rightsizing op bedrijfsprocessen, waarbij kritieke workloads mogelijk voorzichtiger moeten worden benaderd dan minder kritieke workloads. Door deze prioritering kunnen organisaties ervoor zorgen dat rightsizing-acties de grootste waarde opleveren terwijl risico's worden geminimaliseerd.

Het testen van rightsizing-wijzigingen vormt een essentieel onderdeel van het implementatieproces. Voordat resources permanent worden verkleind of vergroot, moeten organisaties testen of de nieuwe configuratie voldoende prestaties biedt. Voor virtuele machines die ondersteuning bieden voor het wijzigen van grootte zonder downtime, kan dit worden gedaan door de VM-grootte tijdelijk te wijzigen en de prestaties te monitoren. Voor resources die niet ondersteunen voor het wijzigen van grootte zonder downtime, moeten organisaties nieuwe resources creëren met de gewenste grootte, workloads migreren, en de prestaties testen voordat oude resources worden verwijderd. Door deze tests uit te voeren kunnen organisaties voorkomen dat rightsizing leidt tot prestatieproblemen.

Het implementeren van automatische schaling vormt een complementaire strategie voor rightsizing die organisaties helpt om resources automatisch te schalen op basis van werkelijke vraag. In plaats van resources permanent groot genoeg te maken voor piekbelastingen, kunnen organisaties automatische schaling configureren die resources automatisch vergroot tijdens perioden van hoge vraag en verkleint tijdens perioden van lage vraag. Azure biedt verschillende opties voor automatische schaling, waaronder VM Scale Sets voor virtuele machines, App Service autoscaling voor webapplicaties, en automatische schaling voor databases en andere services. Wanneer autoscaling wordt geconfigureerd, moeten organisaties regelmatig monitoren of de schaling correct functioneert en of de configuratie nog steeds geschikt is voor de werkelijke vraag.

Het documenteren van rightsizing-beslissingen en resultaten is essentieel voor het waarborgen van transparantie en het leren van eerdere rightsizing-acties. Organisaties moeten documenteren welke resources zijn geanalyseerd, welke rightsizing-mogelijkheden zijn geïdentificeerd, welke beslissingen zijn genomen en waarom, en wat de resultaten zijn van genomen rightsizing-maatregelen. Deze documentatie helpt om te waarborgen dat rightsizing-beslissingen kunnen worden gereviewed en geaudit, en dat organisaties kunnen leren van eerdere rightsizing-acties om toekomstige rightsizing effectiever te maken.

Het monitoren van de effectiviteit van rightsizing-wijzigingen vormt een essentieel onderdeel van continue rightsizing. Organisaties moeten regelmatig analyseren of resources die zijn verkleind nog steeds voldoende prestaties bieden, of resources die zijn vergroot daadwerkelijk prestatieproblemen hebben opgelost, en of er nieuwe rightsizing-mogelijkheden zijn ontstaan door veranderende gebruikspatronen. Deze monitoring moet worden gedocumenteerd en gedeeld met relevante stakeholders, zodat alle betrokken partijen inzicht hebben in de effectiviteit van rightsizing en nieuwe rightsizing-mogelijkheden kunnen worden geïdentificeerd.

Monitoring

Gebruik PowerShell-script resource-rightsizing.ps1 (functie Invoke-Monitoring) – Controleert resource rightsizing-status en identificeert rightsizing-mogelijkheden.

Effectieve monitoring van resource rightsizing vereist een gestructureerde aanpak waarbij verschillende aspecten van resourcegebruik en configuratie regelmatig worden geëvalueerd. Het centrale instrument voor deze monitoring is Azure Monitor, dat uitgebreide tools biedt voor het analyseren van resourcegebruik, trends en patronen. Organisaties moeten wekelijks gebruik maken van deze tools om te waarborgen dat zij volledig inzicht hebben in hun resourcegebruik en dat zij proactief kunnen reageren op veranderende gebruikspatronen of nieuwe rightsizing-mogelijkheden.

Wekelijks moeten rightsizing-reviews worden uitgevoerd waarbij resourcegebruik wordt geanalyseerd, trends worden geëvalueerd, en nieuwe rightsizing-mogelijkheden worden geïdentificeerd. Tijdens deze reviews wordt geanalyseerd of resources mogelijk over- of ondergedimensioneerd zijn op basis van werkelijke gebruikspatronen, of er significante veranderingen zijn opgetreden in gebruikspatronen die rightsizing-acties vereisen, en of resources die recent zijn gerightsized nog steeds optimaal zijn gedimensioneerd. Deze wekelijkse reviews vormen de basis voor proactief rightsizing en helpen organisaties om vroegtijdig problemen te identificeren voordat ze leiden tot aanzienlijke kostenverspilling of prestatieproblemen.

Azure Advisor moet maandelijks worden geraadpleegd voor nieuwe rightsizing-aanbevelingen. Advisor analyseert automatisch alle resources en biedt aanbevelingen voor het verkleinen of vergroten van resources op basis van historisch gebruik. Organisaties moeten deze aanbevelingen regelmatig reviewen en prioriteren op basis van potentiële kostenbesparing en impact op prestaties. Wanneer aanbevelingen worden geïmplementeerd, moet worden gemonitord of de verwachte kostenbesparingen worden gerealiseerd en of er geen onbedoelde gevolgen zijn voor prestaties of functionaliteit.

Het monitoren van de effectiviteit van genomen rightsizing-maatregelen is essentieel om te waarborgen dat rightsizing daadwerkelijk de beoogde resultaten oplevert. Organisaties moeten regelmatig analyseren of resources die zijn verkleind nog steeds voldoende prestaties bieden, of resources die zijn vergroot daadwerkelijk prestatieproblemen hebben opgelost, en of er nieuwe rightsizing-mogelijkheden zijn ontstaan door veranderende gebruikspatronen. Deze monitoring helpt om te identificeren wanneer rightsizing-wijzigingen moeten worden aangepast of teruggedraaid, en om te leren van eerdere rightsizing-acties om toekomstige rightsizing effectiever te maken.

Het monitoren van gebruikspatronen helpt organisaties om te identificeren wanneer resources mogelijk over- of ondergedimensioneerd zijn of wanneer automatische schaling moet worden geconfigureerd. Organisaties moeten regelmatig analyseren of virtuele machines, databases en andere resources daadwerkelijk de geconfigureerde capaciteit gebruiken, of dat resources kunnen worden verkleind zonder impact op prestaties. Daarnaast moet worden geanalyseerd of services geschikt zijn voor automatische schaling, waarbij resources automatisch worden geschaald op basis van werkelijke vraag. Deze monitoring helpt om te waarborgen dat organisaties alleen betalen voor resources die daadwerkelijk worden gebruikt, zonder in te boeten op prestaties of beschikbaarheid.

Het monitoren van kostenimpact van rightsizing vormt een cruciaal onderdeel van zowel kostenbeheer als rightsizing-effectiviteit. Organisaties moeten regelmatig analyseren of rightsizing-acties daadwerkelijk kostenbesparingen opleveren, of er onbedoelde kostenstijgingen zijn opgetreden als gevolg van rightsizing, en of de kostenimpact van rightsizing overeenkomt met verwachtingen. Deze monitoring moet worden gedocumenteerd en gedeeld met relevante stakeholders, zodat alle betrokken partijen inzicht hebben in de kostenimpact van rightsizing en gefundeerde beslissingen kunnen nemen over toekomstige rightsizing-acties.

Compliance en Naleving

Compliance en auditing vormen een essentieel onderdeel van effectief resource rightsizing in Azure. Organisaties moeten kunnen aantonen dat zij hun resources adequaat analyseren en optimaliseren op basis van werkelijke gebruikspatronen, zowel voor interne governance als voor externe audits. Rightsizing is niet alleen een technische oefening, maar ook een verantwoordelijkheid die voortvloeit uit het efficiënt beheren van publieke middelen en het waarborgen van optimale prestaties tegen minimale kosten.

Voor Nederlandse overheidsorganisaties zijn er specifieke compliancevereisten die voortvloeien uit de Algemene Rekenkamer en de Wet openbaarheid van bestuur. Organisaties moeten kunnen aantonen dat zij hun publieke middelen verantwoord besteden en dat er adequate controles zijn om verspilling te voorkomen. Rightsizing helpt hierbij door te waarborgen dat organisaties alleen betalen voor resources die daadwerkelijk nodig zijn en dat resources optimaal zijn gedimensioneerd op basis van werkelijke gebruikspatronen. Tijdens audits moeten organisaties kunnen laten zien dat zij proactief resourcegebruik monitoren en analyseren, dat rightsizing-maatregelen worden gedocumenteerd en geëvalueerd, en dat er procedures zijn voor het reageren op veranderende gebruikspatronen of prestatieproblemen.

ISO 27001 is een internationale standaard voor informatiebeveiligingsmanagement die ook eisen stelt aan resourcebeheer en optimalisatie. Binnen de context van Azure resourcebeheer betekent dit dat organisaties moeten kunnen aantonen dat zij hun resources adequaat monitoren, dat resources worden geoptimaliseerd volgens vastgestelde procedures, en dat er controles zijn om inefficiënt resourcegebruik te voorkomen. Voor ISO 27001-naleving moeten organisaties documenteren hoe rightsizing wordt uitgevoerd, wie verantwoordelijk is voor resourcebeheer, en hoe rightsizing-maatregelen worden geëvalueerd en gemonitord.

FinOps, of financieel beheer, is een best practice framework dat financiële verantwoordelijkheid en transparantie combineert met technische expertise. Het doel van FinOps is om organisaties te helpen hun cloudkosten te optimaliseren door middel van continue monitoring, analyse en optimalisatie. Binnen de context van rightsizing betekent dit dat organisaties een gestructureerde aanpak moeten volgen waarbij resourceverantwoordelijkheid wordt gecreëerd op het juiste niveau, waarbij resourcegebruik regelmatig wordt geanalyseerd en geëvalueerd, en waarbij trends en anomalieën worden geïdentificeerd en onderzocht. Organisaties die FinOps-principes volgen moeten kunnen aantonen dat zij een gestructureerd proces hebben voor rightsizing, dat verschillende stakeholders betrokken zijn bij resourcebeheer, en dat er regelmatige reviews en evaluaties plaatsvinden.

Auditing van rightsizing moet regelmatig plaatsvinden, minimaal maandelijks, waarbij wordt gecontroleerd of rightsizing regelmatig wordt uitgevoerd, of Azure Advisor aanbevelingen worden geïmplementeerd, en of genomen rightsizing-maatregelen effectief zijn. Tijdens audits moet worden geverifieerd dat rightsizing daadwerkelijk wordt uitgevoerd, dat rightsizing-maatregelen worden gedocumenteerd, en dat er procedures zijn voor het evalueren van de effectiviteit van rightsizing. Daarnaast moet worden gecontroleerd of er adequate documentatie is van resourceanalyses, geïdentificeerde rightsizing-mogelijkheden, genomen maatregelen en resultaten, en of wijzigingen worden gelogd voor auditdoeleinden.

Remediatie

Gebruik PowerShell-script resource-rightsizing.ps1 (functie Invoke-Remediation) – Implementeert resource rightsizing-maatregelen op basis van aanbevelingen.

Wanneer resource rightsizing niet wordt uitgevoerd of niet effectief is, vormt dit een directe bedreiging voor zowel de financiële gezondheid als de prestatie van de organisatie. Remediatie moet onmiddellijk worden gestart zodra wordt vastgesteld dat rightsizing ontbreekt of niet effectief wordt uitgevoerd. Het remediatieproces begint met een grondige analyse van de huidige resourceconfiguraties en gebruikspatronen om te identificeren waar de grootste rightsizing-mogelijkheden liggen en welke rightsizing-maatregelen de hoogste prioriteit hebben.

Het remediatieproces begint met het raadplegen van Azure Advisor voor rightsizing-aanbevelingen. Advisor analyseert automatisch alle resources en biedt aanbevelingen voor het verkleinen of vergroten van resources op basis van historisch gebruik. Organisaties moeten deze aanbevelingen prioriteren op basis van potentiële kostenbesparing en impact op prestaties, waarbij wordt begonnen met aanbevelingen die de grootste kostenbesparing opleveren en de minste impact hebben op bedrijfsprocessen.

Vervolgens moeten organisaties een gestructureerd proces implementeren voor het regelmatig uitvoeren van rightsizing-analyses en het identificeren van rightsizing-mogelijkheden. Dit omvat het wekelijks uitvoeren van rightsizing-reviews waarbij resourcegebruik wordt geanalyseerd, trends worden geëvalueerd, en nieuwe rightsizing-mogelijkheden worden geïdentificeerd. Organisaties moeten processen hebben voor het documenteren van geïdentificeerde rightsizing-mogelijkheden, het prioriteren van acties, en het monitoren van de effectiviteit van genomen maatregelen. Door dit proces te structureren kunnen organisaties ervoor zorgen dat rightsizing daadwerkelijk wordt uitgevoerd en dat rightsizing-mogelijkheden niet worden gemist.

Het implementeren van automatische schaling kan helpen om rightsizing te complementeren en te waarborgen dat resources automatisch worden geschaald op basis van werkelijke vraag. Dit omvat het configureren van VM Scale Sets voor automatische schaling van virtuele machines, App Service autoscaling voor webapplicaties, en automatische schaling voor databases en andere services. Door deze processen te automatiseren kunnen organisaties ervoor zorgen dat resources optimaal worden gedimensioneerd zonder dat handmatige interventie vereist is voor elke schaling.

Het trainen van medewerkers in rightsizing is essentieel om te waarborgen dat alle relevante personen de kennis en vaardigheden hebben om effectief rightsizing uit te voeren. Training moet zowel de technische aspecten van rightsizing omvatten, zoals het gebruik van Azure Monitor en Azure Advisor, als de interpretatie van resourcegebruik-analyses en het identificeren van rightsizing-mogelijkheden. Daarnaast moeten medewerkers worden getraind in FinOps-principes en best practices voor resourcebeheer, zodat zij begrijpen hoe rightsizing past binnen een bredere strategie voor kostenbeheer. Door adequate training te bieden kunnen organisaties ervoor zorgen dat rightsizing effectief wordt uitgevoerd en dat alle relevante personen de tools en kennis hebben die nodig zijn voor effectief resourcebeheer.

Compliance & Frameworks

Automation

Gebruik het onderstaande PowerShell script om deze security control te monitoren en te implementeren. Het script bevat functies voor zowel monitoring (-Monitoring) als remediation (-Remediation).

PowerShell
<# ================================================================================ AZURE POWERSHELL SCRIPT - Nederlandse Baseline voor Veilige Cloud ================================================================================ .SYNOPSIS Azure Resource Rightsizing .DESCRIPTION Helpt bij het identificeren en implementeren van resource rightsizing-strategieën in Azure om resources optimaal te dimensioneren op basis van werkelijke gebruikspatronen. .NOTES Filename: resource-rightsizing.ps1 Author: Nederlandse Baseline voor Veilige Cloud Version: 1.0 Related JSON: content/azure/cost-management/resource-rightsizing.json #> #Requires -Version 5.1 #Requires -Modules Az.Accounts, Az.CostManagement, Az.Advisor, Az.Compute, Az.Monitor [CmdletBinding()] param( [Parameter()] [switch]$Monitoring, [Parameter()] [switch]$Remediation, [Parameter()] [switch]$Revert, [Parameter()] [switch]$WhatIf ) $ErrorActionPreference = 'Stop' $script:PolicyName = "Azure Resource Rightsizing" # ============================================================================ # FUNCTIONS # ============================================================================ function Connect-RequiredServices { <# .SYNOPSIS Maakt verbinding met benodigde Azure-services #> try { if (-not (Get-AzContext)) { Write-Host "Verbinden met Azure..." -ForegroundColor Cyan Connect-AzAccount | Out-Null } $context = Get-AzContext Write-Host "Verbonden met: $($context.Account.Id) - Subscription: $($context.Subscription.Name)" -ForegroundColor Green } catch { Write-Error "Kan geen verbinding maken met Azure: $_" throw } } function Get-RightsizingRecommendations { <# .SYNOPSIS Haalt rightsizing-aanbevelingen op van Azure Advisor #> try { $subscriptions = Get-AzSubscription -ErrorAction SilentlyContinue $allRecommendations = @() foreach ($sub in $subscriptions) { Set-AzContext -SubscriptionId $sub.Id | Out-Null try { $recommendations = Get-AzAdvisorRecommendation -CategoryId "Cost" -ErrorAction SilentlyContinue foreach ($rec in $recommendations) { if ($rec.ShortDescription -like "*rightsize*" -or $rec.ShortDescription -like "*resize*" -or $rec.ShortDescription -like "*downsize*" -or $rec.ShortDescription -like "*upsize*") { $allRecommendations += @{ SubscriptionName = $sub.Name SubscriptionId = $sub.Id RecommendationName = $rec.Name Category = $rec.Category Impact = $rec.Impact ShortDescription = $rec.ShortDescription ResourceId = $rec.ResourceId } } } } catch { Write-Warning "Kan aanbevelingen niet ophalen voor abonnement $($sub.Name): $_" } } return $allRecommendations } catch { Write-Warning "Fout bij ophalen van aanbevelingen: $_" return @() } } function Get-VMResourceUsage { <# .SYNOPSIS Analyseert resourcegebruik van virtuele machines #> try { $subscriptions = Get-AzSubscription -ErrorAction SilentlyContinue $vmUsageData = @() foreach ($sub in $subscriptions) { Set-AzContext -SubscriptionId $sub.Id | Out-Null try { $vms = Get-AzVM -ErrorAction SilentlyContinue foreach ($vm in $vms) { $resourceId = $vm.Id $resourceGroup = $vm.ResourceGroupName # Haal metrische gegevens op voor de laatste 30 dagen $endTime = Get-Date $startTime = $endTime.AddDays(-30) try { # CPU-gebruik $cpuMetrics = Get-AzMetric -ResourceId $resourceId ` -MetricName "Percentage CPU" ` -StartTime $startTime ` -EndTime $endTime ` -AggregationType Average ` -ErrorAction SilentlyContinue $avgCpu = if ($cpuMetrics.Data) { ($cpuMetrics.Data | Measure-Object -Property Average -Average).Average } else { $null } $maxCpu = if ($cpuMetrics.Data) { ($cpuMetrics.Data | Measure-Object -Property Maximum -Maximum).Maximum } else { $null } # Geheugengebruik (indien beschikbaar) $memoryMetrics = Get-AzMetric -ResourceId $resourceId ` -MetricName "Available Memory Bytes" ` -StartTime $startTime ` -EndTime $endTime ` -AggregationType Average ` -ErrorAction SilentlyContinue $vmUsageData += @{ SubscriptionName = $sub.Name ResourceGroup = $resourceGroup VMName = $vm.Name VMSize = $vm.HardwareProfile.VmSize Location = $vm.Location AverageCPU = [math]::Round($avgCpu, 2) MaximumCPU = [math]::Round($maxCpu, 2) Status = if ($vm.PowerState -eq "VM running") { "Running" } else { "Stopped" } } } catch { Write-Warning "Kan metrische gegevens niet ophalen voor VM $($vm.Name): $_" } } } catch { Write-Warning "Kan VMs niet ophalen voor abonnement $($sub.Name): $_" } } return $vmUsageData } catch { Write-Warning "Fout bij analyseren van VM-gebruik: $_" return @() } } function Get-OverSizedResources { <# .SYNOPSIS Identificeert mogelijk overgedimensioneerde resources #> try { $vmUsage = Get-VMResourceUsage $overSized = @() foreach ($vm in $vmUsage) { # Identificeer VMs met laag gemiddeld CPU-gebruik (< 20%) als mogelijk overgedimensioneerd if ($vm.AverageCPU -ne $null -and $vm.AverageCPU -lt 20 -and $vm.Status -eq "Running") { $overSized += @{ SubscriptionName = $vm.SubscriptionName ResourceType = "Virtual Machine" ResourceName = $vm.VMName ResourceGroup = $vm.ResourceGroup CurrentSize = $vm.VMSize AverageCPU = $vm.AverageCPU MaximumCPU = $vm.MaximumCPU Recommendation = "Overweeg verkleining - laag gemiddeld CPU-gebruik" } } } return $overSized } catch { Write-Warning "Fout bij identificeren van overgedimensioneerde resources: $_" return @() } } function Get-UnderSizedResources { <# .SYNOPSIS Identificeert mogelijk ondergedimensioneerde resources #> try { $vmUsage = Get-VMResourceUsage $underSized = @() foreach ($vm in $vmUsage) { # Identificeer VMs met hoog gemiddeld CPU-gebruik (> 80%) als mogelijk ondergedimensioneerd if ($vm.AverageCPU -ne $null -and $vm.AverageCPU -gt 80 -and $vm.Status -eq "Running") { $underSized += @{ SubscriptionName = $vm.SubscriptionName ResourceType = "Virtual Machine" ResourceName = $vm.VMName ResourceGroup = $vm.ResourceGroup CurrentSize = $vm.VMSize AverageCPU = $vm.AverageCPU MaximumCPU = $vm.MaximumCPU Recommendation = "Overweeg vergroting - hoog gemiddeld CPU-gebruik" } } } return $underSized } catch { Write-Warning "Fout bij identificeren van ondergedimensioneerde resources: $_" return @() } } # ============================================================================ # STANDARD FUNCTIONS # ============================================================================ function Invoke-Implementation { <# .SYNOPSIS Implementeert resource rightsizing-strategieën #> [CmdletBinding()] param() Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "$script:PolicyName - Implementatie" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Invoke-Remediation } function Invoke-Monitoring { <# .SYNOPSIS Controleert resource rightsizing-status en identificeert rightsizing-mogelijkheden #> [CmdletBinding()] param() Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "$script:PolicyName" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan try { Connect-RequiredServices Write-Host "`nResource rightsizing-analyse..." -ForegroundColor Yellow # Haal rightsizing-aanbevelingen op Write-Host "`nAzure Advisor rightsizing-aanbevelingen:" -ForegroundColor Yellow $recommendations = Get-RightsizingRecommendations if ($recommendations.Count -gt 0) { Write-Host " Totaal aantal rightsizing-aanbevelingen: $($recommendations.Count)" -ForegroundColor Cyan $byImpact = $recommendations | Group-Object -Property Impact foreach ($group in $byImpact) { Write-Host " $($group.Name): $($group.Count) aanbevelingen" -ForegroundColor $(if ($group.Name -eq "High") { "Red" } elseif ($group.Name -eq "Medium") { "Yellow" } else { "Green" }) } Write-Host "`n Top 5 aanbevelingen:" -ForegroundColor Cyan $topRecs = $recommendations | Select-Object -First 5 foreach ($rec in $topRecs) { Write-Host " - $($rec.ShortDescription)" -ForegroundColor Gray Write-Host " Impact: $($rec.Impact) | Abonnement: $($rec.SubscriptionName)" -ForegroundColor DarkGray } } else { Write-Host " Geen rightsizing-aanbevelingen gevonden" -ForegroundColor Green } # Analyseer VM-gebruik Write-Host "`nVM resourcegebruik-analyse (laatste 30 dagen):" -ForegroundColor Yellow $vmUsage = Get-VMResourceUsage if ($vmUsage.Count -gt 0) { Write-Host " Totaal aantal VMs geanalyseerd: $($vmUsage.Count)" -ForegroundColor Cyan # Overgedimensioneerde resources Write-Host "`n Overgedimensioneerde resources (gemiddeld CPU < 20%):" -ForegroundColor Yellow $overSized = Get-OverSizedResources if ($overSized.Count -gt 0) { Write-Host " Totaal: $($overSized.Count) resources" -ForegroundColor Cyan $examples = $overSized | Select-Object -First 3 foreach ($res in $examples) { Write-Host " - $($res.ResourceName) ($($res.CurrentSize))" -ForegroundColor Gray Write-Host " Gemiddeld CPU: $($res.AverageCPU)% | Max CPU: $($res.MaximumCPU)%" -ForegroundColor DarkGray Write-Host " $($res.Recommendation)" -ForegroundColor DarkGray } } else { Write-Host " Geen overgedimensioneerde resources gevonden" -ForegroundColor Green } # Ondergedimensioneerde resources Write-Host "`n Ondergedimensioneerde resources (gemiddeld CPU > 80%):" -ForegroundColor Yellow $underSized = Get-UnderSizedResources if ($underSized.Count -gt 0) { Write-Host " Totaal: $($underSized.Count) resources" -ForegroundColor Cyan $examples = $underSized | Select-Object -First 3 foreach ($res in $examples) { Write-Host " - $($res.ResourceName) ($($res.CurrentSize))" -ForegroundColor Gray Write-Host " Gemiddeld CPU: $($res.AverageCPU)% | Max CPU: $($res.MaximumCPU)%" -ForegroundColor DarkGray Write-Host " $($res.Recommendation)" -ForegroundColor DarkGray } } else { Write-Host " Geen ondergedimensioneerde resources gevonden" -ForegroundColor Green } } else { Write-Host " Geen VM-gebruiksgegevens beschikbaar" -ForegroundColor Yellow } # Aanbevelingen Write-Host "`nAanbevolen acties:" -ForegroundColor Yellow Write-Host " 1. Review Azure Advisor rightsizing-aanbevelingen regelmatig" -ForegroundColor Gray Write-Host " 2. Analyseer resourcegebruik over minimaal 30 dagen" -ForegroundColor Gray Write-Host " 3. Test rightsizing-wijzigingen voordat u permanent toepast" -ForegroundColor Gray Write-Host " 4. Overweeg automatische schaling voor variabele workloads" -ForegroundColor Gray Write-Host " 5. Monitor prestaties na rightsizing-wijzigingen" -ForegroundColor Gray Write-Host " 6. Documenteer rightsizing-beslissingen en resultaten" -ForegroundColor Gray Write-Host " 7. Voer maandelijks rightsizing-reviews uit" -ForegroundColor Gray Write-Host "`nSTATUS: MONITORING VOLTOOID" -ForegroundColor Green Write-Host "Gebruik -Remediation om rightsizing-maatregelen te implementeren." -ForegroundColor Cyan exit 0 } catch { Write-Host "`nERROR: $_" -ForegroundColor Red exit 2 } } function Invoke-Remediation { <# .SYNOPSIS Implementeert resource rightsizing-maatregelen op basis van aanbevelingen #> [CmdletBinding()] param() Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "$script:PolicyName - Remediatie" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan try { Connect-RequiredServices Write-Host "`nResource rightsizing implementatie..." -ForegroundColor Yellow # Haal aanbevelingen en analyses op $recommendations = Get-RightsizingRecommendations $overSized = Get-OverSizedResources $underSized = Get-UnderSizedResources Write-Host "`nGevonden rightsizing-mogelijkheden:" -ForegroundColor Cyan Write-Host " - Azure Advisor aanbevelingen: $($recommendations.Count)" -ForegroundColor Gray Write-Host " - Overgedimensioneerde resources: $($overSized.Count)" -ForegroundColor Gray Write-Host " - Ondergedimensioneerde resources: $($underSized.Count)" -ForegroundColor Gray if ($recommendations.Count -eq 0 -and $overSized.Count -eq 0 -and $underSized.Count -eq 0) { Write-Host "`nGeen directe rightsizing-mogelijkheden gevonden." -ForegroundColor Green Write-Host "Continue monitoring wordt aanbevolen voor nieuwe mogelijkheden." -ForegroundColor Cyan exit 0 } Write-Host "`nBELANGRIJK: Resource rightsizing vereist handmatige review en goedkeuring." -ForegroundColor Yellow Write-Host "Dit script identificeert mogelijkheden maar voert geen automatische wijzigingen uit." -ForegroundColor Yellow Write-Host "`nAanbevolen stappen:" -ForegroundColor Yellow if ($recommendations.Count -gt 0) { Write-Host "`n1. Review Azure Advisor rightsizing-aanbevelingen:" -ForegroundColor Cyan Write-Host " - Open Azure Portal > Advisor > Cost recommendations" -ForegroundColor Gray Write-Host " - Prioriteer aanbevelingen met hoge impact" -ForegroundColor Gray Write-Host " - Implementeer aanbevelingen na business review" -ForegroundColor Gray $highImpact = $recommendations | Where-Object { $_.Impact -eq "High" } if ($highImpact.Count -gt 0) { Write-Host "`n Top prioriteit aanbevelingen (High Impact):" -ForegroundColor Yellow foreach ($rec in $highImpact | Select-Object -First 5) { Write-Host " - $($rec.ShortDescription)" -ForegroundColor Gray Write-Host " Abonnement: $($rec.SubscriptionName)" -ForegroundColor DarkGray } } } if ($overSized.Count -gt 0) { Write-Host "`n2. Review overgedimensioneerde resources:" -ForegroundColor Cyan Write-Host " - Analyseer gebruikspatronen over minimaal 30 dagen" -ForegroundColor Gray Write-Host " - Verifieer dat resources veilig kunnen worden verkleind" -ForegroundColor Gray Write-Host " - Test verkleining in testomgeving indien mogelijk" -ForegroundColor Gray Write-Host " - Monitor prestaties na verkleining" -ForegroundColor Gray Write-Host "`n Overgedimensioneerde resources (top 5):" -ForegroundColor Yellow foreach ($res in $overSized | Select-Object -First 5) { Write-Host " - $($res.ResourceName) ($($res.CurrentSize))" -ForegroundColor Gray Write-Host " Gemiddeld CPU: $($res.AverageCPU)%" -ForegroundColor DarkGray } } if ($underSized.Count -gt 0) { Write-Host "`n3. Review ondergedimensioneerde resources:" -ForegroundColor Cyan Write-Host " - Analyseer prestatieproblemen" -ForegroundColor Gray Write-Host " - Overweeg vergroting of automatische schaling" -ForegroundColor Gray Write-Host " - Test vergroting voordat u permanent toepast" -ForegroundColor Gray Write-Host "`n Ondergedimensioneerde resources (top 5):" -ForegroundColor Yellow foreach ($res in $underSized | Select-Object -First 5) { Write-Host " - $($res.ResourceName) ($($res.CurrentSize))" -ForegroundColor Gray Write-Host " Gemiddeld CPU: $($res.AverageCPU)%" -ForegroundColor DarkGray } } Write-Host "`n4. Overweeg automatische schaling:" -ForegroundColor Cyan Write-Host " - Configureer VM Scale Sets voor automatische schaling" -ForegroundColor Gray Write-Host " - Configureer App Service autoscaling" -ForegroundColor Gray Write-Host " - Analyseer gebruikspatronen voor schaalbaarheid" -ForegroundColor Gray Write-Host "`n5. Documenteer rightsizing-beslissingen:" -ForegroundColor Cyan Write-Host " - Documenteer geanalyseerde resources" -ForegroundColor Gray Write-Host " - Documenteer genomen beslissingen en redenen" -ForegroundColor Gray Write-Host " - Documenteer resultaten van rightsizing-maatregelen" -ForegroundColor Gray Write-Host "`n6. Implementeer continue monitoring:" -ForegroundColor Cyan Write-Host " - Voer wekelijkse rightsizing-reviews uit" -ForegroundColor Gray Write-Host " - Monitor Azure Advisor regelmatig" -ForegroundColor Gray Write-Host " - Analyseer resourcegebruik trends" -ForegroundColor Gray Write-Host "`nRemediatie voltooid. Gebruik -Monitoring om status te controleren." -ForegroundColor Green Write-Host "`nVoor gedetailleerde implementatie, raadpleeg Azure Portal en Azure Advisor." -ForegroundColor Cyan exit 0 } catch { Write-Host "`nERROR: $_" -ForegroundColor Red exit 2 } } function Invoke-Revert { <# .SYNOPSIS Keert rightsizing-maatregelen terug (indien mogelijk) #> [CmdletBinding()] param() Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "$script:PolicyName - Revert" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host "`nResource rightsizing kan niet automatisch worden teruggedraaid." -ForegroundColor Yellow Write-Host "Rightsizing-maatregelen moeten handmatig worden geëvalueerd en teruggedraaid indien nodig." -ForegroundColor Yellow Write-Host "`nAls u rightsizing-wijzigingen wilt terugdraaien:" -ForegroundColor Cyan Write-Host " - Review genomen rightsizing-maatregelen in Azure Portal" -ForegroundColor Gray Write-Host " - Evalueer impact van terugdraaien op kosten en prestaties" -ForegroundColor Gray Write-Host " - Implementeer wijzigingen handmatig via Azure Portal of PowerShell" -ForegroundColor Gray exit 0 } # ============================================================================ # MAIN EXECUTION # ============================================================================ try { if ($Revert) { Invoke-Revert } elseif ($Monitoring) { Invoke-Monitoring } elseif ($Remediation) { Invoke-Remediation } else { Write-Host "`nGebruik: -Monitoring | -Remediation | -Revert" -ForegroundColor Yellow Write-Host "`nVoorbeelden:" -ForegroundColor Cyan Write-Host " .\resource-rightsizing.ps1 -Monitoring" -ForegroundColor Gray Write-Host " .\resource-rightsizing.ps1 -Remediation" -ForegroundColor Gray } } catch { Write-Host "`nFATAL ERROR: $_" -ForegroundColor Red exit 2 } finally { Write-Host "`n========================================" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
Low: Zonder systematische rightsizing lopen organisaties het risico om aanzienlijk meer te betalen dan nodig is voor hun cloudresources. Het ontbreken van een gestructureerde aanpak leidt tot verspilling van publieke middelen, waarbij resources onnodig groot worden ingericht op basis van conservatieve schattingen of piekbelastingen die zelden voorkomen. Deze overdimensionering resulteert in permanente kostenverspilling. Daarnaast kan overdimensionering leiden tot inefficiënt resourcegebruik dat de algehele cloudarchitectuur negatief beïnvloedt. Onderdimensionering vormt eveneens een risico wanneer organisaties resources te klein inrichten, wat kan leiden tot prestatieproblemen en downtime. Het risico wordt geclassificeerd als laag tot medium vanuit beveiligingsperspectief, maar hoog vanuit financieel en prestatieperspectief.

Management Samenvatting

Resource rightsizing is een continue discipline die verschillende strategieën omvat om Azure-resources optimaal te dimensioneren op basis van werkelijke gebruikspatronen. De praktijk omvat regelmatige analyse van resourcegebruik, identificatie van over- en ondergedimensioneerde resources, implementatie van rightsizing-maatregelen, en continue monitoring. Organisaties moeten wekelijks rightsizing-reviews uitvoeren, Azure Advisor aanbevelingen implementeren, en de effectiviteit van genomen maatregelen monitoren. Rightsizing vormt de basis voor effectief kostenbeheer en optimale prestaties in de cloud.