From 9e5edd9b193fc3cf8b82b2a8ca5e26ce8a78976b Mon Sep 17 00:00:00 2001 From: Michael Flanakin Date: Thu, 3 Apr 2025 10:37:46 -0700 Subject: [PATCH 1/6] Track hubs deployment options --- src/templates/finops-hub/modules/hub.bicep | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/templates/finops-hub/modules/hub.bicep b/src/templates/finops-hub/modules/hub.bicep index 45764b679..44e0905dc 100644 --- a/src/templates/finops-hub/modules/hub.bicep +++ b/src/templates/finops-hub/modules/hub.bicep @@ -204,8 +204,23 @@ var safeScriptSubnetId = enablePublicAccess ? '' : vnet.outputs.scriptSubnetId // } // var finalEventGridLocation = eventGridLocation != null && !empty(eventGridLocation) ? eventGridLocation : (eventGridLocationFallback[?location] ?? location) -// The last segment of the telemetryId is used to identify this module -var telemetryId = '00f120b5-2007-6120-0000-40b000000000' +// The last segment of the GUID in the telemetryId (40b) is used to identify this module +// Remaining characters identify settings; must be <= 12 chars -- Example: (guid)_RLXD##x1000P +var telemetryId = join([ + '00f120b5-2007-6120-0000-40b000000000_' + // R = remote hubs enabled + empty(remoteHubStorageUri) || empty(remoteHubStorageKey) ? '' : 'R' + // L = LRS, Z = ZRS + substring(split(storageSku, '_')[1], 0, 1) + // X = ADX enabled + D (dev) or S (standard) SKU + empty(dataExplorerName) ? '' : 'X${substring(dataExplorerSku, 0, 1)}' + // Number of cores in the VM size + empty(dataExplorerName) ? '' : replace(replace(replace(replace(replace(replace(replace(replace(split(split(dataExplorerSku, 'Standard_')[1], '_')[0], 'C', ''), 'D', ''), 'E', ''), 'L', ''), 'a', ''), 'd', ''), 'i', ''), 's', '') + // Number of nodes in the cluster + empty(dataExplorerName) || dataExplorerCapacity == 1 ? '' : 'x${dataExplorerCapacity}' + // P = private endpoints enabled + enablePublicAccess ? '' : 'P' +], '') //============================================================================== // Resources @@ -219,7 +234,7 @@ var telemetryId = '00f120b5-2007-6120-0000-40b000000000' //------------------------------------------------------------------------------ resource defaultTelemetry 'Microsoft.Resources/deployments@2022-09-01' = if (enableDefaultTelemetry) { - name: 'pid-${telemetryId}-${uniqueString(deployment().name, location)}' + name: 'pid-${telemetryId}_${uniqueString(deployment().name, location)}' properties: { mode: 'Incremental' template: { From f21793d77df3395d7c80bb62709edcd9ccf281dd Mon Sep 17 00:00:00 2001 From: Michael Flanakin Date: Thu, 3 Apr 2025 11:22:57 -0700 Subject: [PATCH 2/6] Update deployment files --- docs/deploy/finops-alerts-0.9.json | 6 +++--- docs/deploy/finops-alerts-latest.json | 6 +++--- docs/deploy/finops-hub-0.9.json | 12 ++++++------ docs/deploy/finops-hub-latest.json | 12 ++++++------ src/scripts/Package-Toolkit.ps1 | 2 +- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/deploy/finops-alerts-0.9.json b/docs/deploy/finops-alerts-0.9.json index 3584f8878..a018121ed 100644 --- a/docs/deploy/finops-alerts-0.9.json +++ b/docs/deploy/finops-alerts-0.9.json @@ -5,7 +5,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "16996831884074690489" + "templateHash": "12802525131637595090" } }, "parameters": { @@ -97,7 +97,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "14296692176899339374" + "templateHash": "10854342800064359748" } }, "parameters": { @@ -3654,7 +3654,7 @@ "body": { "To": "@variables('SendAlertTo')", "Subject": "@variables('SetEmailSubject')", - "Body": "

@{variables('EmailNotice')}

@{variables('AppGatewayHTML')}
@{variables('IdleDiskHTML')}
@{variables('IPAddressHTML')}
@{variables('LoadBalancerHTML')}
@{variables('DiskSnapshotHTML')}
@{variables('StoppedVMHTML')}


📧 About FinOps alerts

FinOps alerts keep you informed about cost optimization opportunities within in your cloud environment. They are fully configurable and can be tailored to run on your desired schedule, ensuring that you receive timely notifications on the scenarios most important to your organization. FinOps alerts are part of the FinOps toolkit, an open-source collection of FinOps solutions that help you manage and optimize your cost, usage, and carbon.

Provide feedback

Give feedback
Vote on or suggest ideas


" + "Body": "

@{variables('EmailNotice')}

@{variables('AppGatewayHTML')}
@{variables('IdleDiskHTML')}
@{variables('IPAddressHTML')}
@{variables('LoadBalancerHTML')}
@{variables('DiskSnapshotHTML')}
@{variables('StoppedVMHTML')}


📧 About FinOps alerts

FinOps alerts keep you informed about cost optimization opportunities within in your cloud environment. They are fully configurable and can be tailored to run on your desired schedule, ensuring that you receive timely notifications on the scenarios most important to your organization. FinOps alerts are part of the FinOps toolkit, an open-source collection of FinOps solutions that help you manage and optimize your cost, usage, and carbon.

Provide feedback

Give feedback
Vote on or suggest ideas


" }, "path": "/v2/Mail" } diff --git a/docs/deploy/finops-alerts-latest.json b/docs/deploy/finops-alerts-latest.json index 3584f8878..a018121ed 100644 --- a/docs/deploy/finops-alerts-latest.json +++ b/docs/deploy/finops-alerts-latest.json @@ -5,7 +5,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "16996831884074690489" + "templateHash": "12802525131637595090" } }, "parameters": { @@ -97,7 +97,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "14296692176899339374" + "templateHash": "10854342800064359748" } }, "parameters": { @@ -3654,7 +3654,7 @@ "body": { "To": "@variables('SendAlertTo')", "Subject": "@variables('SetEmailSubject')", - "Body": "

@{variables('EmailNotice')}

@{variables('AppGatewayHTML')}
@{variables('IdleDiskHTML')}
@{variables('IPAddressHTML')}
@{variables('LoadBalancerHTML')}
@{variables('DiskSnapshotHTML')}
@{variables('StoppedVMHTML')}


📧 About FinOps alerts

FinOps alerts keep you informed about cost optimization opportunities within in your cloud environment. They are fully configurable and can be tailored to run on your desired schedule, ensuring that you receive timely notifications on the scenarios most important to your organization. FinOps alerts are part of the FinOps toolkit, an open-source collection of FinOps solutions that help you manage and optimize your cost, usage, and carbon.

Provide feedback

Give feedback
Vote on or suggest ideas


" + "Body": "

@{variables('EmailNotice')}

@{variables('AppGatewayHTML')}
@{variables('IdleDiskHTML')}
@{variables('IPAddressHTML')}
@{variables('LoadBalancerHTML')}
@{variables('DiskSnapshotHTML')}
@{variables('StoppedVMHTML')}


📧 About FinOps alerts

FinOps alerts keep you informed about cost optimization opportunities within in your cloud environment. They are fully configurable and can be tailored to run on your desired schedule, ensuring that you receive timely notifications on the scenarios most important to your organization. FinOps alerts are part of the FinOps toolkit, an open-source collection of FinOps solutions that help you manage and optimize your cost, usage, and carbon.

Provide feedback

Give feedback
Vote on or suggest ideas


" }, "path": "/v2/Mail" } diff --git a/docs/deploy/finops-hub-0.9.json b/docs/deploy/finops-hub-0.9.json index 6655372c9..aa3459cd2 100644 --- a/docs/deploy/finops-hub-0.9.json +++ b/docs/deploy/finops-hub-0.9.json @@ -5,7 +5,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "5439938411281903410" + "templateHash": "6665130305505342036" } }, "parameters": { @@ -280,7 +280,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "2523028206602190451" + "templateHash": "9032999427449681343" } }, "parameters": { @@ -498,14 +498,14 @@ "dataFactorySuffix": "[format('-{0}', variables('uniqueSuffix'))]", "dataFactoryName": "[replace(format('{0}{1}', take(variables('dataFactoryPrefix'), sub(63, length(variables('dataFactorySuffix')))), variables('dataFactorySuffix')), '--', '-')]", "deployDataExplorer": "[not(empty(parameters('dataExplorerName')))]", - "telemetryId": "00f120b5-2007-6120-0000-40b000000000" + "telemetryId": "[join(createArray('00f120b5-2007-6120-0000-40b000000000_', if(or(empty(parameters('remoteHubStorageUri')), empty(parameters('remoteHubStorageKey'))), '', 'R'), substring(split(parameters('storageSku'), '_')[1], 0, 1), if(empty(parameters('dataExplorerName')), '', format('X{0}', substring(parameters('dataExplorerSku'), 0, 1))), if(empty(parameters('dataExplorerName')), '', replace(replace(replace(replace(replace(replace(replace(replace(split(split(parameters('dataExplorerSku'), 'Standard_')[1], '_')[0], 'C', ''), 'D', ''), 'E', ''), 'L', ''), 'a', ''), 'd', ''), 'i', ''), 's', '')), if(or(empty(parameters('dataExplorerName')), equals(parameters('dataExplorerCapacity'), 1)), '', format('x{0}', parameters('dataExplorerCapacity'))), if(parameters('enablePublicAccess'), '', 'P')), '')]" }, "resources": [ { "condition": "[parameters('enableDefaultTelemetry')]", "type": "Microsoft.Resources/deployments", "apiVersion": "2022-09-01", - "name": "[format('pid-{0}-{1}', variables('telemetryId'), uniqueString(deployment().name, parameters('location')))]", + "name": "[format('pid-{0}_{1}', variables('telemetryId'), uniqueString(deployment().name, parameters('location')))]", "properties": { "mode": "Incremental", "template": { @@ -2155,7 +2155,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "18243166431907778116" + "templateHash": "12998070848171971309" } }, "functions": [ @@ -2377,7 +2377,7 @@ } }, "variables": { - "$fxv#0": "# Copyright (c) Microsoft Corporation.\r\n# Licensed under the MIT License.\r\n\r\n# Init outputs\r\n$DeploymentScriptOutputs = @{}\r\n\r\n#\r\n$adfParams = @{\r\n ResourceGroupName = $env:DataFactoryResourceGroup\r\n DataFactoryName = $env:DataFactoryName\r\n}\r\n\r\n# Delete old triggers\r\n$triggers = Get-AzDataFactoryV2Trigger @adfParams -ErrorAction SilentlyContinue `\r\n| Where-Object { $_.Name -match '^msexports(_(setup|daily|monthly|extract|FileAdded))?$' }\r\n$DeploymentScriptOutputs[\"stopTriggers\"] = $triggers | Stop-AzDataFactoryV2Trigger -Force -ErrorAction SilentlyContinue\r\n$DeploymentScriptOutputs[\"deleteTriggers\"] = $triggers | Remove-AzDataFactoryV2Trigger -Force -ErrorAction SilentlyContinue\r\n\r\n# Delete old pipelines\r\n$DeploymentScriptOutputs[\"pipelines\"] = Get-AzDataFactoryV2Pipeline @adfParams -ErrorAction SilentlyContinue `\r\n| Where-Object { $_.Name -match '^(msexports_(backfill|extract|fill|get|run|setup|transform)|config_(BackfillData|ExportData|RunBackfill|RunExports))$' } `\r\n| Remove-AzDataFactoryV2Pipeline -Force -ErrorAction SilentlyContinue\r\n", + "$fxv#0": "# Copyright (c) Microsoft Corporation.\r\n# Licensed under the MIT License.\r\n\r\n# Init outputs\r\n$DeploymentScriptOutputs = @{}\r\n\r\n# \r\n$adfParams = @{\r\n ResourceGroupName = $env:DataFactoryResourceGroup\r\n DataFactoryName = $env:DataFactoryName\r\n}\r\n\r\n# Delete old triggers\r\n$triggers = Get-AzDataFactoryV2Trigger @adfParams -ErrorAction SilentlyContinue `\r\n| Where-Object { $_.Name -match '^msexports(_(setup|daily|monthly|extract|FileAdded))?$' }\r\n$DeploymentScriptOutputs[\"stopTriggers\"] = $triggers | Stop-AzDataFactoryV2Trigger -Force -ErrorAction SilentlyContinue\r\n$DeploymentScriptOutputs[\"deleteTriggers\"] = $triggers | Remove-AzDataFactoryV2Trigger -Force -ErrorAction SilentlyContinue\r\n\r\n# Delete old pipelines\r\n$DeploymentScriptOutputs[\"pipelines\"] = Get-AzDataFactoryV2Pipeline @adfParams -ErrorAction SilentlyContinue `\r\n| Where-Object { $_.Name -match '^(msexports_(backfill|extract|fill|get|run|setup|transform)|config_(BackfillData|ExportData|RunBackfill|RunExports))$' } `\r\n| Remove-AzDataFactoryV2Pipeline -Force -ErrorAction SilentlyContinue\r\n", "$fxv#1": "# Copyright (c) Microsoft Corporation.\r\n# Licensed under the MIT License.\r\n\r\nParam(\r\n [switch] $Stop\r\n)\r\n\r\n# Init outputs\r\n$DeploymentScriptOutputs = @{}\r\n\r\nif (-not $Stop)\r\n{\r\n Start-Sleep -Seconds 10\r\n}\r\n\r\n# Loop thru triggers\r\n$env:Triggers.Split('|') `\r\n| ForEach-Object {\r\n $trigger = $_\r\n if ($Stop)\r\n {\r\n Write-Output \"Stopping trigger $trigger...\"\r\n $triggerOutput = Stop-AzDataFactoryV2Trigger `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -Name $trigger `\r\n -Force `\r\n -ErrorAction SilentlyContinue # Ignore errors, since the trigger may not exist\r\n }\r\n else\r\n {\r\n Write-Output \"Starting trigger $trigger...\"\r\n $triggerOutput = Start-AzDataFactoryV2Trigger `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -Name $trigger `\r\n -Force\r\n }\r\n if ($triggerOutput)\r\n {\r\n Write-Output \"done...\"\r\n }\r\n else\r\n {\r\n Write-Output \"failed...\"\r\n }\r\n $DeploymentScriptOutputs[$trigger] = $triggerOutput\r\n}\r\n\r\nif ($Stop)\r\n{\r\n Start-Sleep -Seconds 10\r\n}\r\n\r\nif (-not [string]::IsNullOrWhiteSpace($env:Pipelines))\r\n{\r\n $env:Pipelines.Split('|') `\r\n | ForEach-Object {\r\n Write-Output \"Running the init pipeline...\"\r\n Invoke-AzDataFactoryV2Pipeline `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -PipelineName $_\r\n }\r\n}\r\n", "$fxv#2": "# Copyright (c) Microsoft Corporation.\r\n# Licensed under the MIT License.\r\n\r\nParam(\r\n [switch] $Stop\r\n)\r\n\r\n# Init outputs\r\n$DeploymentScriptOutputs = @{}\r\n\r\nif (-not $Stop)\r\n{\r\n Start-Sleep -Seconds 10\r\n}\r\n\r\n# Loop thru triggers\r\n$env:Triggers.Split('|') `\r\n| ForEach-Object {\r\n $trigger = $_\r\n if ($Stop)\r\n {\r\n Write-Output \"Stopping trigger $trigger...\"\r\n $triggerOutput = Stop-AzDataFactoryV2Trigger `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -Name $trigger `\r\n -Force `\r\n -ErrorAction SilentlyContinue # Ignore errors, since the trigger may not exist\r\n }\r\n else\r\n {\r\n Write-Output \"Starting trigger $trigger...\"\r\n $triggerOutput = Start-AzDataFactoryV2Trigger `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -Name $trigger `\r\n -Force\r\n }\r\n if ($triggerOutput)\r\n {\r\n Write-Output \"done...\"\r\n }\r\n else\r\n {\r\n Write-Output \"failed...\"\r\n }\r\n $DeploymentScriptOutputs[$trigger] = $triggerOutput\r\n}\r\n\r\nif ($Stop)\r\n{\r\n Start-Sleep -Seconds 10\r\n}\r\n\r\nif (-not [string]::IsNullOrWhiteSpace($env:Pipelines))\r\n{\r\n $env:Pipelines.Split('|') `\r\n | ForEach-Object {\r\n Write-Output \"Running the init pipeline...\"\r\n Invoke-AzDataFactoryV2Pipeline `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -PipelineName $_\r\n }\r\n}\r\n", "focusSchemaVersion": "1.0", diff --git a/docs/deploy/finops-hub-latest.json b/docs/deploy/finops-hub-latest.json index 6655372c9..aa3459cd2 100644 --- a/docs/deploy/finops-hub-latest.json +++ b/docs/deploy/finops-hub-latest.json @@ -5,7 +5,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "5439938411281903410" + "templateHash": "6665130305505342036" } }, "parameters": { @@ -280,7 +280,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "2523028206602190451" + "templateHash": "9032999427449681343" } }, "parameters": { @@ -498,14 +498,14 @@ "dataFactorySuffix": "[format('-{0}', variables('uniqueSuffix'))]", "dataFactoryName": "[replace(format('{0}{1}', take(variables('dataFactoryPrefix'), sub(63, length(variables('dataFactorySuffix')))), variables('dataFactorySuffix')), '--', '-')]", "deployDataExplorer": "[not(empty(parameters('dataExplorerName')))]", - "telemetryId": "00f120b5-2007-6120-0000-40b000000000" + "telemetryId": "[join(createArray('00f120b5-2007-6120-0000-40b000000000_', if(or(empty(parameters('remoteHubStorageUri')), empty(parameters('remoteHubStorageKey'))), '', 'R'), substring(split(parameters('storageSku'), '_')[1], 0, 1), if(empty(parameters('dataExplorerName')), '', format('X{0}', substring(parameters('dataExplorerSku'), 0, 1))), if(empty(parameters('dataExplorerName')), '', replace(replace(replace(replace(replace(replace(replace(replace(split(split(parameters('dataExplorerSku'), 'Standard_')[1], '_')[0], 'C', ''), 'D', ''), 'E', ''), 'L', ''), 'a', ''), 'd', ''), 'i', ''), 's', '')), if(or(empty(parameters('dataExplorerName')), equals(parameters('dataExplorerCapacity'), 1)), '', format('x{0}', parameters('dataExplorerCapacity'))), if(parameters('enablePublicAccess'), '', 'P')), '')]" }, "resources": [ { "condition": "[parameters('enableDefaultTelemetry')]", "type": "Microsoft.Resources/deployments", "apiVersion": "2022-09-01", - "name": "[format('pid-{0}-{1}', variables('telemetryId'), uniqueString(deployment().name, parameters('location')))]", + "name": "[format('pid-{0}_{1}', variables('telemetryId'), uniqueString(deployment().name, parameters('location')))]", "properties": { "mode": "Incremental", "template": { @@ -2155,7 +2155,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "18243166431907778116" + "templateHash": "12998070848171971309" } }, "functions": [ @@ -2377,7 +2377,7 @@ } }, "variables": { - "$fxv#0": "# Copyright (c) Microsoft Corporation.\r\n# Licensed under the MIT License.\r\n\r\n# Init outputs\r\n$DeploymentScriptOutputs = @{}\r\n\r\n#\r\n$adfParams = @{\r\n ResourceGroupName = $env:DataFactoryResourceGroup\r\n DataFactoryName = $env:DataFactoryName\r\n}\r\n\r\n# Delete old triggers\r\n$triggers = Get-AzDataFactoryV2Trigger @adfParams -ErrorAction SilentlyContinue `\r\n| Where-Object { $_.Name -match '^msexports(_(setup|daily|monthly|extract|FileAdded))?$' }\r\n$DeploymentScriptOutputs[\"stopTriggers\"] = $triggers | Stop-AzDataFactoryV2Trigger -Force -ErrorAction SilentlyContinue\r\n$DeploymentScriptOutputs[\"deleteTriggers\"] = $triggers | Remove-AzDataFactoryV2Trigger -Force -ErrorAction SilentlyContinue\r\n\r\n# Delete old pipelines\r\n$DeploymentScriptOutputs[\"pipelines\"] = Get-AzDataFactoryV2Pipeline @adfParams -ErrorAction SilentlyContinue `\r\n| Where-Object { $_.Name -match '^(msexports_(backfill|extract|fill|get|run|setup|transform)|config_(BackfillData|ExportData|RunBackfill|RunExports))$' } `\r\n| Remove-AzDataFactoryV2Pipeline -Force -ErrorAction SilentlyContinue\r\n", + "$fxv#0": "# Copyright (c) Microsoft Corporation.\r\n# Licensed under the MIT License.\r\n\r\n# Init outputs\r\n$DeploymentScriptOutputs = @{}\r\n\r\n# \r\n$adfParams = @{\r\n ResourceGroupName = $env:DataFactoryResourceGroup\r\n DataFactoryName = $env:DataFactoryName\r\n}\r\n\r\n# Delete old triggers\r\n$triggers = Get-AzDataFactoryV2Trigger @adfParams -ErrorAction SilentlyContinue `\r\n| Where-Object { $_.Name -match '^msexports(_(setup|daily|monthly|extract|FileAdded))?$' }\r\n$DeploymentScriptOutputs[\"stopTriggers\"] = $triggers | Stop-AzDataFactoryV2Trigger -Force -ErrorAction SilentlyContinue\r\n$DeploymentScriptOutputs[\"deleteTriggers\"] = $triggers | Remove-AzDataFactoryV2Trigger -Force -ErrorAction SilentlyContinue\r\n\r\n# Delete old pipelines\r\n$DeploymentScriptOutputs[\"pipelines\"] = Get-AzDataFactoryV2Pipeline @adfParams -ErrorAction SilentlyContinue `\r\n| Where-Object { $_.Name -match '^(msexports_(backfill|extract|fill|get|run|setup|transform)|config_(BackfillData|ExportData|RunBackfill|RunExports))$' } `\r\n| Remove-AzDataFactoryV2Pipeline -Force -ErrorAction SilentlyContinue\r\n", "$fxv#1": "# Copyright (c) Microsoft Corporation.\r\n# Licensed under the MIT License.\r\n\r\nParam(\r\n [switch] $Stop\r\n)\r\n\r\n# Init outputs\r\n$DeploymentScriptOutputs = @{}\r\n\r\nif (-not $Stop)\r\n{\r\n Start-Sleep -Seconds 10\r\n}\r\n\r\n# Loop thru triggers\r\n$env:Triggers.Split('|') `\r\n| ForEach-Object {\r\n $trigger = $_\r\n if ($Stop)\r\n {\r\n Write-Output \"Stopping trigger $trigger...\"\r\n $triggerOutput = Stop-AzDataFactoryV2Trigger `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -Name $trigger `\r\n -Force `\r\n -ErrorAction SilentlyContinue # Ignore errors, since the trigger may not exist\r\n }\r\n else\r\n {\r\n Write-Output \"Starting trigger $trigger...\"\r\n $triggerOutput = Start-AzDataFactoryV2Trigger `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -Name $trigger `\r\n -Force\r\n }\r\n if ($triggerOutput)\r\n {\r\n Write-Output \"done...\"\r\n }\r\n else\r\n {\r\n Write-Output \"failed...\"\r\n }\r\n $DeploymentScriptOutputs[$trigger] = $triggerOutput\r\n}\r\n\r\nif ($Stop)\r\n{\r\n Start-Sleep -Seconds 10\r\n}\r\n\r\nif (-not [string]::IsNullOrWhiteSpace($env:Pipelines))\r\n{\r\n $env:Pipelines.Split('|') `\r\n | ForEach-Object {\r\n Write-Output \"Running the init pipeline...\"\r\n Invoke-AzDataFactoryV2Pipeline `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -PipelineName $_\r\n }\r\n}\r\n", "$fxv#2": "# Copyright (c) Microsoft Corporation.\r\n# Licensed under the MIT License.\r\n\r\nParam(\r\n [switch] $Stop\r\n)\r\n\r\n# Init outputs\r\n$DeploymentScriptOutputs = @{}\r\n\r\nif (-not $Stop)\r\n{\r\n Start-Sleep -Seconds 10\r\n}\r\n\r\n# Loop thru triggers\r\n$env:Triggers.Split('|') `\r\n| ForEach-Object {\r\n $trigger = $_\r\n if ($Stop)\r\n {\r\n Write-Output \"Stopping trigger $trigger...\"\r\n $triggerOutput = Stop-AzDataFactoryV2Trigger `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -Name $trigger `\r\n -Force `\r\n -ErrorAction SilentlyContinue # Ignore errors, since the trigger may not exist\r\n }\r\n else\r\n {\r\n Write-Output \"Starting trigger $trigger...\"\r\n $triggerOutput = Start-AzDataFactoryV2Trigger `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -Name $trigger `\r\n -Force\r\n }\r\n if ($triggerOutput)\r\n {\r\n Write-Output \"done...\"\r\n }\r\n else\r\n {\r\n Write-Output \"failed...\"\r\n }\r\n $DeploymentScriptOutputs[$trigger] = $triggerOutput\r\n}\r\n\r\nif ($Stop)\r\n{\r\n Start-Sleep -Seconds 10\r\n}\r\n\r\nif (-not [string]::IsNullOrWhiteSpace($env:Pipelines))\r\n{\r\n $env:Pipelines.Split('|') `\r\n | ForEach-Object {\r\n Write-Output \"Running the init pipeline...\"\r\n Invoke-AzDataFactoryV2Pipeline `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -PipelineName $_\r\n }\r\n}\r\n", "focusSchemaVersion": "1.0", diff --git a/src/scripts/Package-Toolkit.ps1 b/src/scripts/Package-Toolkit.ps1 index 71225ebf6..906b3eed8 100644 --- a/src/scripts/Package-Toolkit.ps1 +++ b/src/scripts/Package-Toolkit.ps1 @@ -84,7 +84,7 @@ function Copy-TemplateFiles() Remove-Item "$relDir/*.zip" -Force return Get-ChildItem "$relDir/$Template*" -Directory ` - | Where-Object { $_.Name -ne 'pbit' -and $_.Name -ne 'pbix' } ` + | Where-Object { @('pbit', 'pbix', 'FinOpsToolkit') -notcontains $_.Name } ` | ForEach-Object { Write-Verbose ("Packaging $_" -replace (Get-Item $relDir).FullName, '.') $srcPath = $_ From f44717a0d0a72a4c7be745813f55d32cc67ef13e Mon Sep 17 00:00:00 2001 From: Kevin De La Rosa <86437159+KevDLR@users.noreply.github.com> Date: Wed, 30 Apr 2025 08:06:32 -0700 Subject: [PATCH 3/6] FinOps Framework Domain Updates 2025 (#1478) Co-authored-by: Kevin De La Rosa --- docs-mslearn/TOC.yml | 4 ++-- docs-mslearn/framework/capabilities.md | 12 ++++++------ docs-mslearn/framework/finops-framework.md | 8 ++++---- docs-mslearn/framework/manage/education.md | 6 +++--- docs-mslearn/framework/manage/manage-finops.md | 8 ++++---- .../framework/optimize/optimize-cloud-usage-cost.md | 12 ++++++------ .../framework/quantify/quantify-business-value.md | 8 ++++---- .../understand/understand-cloud-usage-cost.md | 12 ++++++------ docs-mslearn/index.yml | 6 +++--- 9 files changed, 38 insertions(+), 38 deletions(-) diff --git a/docs-mslearn/TOC.yml b/docs-mslearn/TOC.yml index 6ff067814..31a88bb1c 100644 --- a/docs-mslearn/TOC.yml +++ b/docs-mslearn/TOC.yml @@ -26,7 +26,7 @@ items: - name: Understand items: - - name: Understand cloud usage and cost + - name: Understand usage and cost href: framework/understand/understand-cloud-usage-cost.md - name: Data ingestion href: framework/understand/ingestion.md @@ -56,7 +56,7 @@ href: framework/quantify/unit-economics.md - name: Optimize items: - - name: Optimize cloud usage and cost + - name: Optimize usage and cost href: framework/optimize/optimize-cloud-usage-cost.md - name: Architecting for cloud href: framework/optimize/architecting.md diff --git a/docs-mslearn/framework/capabilities.md b/docs-mslearn/framework/capabilities.md index 933cf6047..d679ac67b 100644 --- a/docs-mslearn/framework/capabilities.md +++ b/docs-mslearn/framework/capabilities.md @@ -3,11 +3,11 @@ title: FinOps capabilities description: Learn about what the fundamental building blocks of the FinOps Framework that enable you to maximize business value through the cloud. author: flanakin ms.author: micflan -ms.date: 04/02/2025 +ms.date: 04/04/2025 ms.topic: conceptual ms.service: finops ms.subservice: finops-learning-resources -ms.reviewer: micflan +ms.reviewer: kedelaro --- @@ -17,9 +17,9 @@ The FinOps Framework includes capabilities that cover everything you need to per
-## Understand cloud usage and cost +## Understand usage and cost -The **Understand cloud usage and cost** domain is focused on data acquisition, reporting, analysis, and alerting on top of your cost, usage, and carbon consumption. This domain is all about observability and business intelligence. It brings the data that stakeholders need together (ingestion) into a meaningful breakdown for the organization (allocation). Then it can be reported on (reporting) and monitored to proactively identify and react to issues (anomalies). +The **Understand usage and cost** domain is focused on data acquisition, reporting, analysis, and alerting on top of your cost, usage, and carbon consumption. This domain is all about observability and business intelligence. It brings the data that stakeholders need together (ingestion) into a meaningful breakdown for the organization (allocation). Then it can be reported on (reporting) and monitored to proactively identify and react to issues (anomalies). - [Data ingestion](./understand/ingestion.md) - [Allocation](./understand/allocation.md) @@ -40,9 +40,9 @@ The **Quantify business value** domain is focused on identifying and breaking do
-## Optimize cloud usage and cost +## Optimize usage and cost -The **Optimize cloud usage and cost** domain is focused on designing and optimizing solutions for efficiency to ensure you get the most out of your cloud investments. +The **Optimize usage and cost** domain is focused on designing and optimizing solutions for efficiency to ensure you get the most out of your cloud investments. - [Architecting for the cloud](./optimize/architecting.md) - [Workload optimization](./optimize/workloads.md) diff --git a/docs-mslearn/framework/finops-framework.md b/docs-mslearn/framework/finops-framework.md index c84b08160..be0ee53bb 100644 --- a/docs-mslearn/framework/finops-framework.md +++ b/docs-mslearn/framework/finops-framework.md @@ -3,11 +3,11 @@ title: FinOps Framework overview description: 'Learn about what the FinOps Framework is and how you can use it to accelerate your cost management and optimization goals.' author: flanakin ms.author: micflan -ms.date: 04/02/2025 +ms.date: 04/04/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources -ms.reviewer: micflan +ms.reviewer: kedelaro --- @@ -90,7 +90,7 @@ The FinOps Framework defines a simple lifecycle with three phases: The FinOps Framework includes capabilities that cover everything you need to perform FinOps tasks and manage a FinOps practice. Capabilities are organized into a set of related domains based on the goals of the capabilities. Each capability defines a functional area of activity and a set of tasks to support your FinOps practice. -- Understand cloud usage and cost +- Understand usage and cost - [Data ingestion](./understand/ingestion.md) - [Allocation](./understand/allocation.md) @@ -105,7 +105,7 @@ The FinOps Framework includes capabilities that cover everything you need to per - [Benchmarking](./quantify/benchmarking.md) - [Unit economics](./quantify/unit-economics.md) -- Optimize cloud usage and cost +- Optimize usage and cost - [Architecting for the cloud](./optimize/architecting.md) - [Workload optimization](./optimize/workloads.md) diff --git a/docs-mslearn/framework/manage/education.md b/docs-mslearn/framework/manage/education.md index 3689751bf..4caf2380c 100644 --- a/docs-mslearn/framework/manage/education.md +++ b/docs-mslearn/framework/manage/education.md @@ -3,11 +3,11 @@ title: FinOps education and enablement description: This article helps you understand the FinOps education and enablement capability within the FinOps Framework and how to implement that in the Microsoft Cloud. author: flanakin ms.author: micflan -ms.date: 04/02/2025 +ms.date: 04/04/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources -ms.reviewer: micflan +ms.reviewer: kedelaro # customer intent: As a FinOps practitioner, I want to understand the FinOps education and enablement capability so that I can implement that in the Microsoft cloud. --- @@ -28,7 +28,7 @@ Consider marketing initiatives to drive awareness, encourage discussion, and sha To learn from help and support initiatives, provide a direct channel to get help and support as people are learning. Be responsive and establish a feedback loop. -By formalizing FinOps education and enablement, stakeholders develop the knowledge and skills needed to effectively manage and optimize cloud usage and costs. Organizations see: +By formalizing FinOps education and enablement, stakeholders develop the knowledge and skills needed to effectively manage and optimize usage and costs. Organizations see: - Accelerated adoption of FinOps practices, leading to improved financial performance - Increased agility diff --git a/docs-mslearn/framework/manage/manage-finops.md b/docs-mslearn/framework/manage/manage-finops.md index a483b5be1..07cbf2bde 100644 --- a/docs-mslearn/framework/manage/manage-finops.md +++ b/docs-mslearn/framework/manage/manage-finops.md @@ -3,11 +3,11 @@ title: Manage the FinOps practice description: Learn about the FinOps capabilities that help you establish your FinOps practice and drive organizational accountability. author: flanakin ms.author: micflan -ms.date: 04/02/2025 +ms.date: 04/04/2025 ms.topic: conceptual ms.service: finops ms.subservice: finops-learning-resources -ms.reviewer: micflan +ms.reviewer: kedelaro --- @@ -119,9 +119,9 @@ If you're looking for something specific, vote for an existing or create a new i Related FinOps capabilities: -- [Understand cloud usage and cost](../understand/understand-cloud-usage-cost.md) +- [Understand usage and cost](../understand/understand-cloud-usage-cost.md) - [Quantify business value](../quantify/quantify-business-value.md) -- [Optimize cloud usage and cost](../optimize/optimize-cloud-usage-cost.md) +- [Optimize usage and cost](../optimize/optimize-cloud-usage-cost.md) Related products: diff --git a/docs-mslearn/framework/optimize/optimize-cloud-usage-cost.md b/docs-mslearn/framework/optimize/optimize-cloud-usage-cost.md index 0aea9e4c4..c27ea9b51 100644 --- a/docs-mslearn/framework/optimize/optimize-cloud-usage-cost.md +++ b/docs-mslearn/framework/optimize/optimize-cloud-usage-cost.md @@ -1,19 +1,19 @@ --- -title: Optimize cloud usage and cost +title: Optimize usage and cost description: Learn about the FinOps capabilities that help you identify and implement the right mix of pricing models, services, and resources needed to meet business demands. author: flanakin ms.author: micflan -ms.date: 04/02/2025 +ms.date: 04/04/2025 ms.topic: conceptual ms.service: finops ms.subservice: finops-learning-resources -ms.reviewer: micflan +ms.reviewer: kedelaro --- -# Optimize cloud usage and cost +# Optimize usage and cost -This article helps you understand the **Optimize cloud usage and cost** domain within the FinOps Framework and how to implement its capabilities in the Microsoft Cloud. +This article helps you understand the **Optimize usage and cost** domain within the FinOps Framework and how to implement its capabilities in the Microsoft Cloud. This domain is focused on designing and optimizing solutions for efficiency to ensure you get the most out of your cloud investments. @@ -79,7 +79,7 @@ If you're looking for something specific, vote for an existing or create a new i Related FinOps capabilities: -- [Understand cloud usage and cost](../understand/understand-cloud-usage-cost.md) +- [Understand usage and cost](../understand/understand-cloud-usage-cost.md) - [Quantify business value](../quantify/quantify-business-value.md) - [Manage the FinOps practice](../manage/manage-finops.md) diff --git a/docs-mslearn/framework/quantify/quantify-business-value.md b/docs-mslearn/framework/quantify/quantify-business-value.md index 5e933dac6..758ac00ac 100644 --- a/docs-mslearn/framework/quantify/quantify-business-value.md +++ b/docs-mslearn/framework/quantify/quantify-business-value.md @@ -3,11 +3,11 @@ title: Quantify business value description: Learn about the FinOps capabilities that help you measure product and cloud performance and map to organizational KPIs so you can make data-driven decisions with increased accuracy and velocity. author: flanakin ms.author: micflan -ms.date: 04/02/2025 +ms.date: 04/04/2025 ms.topic: conceptual ms.service: finops ms.subservice: finops-learning-resources -ms.reviewer: micflan +ms.reviewer: kedelaro --- @@ -77,8 +77,8 @@ If you're looking for something specific, vote for an existing or create a new i Related FinOps capabilities: -- [Understand cloud usage and cost](../understand/understand-cloud-usage-cost.md) -- [Optimize cloud usage and cost](../optimize/optimize-cloud-usage-cost.md) +- [Understand usage and cost](../understand/understand-cloud-usage-cost.md) +- [Optimize usage and cost](../optimize/optimize-cloud-usage-cost.md) - [Manage the FinOps practice](../manage/manage-finops.md) Related products: diff --git a/docs-mslearn/framework/understand/understand-cloud-usage-cost.md b/docs-mslearn/framework/understand/understand-cloud-usage-cost.md index 7c3e65964..9bb244b35 100644 --- a/docs-mslearn/framework/understand/understand-cloud-usage-cost.md +++ b/docs-mslearn/framework/understand/understand-cloud-usage-cost.md @@ -1,19 +1,19 @@ --- -title: Understand cloud usage and cost +title: Understand usage and cost description: Learn about the FinOps capabilities that help you collect, normalize, analyze, and monitor cost, usage, and carbon across the organization. author: flanakin ms.author: micflan -ms.date: 04/02/2025 +ms.date: 04/04/2025 ms.topic: conceptual ms.service: finops ms.subservice: finops-learning-resources -ms.reviewer: micflan +ms.reviewer: kedelaro --- -# Understand cloud usage and cost +# Understand usage and cost -This article helps you understand the **Understand cloud usage and cost** domain within the FinOps Framework and how to implement its capabilities in the Microsoft Cloud. +This article helps you understand the **Understand usage and cost** domain within the FinOps Framework and how to implement its capabilities in the Microsoft Cloud. This domain is focused on data acquisition, reporting, analysis, and alerting on top of your cost, usage, and carbon consumption. This domain focuses on observability and business intelligence. It involves gathering data (ingestion), organizing it for the organization (allocation), generating reports (reporting), and monitoring to proactively identify and address issues (anomalies). @@ -70,7 +70,7 @@ If you're looking for something specific, vote for an existing or create a new i Related FinOps capabilities: - [Quantify business value](../quantify/quantify-business-value.md) -- [Optimize cloud usage and cost](../optimize/optimize-cloud-usage-cost.md) +- [Optimize usage and cost](../optimize/optimize-cloud-usage-cost.md) - [Manage the FinOps practice](../manage/manage-finops.md) Related products: diff --git a/docs-mslearn/index.yml b/docs-mslearn/index.yml index d2b428f15..a45748e80 100644 --- a/docs-mslearn/index.yml +++ b/docs-mslearn/index.yml @@ -52,7 +52,7 @@ conceptualContent: summary: The FinOps Framework is a comprehensive set of best practices and principles to help organizations drive greater business value from the cloud. # < 160 chars (Optional; Remove if not applicable.) items: # Card - - title: Understand cloud usage and cost + - title: Understand usage and cost links: - url: framework/understand/understand-cloud-usage-cost.md itemType: overview @@ -91,7 +91,7 @@ conceptualContent: itemType: concept text: Unit economics # Card - - title: Optimize cloud usage and cost + - title: Optimize usage and cost links: - url: framework/optimize/optimize-cloud-usage-cost.md itemType: overview @@ -203,4 +203,4 @@ additionalContent: - url: https://data.finops.org/ text: State of FinOps - url: https://www.finops.org/landscape/?prod_TOOLS_SERVICES%5BrefinementList%5D%5Bcloud_providers%5D%5B0%5D=Azure - text: Tools, services, and training \ No newline at end of file + text: Tools, services, and training From 22332d69ddb1884fe783a5a81583d72f02c26429 Mon Sep 17 00:00:00 2001 From: Kevin De La Rosa <86437159+KevDLR@users.noreply.github.com> Date: Wed, 30 Apr 2025 08:29:54 -0700 Subject: [PATCH 4/6] Updating FinOps framework content on scopes and adjusting definition (#1538) Co-authored-by: Kevin De La Rosa Co-authored-by: Michael Flanakin --- docs-mslearn/framework/finops-framework.md | 28 +++++++++++++++++++++- docs-mslearn/overview.md | 4 ++-- docs-mslearn/toolkit/changelog.md | 7 +++++- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/docs-mslearn/framework/finops-framework.md b/docs-mslearn/framework/finops-framework.md index be0ee53bb..64c87787a 100644 --- a/docs-mslearn/framework/finops-framework.md +++ b/docs-mslearn/framework/finops-framework.md @@ -3,7 +3,7 @@ title: FinOps Framework overview description: 'Learn about what the FinOps Framework is and how you can use it to accelerate your cost management and optimization goals.' author: flanakin ms.author: micflan -ms.date: 04/04/2025 +ms.date: 04/25/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources @@ -26,6 +26,7 @@ Microsoft's guidance is largely based on the FinOps Framework with a few enhance In the next few sections, we cover the basic concepts of the FinOps Framework: - The **principles** that should guide your FinOps efforts. +- The **scopes** to which you apply FinOps concepts. - The **stakeholders** that should be involved. - The **lifecycle** that you iterate through. - The **capabilities** that you implement with stakeholders throughout the lifecycle. @@ -48,6 +49,31 @@ For more information about FinOps principles, including tips from the experts, s
+## Scopes + +FinOps scopes conceptually represent the boundaries for which you apply your FinOps efforts. Your scope indicates the usage, spend, and sustainability management area of responsibility your team covers. This area of responsibility may also identify which personas are involved and what capabilities apply. Your team's scope is generally defined by and aligned with your organization's strategic goals and operational needs. + +The scope or area of responsibility of your FinOps efforts may cover multiple technologies and platforms. Examples of things that may be part of your scope include, but are not limited to: + +- Public, private, and hybrid clouds. +- Data centers. +- Cloud-based services offered by third-party providers (often referred to as "SaaS providers"). +- Professional services, like consulting and training. + +Your scope may also be a subset of these, if you focus solely on a single technology or even service. For instance, a team that only manages SQL databases may have a smaller area of responsibility than one that manages networking infrastructure for a global, multi-national company. + +Ultimately, scopes represent what your team is responsible for managing or supporting, which impacts: + +- What you need to know. +- Standards and processes you may need to apply to establish consistent execution and governance. +- Metrics and key performance indicators (KPIs) you need to measure success. +- What level of adoption you should target and expect within your organization. +- If and how you might automate tasks and processes to streamline your goals. + +Your scope is determined based on your organization's business and technology needs and strategy to facilitate efficient execution of your FinOps practice to achieve your FinOps goals. + +
+ ## Stakeholders FinOps requires a holistic and cross-functional approach that involves various stakeholders (or personas). They have different roles, responsibilities, and perspectives that influence how they use and optimize cloud resources and costs. Familiarize yourself with each role and identify the stakeholders within your organization. An effective FinOps program requires collaboration across all stakeholders: diff --git a/docs-mslearn/overview.md b/docs-mslearn/overview.md index d7faef94e..09af55740 100644 --- a/docs-mslearn/overview.md +++ b/docs-mslearn/overview.md @@ -3,7 +3,7 @@ title: What is FinOps? description: FinOps combines financial management principles with engineering and operations to provide organizations with a better understanding of their cloud spending. author: flanakin ms.author: micflan -ms.date: 04/02/2025 +ms.date: 04/25/2025 ms.topic: overview ms.service: finops ms.subservice: finops-learning-resources @@ -14,7 +14,7 @@ ms.reviewer: micflan # What is FinOps? -FinOps is an operational framework and cultural practice that enhances the business value derived from cloud technology. It promotes data-driven decision-making in a timely manner and fosters financial responsibility. It gets achieved through collaboration among engineering, finance, and business teams. +FinOps is an operational framework and cultural practice that enhances the business value derived from cloud and technology. It promotes data-driven decision-making in a timely manner and fosters financial responsibility. It gets achieved through collaboration among engineering, finance, and business teams. FinOps is a discipline that combines financial management principles with cloud engineering and operations to provide organizations with a better understanding of their cloud spending. It also helps them make informed decisions on how to allocate and manage their cloud costs. The goal of FinOps isn't to save money, but to maximize revenue or business value through the cloud. It helps to enable organizations to control cloud spending while maintaining the level of performance, reliability, and security needed to support their business operations. diff --git a/docs-mslearn/toolkit/changelog.md b/docs-mslearn/toolkit/changelog.md index 4d9cddb83..7be1fcf91 100644 --- a/docs-mslearn/toolkit/changelog.md +++ b/docs-mslearn/toolkit/changelog.md @@ -3,7 +3,7 @@ title: FinOps toolkit changelog description: Review the latest features and enhancements in the FinOps toolkit, including updates to FinOps hubs, Power BI reports, and more. author: flanakin ms.author: micflan -ms.date: 04/07/2025 +ms.date: 04/25/2025 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -36,6 +36,11 @@ The following section lists features and enhancements that are currently in deve **Fixed** - Workaround subnets reordering and bicep limitation +### [Implementing FinOps guide](../implementing-finops-guide.md) + +- **Changed** + - Updated FinOps Framework domains, principles, capabilities, and scopes to reflect the 2025 updates. +
## v0.9 Update 1 From d96d01a837db887708ecabee3e976e237bf65918 Mon Sep 17 00:00:00 2001 From: Kevin De La Rosa <86437159+KevDLR@users.noreply.github.com> Date: Wed, 30 Apr 2025 08:30:44 -0700 Subject: [PATCH 5/6] Updating principles to align with framework 2025 updates (#1534) Co-authored-by: Kevin De La Rosa Co-authored-by: Michael Flanakin --- docs-mslearn/framework/finops-framework.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs-mslearn/framework/finops-framework.md b/docs-mslearn/framework/finops-framework.md index 64c87787a..1d710aebe 100644 --- a/docs-mslearn/framework/finops-framework.md +++ b/docs-mslearn/framework/finops-framework.md @@ -36,13 +36,13 @@ In the next few sections, we cover the basic concepts of the FinOps Framework: ## Principles -Before digging into FinOps, it's important to understand the core principles that should guide your FinOps efforts. The FinOps community developed the principles by applying their collective experience, and helps you create a culture of shared accountability and transparency. +Before digging into FinOps, it's important to understand the core principles that should guide your FinOps efforts. The FinOps community developed the principles by applying their collective experience to help you create a culture of shared accountability and transparency. - **Teams need to collaborate** – Build a common focus on cost efficiency, processes, and cost decisions across teams that might not typically work closely together. -- **Decisions are driven by the business value of cloud** – Balance cost decisions with business benefits including quality, speed, and business capability. -- **Everyone takes ownership for their cloud usage** – Decentralize decisions about cloud resource usage and optimization, and drive technical teams to consider cost as well as uptime and performance. -- **FinOps data should be accessible and timely** – Provide clear usage and cost data quickly, to the right people, to enable prompt decisions and forecasting. -- **A centralized team drives FinOps** – Centralize management of FinOps practices for consistency, automation, and rate negotiations. +- **Business value drives technology decisions** – Balance cost decisions with business benefits including quality, speed, and business capability. +- **Everyone takes ownership for their technology usage** – Decentralize decisions about cloud resource usage and optimization, and drive technical teams to consider cost as well as uptime and performance. +- **FinOps data should be accessible, timely, and accurate** – Provide clear usage and cost data quickly, to the right people, to enable prompt decisions and forecasting. +- **FinOps should be enabled centrally** – Centralize management of FinOps practices for consistency, automation, and rate negotiations. - **Take advantage of the variable cost model of the cloud** – Make continuous small adjustments in cloud usage and optimization. For more information about FinOps principles, including tips from the experts, see [FinOps with Azure – Bringing FinOps to life through organizational and cultural alignment](https://azure.microsoft.com/resources/finops-with-azure-bringing-finops-to-life-through-organizational-and-cultural-alignment/). From d4dca6e55870f88655a97da5b1b9df34b8ef2e07 Mon Sep 17 00:00:00 2001 From: Kevin De La Rosa <86437159+KevDLR@users.noreply.github.com> Date: Wed, 30 Apr 2025 08:31:10 -0700 Subject: [PATCH 6/6] FinOps Framework Capability updates 2025 (#1479) Co-authored-by: Kevin De La Rosa --- docs-mslearn/TOC.yml | 2 +- docs-mslearn/conduct-iteration.md | 6 +++--- docs-mslearn/framework/capabilities.md | 2 +- docs-mslearn/framework/finops-framework.md | 2 +- docs-mslearn/framework/manage/governance.md | 18 +++++++++--------- docs-mslearn/framework/manage/manage-finops.md | 6 +++--- docs-mslearn/framework/manage/onboarding.md | 6 +++--- docs-mslearn/framework/optimize/licensing.md | 6 +++--- docs-mslearn/framework/optimize/rates.md | 6 +++--- docs-mslearn/framework/optimize/workloads.md | 6 +++--- docs-mslearn/index.yml | 2 +- 11 files changed, 31 insertions(+), 31 deletions(-) diff --git a/docs-mslearn/TOC.yml b/docs-mslearn/TOC.yml index 31a88bb1c..521ed8056 100644 --- a/docs-mslearn/TOC.yml +++ b/docs-mslearn/TOC.yml @@ -76,7 +76,7 @@ href: framework/manage/operations.md - name: Education + enablement href: framework/manage/education.md - - name: Cloud policy + governance + - name: Policy + governance href: framework/manage/governance.md - name: Invoicing + chargeback href: framework/manage/invoicing-chargeback.md diff --git a/docs-mslearn/conduct-iteration.md b/docs-mslearn/conduct-iteration.md index 246f8cccb..2d6085653 100644 --- a/docs-mslearn/conduct-iteration.md +++ b/docs-mslearn/conduct-iteration.md @@ -3,11 +3,11 @@ title: Tutorial - Conduct an iteration description: This tutorial helps you learn how to take an iterative approach to FinOps adoption. author: flanakin ms.author: micflan -ms.date: 04/02/2025 +ms.date: 04/04/2025 ms.topic: tutorial ms.service: finops ms.subservice: finops-learning-resources -ms.reviewer: micflan +ms.reviewer: kedelaro # customer intent: As a finops practitioner, I want to adopt FinOps in my organization so that we can create a plan to adopt. --- @@ -71,7 +71,7 @@ Use the following information as a guide to select the right FinOps capabilities 3. Rate optimization 4. Licensing and SaaS 5. Cloud sustainability - 6. Cloud policy and governance + 6. Policy and governance 7. If your team has a solid understanding of the basics and needs to map cloud investments back to business value, consider: 1. Unit economics 2. Allocation diff --git a/docs-mslearn/framework/capabilities.md b/docs-mslearn/framework/capabilities.md index d679ac67b..994233494 100644 --- a/docs-mslearn/framework/capabilities.md +++ b/docs-mslearn/framework/capabilities.md @@ -59,7 +59,7 @@ The **Manage the FinOps practice** domain is focused on establishing a clear and - [FinOps education and enablement](./manage/education.md) - [FinOps practice operations](./manage/operations.md) - [Onboarding workloads](./manage/onboarding.md) -- [Cloud policy and governance](./manage/governance.md) +- [Policy and governance](./manage/governance.md) - [Invoicing and chargeback](./manage/invoicing-chargeback.md) - [FinOps assessment](./manage/assessment.md) - [FinOps tools and services](./manage/tools-services.md) diff --git a/docs-mslearn/framework/finops-framework.md b/docs-mslearn/framework/finops-framework.md index 1d710aebe..30cf4226d 100644 --- a/docs-mslearn/framework/finops-framework.md +++ b/docs-mslearn/framework/finops-framework.md @@ -144,7 +144,7 @@ The FinOps Framework includes capabilities that cover everything you need to per - [FinOps education and enablement](./manage/education.md) - [FinOps practice operations](./manage/operations.md) - [Onboarding workloads](./manage/onboarding.md) - - [Cloud policy and governance](./manage/governance.md) + - [Policy and governance](./manage/governance.md) - [Invoicing and chargeback](./manage/invoicing-chargeback.md) - [FinOps assessment](./manage/assessment.md) - [FinOps tools and services](./manage/tools-services.md) diff --git a/docs-mslearn/framework/manage/governance.md b/docs-mslearn/framework/manage/governance.md index 88212a766..69059dc13 100644 --- a/docs-mslearn/framework/manage/governance.md +++ b/docs-mslearn/framework/manage/governance.md @@ -1,26 +1,26 @@ --- -title: Cloud policy and governance -description: This article helps you understand the cloud policy and governance capability within the FinOps Framework and how to implement that in the Microsoft Cloud. +title: Policy and governance +description: This article helps you understand the policy and governance capability within the FinOps Framework and how to implement that in the Microsoft Cloud. author: flanakin ms.author: micflan -ms.date: 04/02/2025 +ms.date: 04/04/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources -ms.reviewer: micflan -# customer intent: As a FinOps practitioner, I want to understand the cloud policy and governance capability so that I can implement it in the Microsoft Cloud. +ms.reviewer: kedelaro +# customer intent: As a FinOps practitioner, I want to understand the policy and governance capability so that I can implement it in the Microsoft Cloud. --- -# Cloud policy and governance +# Policy and governance -This article helps you understand the cloud policy and governance capability within the FinOps Framework and how to implement that in the Microsoft Cloud. +This article helps you understand the policy and governance capability within the FinOps Framework and how to implement that in the Microsoft Cloud.
## Definition -**Cloud policy and governance refers to the process of defining, implementing, and monitoring a framework of rules that guide an organization's FinOps efforts.** +**Policy and governance refers to the process of defining, implementing, and monitoring a framework of rules that guide an organization's FinOps efforts.** Define your governance goals and success metrics. Review and document how existing policies are updated to account for FinOps efforts. Review with all stakeholders to get buy-in and endorsement. @@ -67,7 +67,7 @@ At this point, you have a basic set of policies in place that are being managed ## Learn more at the FinOps Foundation -This capability is a part of the FinOps Framework by the FinOps Foundation, a non-profit organization dedicated to advancing cloud cost management and optimization. For more information about FinOps, including useful playbooks, training and certification programs, and more, see the [Cloud policy and governance capability](https://www.finops.org/framework/capabilities/policy-governance/) article in the FinOps Framework documentation. +This capability is a part of the FinOps Framework by the FinOps Foundation, a non-profit organization dedicated to advancing cloud cost management and optimization. For more information about FinOps, including useful playbooks, training and certification programs, and more, see the [Policy and governance capability](https://www.finops.org/framework/capabilities/policy-governance/) article in the FinOps Framework documentation. You can also find related videos on the FinOps Foundation YouTube channel: diff --git a/docs-mslearn/framework/manage/manage-finops.md b/docs-mslearn/framework/manage/manage-finops.md index 07cbf2bde..a8138f31d 100644 --- a/docs-mslearn/framework/manage/manage-finops.md +++ b/docs-mslearn/framework/manage/manage-finops.md @@ -57,15 +57,15 @@ To learn more, see [Onboarding workloads](./onboarding.md).
-## Cloud policy and governance +## Policy and governance -Cloud policy and governance refer to the process of defining, implementing, and monitoring a framework of rules that guide an organization's FinOps efforts. With this capability, you identify and implement policies to support organizational goals by promoting or limiting the use of: +Policy and governance refer to the process of defining, implementing, and monitoring a framework of rules that guide an organization's FinOps efforts. With this capability, you identify and implement policies to support organizational goals by promoting or limiting the use of: - Specific SKUs - Resource configurations - Other practices that might affect cost, usage, and carbon growth -To learn more, see [Cloud policy and governance](./governance.md). +To learn more, see [Policy and governance](./governance.md).
diff --git a/docs-mslearn/framework/manage/onboarding.md b/docs-mslearn/framework/manage/onboarding.md index 5d39a62ac..83c97c1b3 100644 --- a/docs-mslearn/framework/manage/onboarding.md +++ b/docs-mslearn/framework/manage/onboarding.md @@ -3,11 +3,11 @@ title: Onboarding workloads description: This article helps you understand the onboarding workloads capability within the FinOps Framework and how to implement that in the Microsoft Cloud. author: flanakin ms.author: micflan -ms.date: 04/02/2025 +ms.date: 04/04/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources -ms.reviewer: micflan +ms.reviewer: kedelaro # customer intent: As a FinOps practitioner, I want to understand the onboarding workloads capability so that I can implement it in the Microsoft Cloud. --- @@ -101,6 +101,6 @@ If you're looking for something specific, vote for an existing or create a new i Related FinOps capabilities: - [Forecasting](../quantify/forecasting.md) -- [Cloud policy and governance](./governance.md) +- [Policy and governance](./governance.md)
diff --git a/docs-mslearn/framework/optimize/licensing.md b/docs-mslearn/framework/optimize/licensing.md index ebde47a98..d3f8559b5 100644 --- a/docs-mslearn/framework/optimize/licensing.md +++ b/docs-mslearn/framework/optimize/licensing.md @@ -3,11 +3,11 @@ title: Licensing and SaaS description: This article helps you understand the licensing and SaaS capability within the FinOps Framework and how to implement that in the Microsoft Cloud. author: flanakin ms.author: micflan -ms.date: 04/02/2025 +ms.date: 04/04/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources -ms.reviewer: micflan +ms.reviewer: kedelaro # customer intent: As a FinOps practitioner, I want to understand the licensing and SaaS capability so that I can implement that in the Microsoft cloud. --- @@ -79,7 +79,7 @@ If you're looking for something specific, vote for an existing or create a new i Related FinOps capabilities: - [Reporting and analytics](../understand/reporting.md) -- [Cloud policy and governance](../manage/governance.md) +- [Policy and governance](../manage/governance.md) Related solutions: diff --git a/docs-mslearn/framework/optimize/rates.md b/docs-mslearn/framework/optimize/rates.md index aff740d20..7de3dc3dc 100644 --- a/docs-mslearn/framework/optimize/rates.md +++ b/docs-mslearn/framework/optimize/rates.md @@ -3,11 +3,11 @@ title: Rate optimization description: This article helps you understand the rate optimization capability within the FinOps Framework and how to implement that in the Microsoft Cloud. author: flanakin ms.author: micflan -ms.date: 04/02/2025 +ms.date: 04/04/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources -ms.reviewer: micflan +ms.reviewer: kedelaro # customer intent: As a FinOps practitioner, I want to understand the rate optimization capability so that I can implement that in the Microsoft cloud. --- @@ -103,7 +103,7 @@ If you're looking for something specific, vote for an existing or create a new i Related FinOps capabilities: - [Data analysis and showback](../understand/reporting.md) -- [Cloud policy and governance](../manage/governance.md) +- [Policy and governance](../manage/governance.md) Related products: diff --git a/docs-mslearn/framework/optimize/workloads.md b/docs-mslearn/framework/optimize/workloads.md index c3a641548..f98fb3782 100644 --- a/docs-mslearn/framework/optimize/workloads.md +++ b/docs-mslearn/framework/optimize/workloads.md @@ -3,11 +3,11 @@ title: Workload optimization description: This article helps you understand the Workload optimization capability within the FinOps Framework and how to implement that in the Microsoft Cloud. author: flanakin ms.author: micflan -ms.date: 04/02/2025 +ms.date: 04/04/2025 ms.topic: concept-article ms.service: finops ms.subservice: finops-learning-resources -ms.reviewer: micflan +ms.reviewer: kedelaro # customer intent: As a FinOps practitioner, I want to understand the workload optimization capability so that I can implement it in the Microsoft Cloud. --- @@ -118,7 +118,7 @@ If you're looking for something specific, vote for an existing or create a new i Related FinOps capabilities: - [Rate optimization](./rates.md) -- [Cloud policy and governance](../manage/governance.md) +- [Policy and governance](../manage/governance.md) Related products: diff --git a/docs-mslearn/index.yml b/docs-mslearn/index.yml index a45748e80..0aabc1458 100644 --- a/docs-mslearn/index.yml +++ b/docs-mslearn/index.yml @@ -125,7 +125,7 @@ conceptualContent: text: FinOps education and enablement - url: framework/manage/governance.md itemType: concept - text: Cloud policy and governance + text: Policy and governance - url: framework/manage/invoicing-chargeback.md itemType: concept text: Invoicing + chargeback