diff --git a/docs/_optimize/optimization-engine/README.md b/docs/_optimize/optimization-engine/README.md index b03a8834f..275edb981 100644 --- a/docs/_optimize/optimization-engine/README.md +++ b/docs/_optimize/optimization-engine/README.md @@ -104,7 +104,7 @@ Once deployed and after all the initial ingestion and recommendations generation ## 📋 Requirements * A supported Azure subscription (see the [FAQ](./faq.md)) -* A user account with Owner permissions over the chosen subscription, so that the Automation Managed Identity is granted the required privileges over the subscription (Reader) and deployment resource group (Contributor) +* A user account with Owner permissions over the chosen subscription, so that the Automation Managed Identity is granted the required privileges over the subscription (Reader) and deployment resource group (Storage Blob Data Contributor) * Azure Powershell 9.0.0+ * (Optional, for Identity and RBAC governance) Microsoft.Graph.Authentication and Microsoft.Graph.Identity.DirectoryManagement PowerShell modules (version 2.4.0+) * (Optional, for Identity and RBAC governance) A user account with at least Privileged Role Administrator permissions over the Microsoft Entra tenant, so that the Managed Identity is granted the required privileges over Microsoft Entra ID (Global Reader) diff --git a/docs/_resources/changelog.md b/docs/_resources/changelog.md index b974141e3..28d956fea 100644 --- a/docs/_resources/changelog.md +++ b/docs/_resources/changelog.md @@ -76,6 +76,14 @@ Legend: > > 1. Cost Management export modules for subscriptions and resource groups. +🔍 Optimization engine +{: .fs-5 .fw-500 .mt-4 mb-0 } + +> ✏️ Changed: +> +> 1. Improved Storage Account access security, replacing key-based authentication by Entra ID authentication. +> +
## 🪛 v0.5 Update 1 diff --git a/src/optimization-engine/Deploy-AzureOptimizationEngine.ps1 b/src/optimization-engine/Deploy-AzureOptimizationEngine.ps1 index daf1436c6..49e427d81 100644 --- a/src/optimization-engine/Deploy-AzureOptimizationEngine.ps1 +++ b/src/optimization-engine/Deploy-AzureOptimizationEngine.ps1 @@ -1113,6 +1113,18 @@ if ("Y", "y" -contains $continueInput) { Write-Host "Enabling Entra ID-only authentication in SQL Database..." -ForegroundColor Green Enable-AzSqlServerActiveDirectoryOnlyAuthentication -ServerName $sqlServerName -ResourceGroupName $resourceGroupName | Out-Null } + + # Ensuring the Automation Account identity has the necessary permissions to access the Storage Account (needed for partial upgrades) + $sa = Get-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName + $auto = Get-AzAutomationAccount -Name $automationAccountName -ResourceGroupName $resourceGroupName + $spnId = $auto.Identity.PrincipalId + $storageBlobContributorRoleId = "ba92f5b4-2d11-453d-a403-e96b0029c9fe" # Storage Blob Data Contributor role + $roleAssignment = Get-AzRoleAssignment -ObjectId $spnId -Scope $sa.Id -ErrorAction SilentlyContinue + if (-not($roleAssignment) -or -not($roleAssignment.RoleDefinitionId -contains $storageBlobContributorRoleId)) + { + Write-Host "Granting Storage Blob Data Contributor role to the Automation Account identity..." -ForegroundColor Green + New-AzRoleAssignment -ObjectId $spnId -RoleDefinitionId $storageBlobContributorRoleId -Scope $sa.Id | Out-Null + } #region Open SQL Server firewall rule if (-not($sqlServerName -like "*.database.*")) @@ -1153,10 +1165,10 @@ if ("Y", "y" -contains $continueInput) { try { $azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1) - $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/" + $dbToken = (Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/" -AsSecureString).Token | ConvertFrom-SecureString -AsPlainText $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlServerEndpoint,1433;Database=$databaseName;Encrypt=True;Connection Timeout=$SqlTimeout;") - $Conn.AccessToken = $dbToken.Token + $Conn.AccessToken = $dbToken $Conn.Open() $createTableQuery = Get-Content -Path "./model/loganalyticsingestcontrol-table.sql" @@ -1168,7 +1180,7 @@ if ("Y", "y" -contains $continueInput) { $Conn.Close() $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlServerEndpoint,1433;Database=$databaseName;Encrypt=True;Connection Timeout=$SqlTimeout;") - $Conn.AccessToken = $dbToken.Token + $Conn.AccessToken = $dbToken $Conn.Open() $initTableQuery = Get-Content -Path "./model/loganalyticsingestcontrol-initialize.sql" @@ -1180,7 +1192,7 @@ if ("Y", "y" -contains $continueInput) { $Conn.Close() $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlServerEndpoint,1433;Database=$databaseName;Encrypt=True;Connection Timeout=$SqlTimeout;") - $Conn.AccessToken = $dbToken.Token + $Conn.AccessToken = $dbToken $Conn.Open() $upgradeTableQuery = Get-Content -Path "./model/loganalyticsingestcontrol-upgrade.sql" @@ -1192,7 +1204,7 @@ if ("Y", "y" -contains $continueInput) { $Conn.Close() $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlServerEndpoint,1433;Database=$databaseName;Encrypt=True;Connection Timeout=$SqlTimeout;") - $Conn.AccessToken = $dbToken.Token + $Conn.AccessToken = $dbToken $Conn.Open() $createTableQuery = Get-Content -Path "./model/sqlserveringestcontrol-table.sql" @@ -1204,7 +1216,7 @@ if ("Y", "y" -contains $continueInput) { $Conn.Close() $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlServerEndpoint,1433;Database=$databaseName;Encrypt=True;Connection Timeout=$SqlTimeout;") - $Conn.AccessToken = $dbToken.Token + $Conn.AccessToken = $dbToken $Conn.Open() $initTableQuery = Get-Content -Path "./model/sqlserveringestcontrol-initialize.sql" @@ -1216,7 +1228,7 @@ if ("Y", "y" -contains $continueInput) { $Conn.Close() $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlServerEndpoint,1433;Database=$databaseName;Encrypt=True;Connection Timeout=$SqlTimeout;") - $Conn.AccessToken = $dbToken.Token + $Conn.AccessToken = $dbToken $Conn.Open() $createTableQuery = Get-Content -Path "./model/recommendations-table.sql" @@ -1228,7 +1240,7 @@ if ("Y", "y" -contains $continueInput) { $Conn.Close() $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlServerEndpoint,1433;Database=$databaseName;Encrypt=True;Connection Timeout=$SqlTimeout;") - $Conn.AccessToken = $dbToken.Token + $Conn.AccessToken = $dbToken $Conn.Open() $createTableQuery = Get-Content -Path "./model/recommendations-sp.sql" @@ -1240,7 +1252,7 @@ if ("Y", "y" -contains $continueInput) { $Conn.Close() $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlServerEndpoint,1433;Database=$databaseName;Encrypt=True;Connection Timeout=$SqlTimeout;") - $Conn.AccessToken = $dbToken.Token + $Conn.AccessToken = $dbToken $Conn.Open() $createTableQuery = Get-Content -Path "./model/filters-table.sql" @@ -1252,7 +1264,7 @@ if ("Y", "y" -contains $continueInput) { $Conn.Close() $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlServerEndpoint,1433;Database=$databaseName;Encrypt=True;Connection Timeout=$SqlTimeout;") - $Conn.AccessToken = $dbToken.Token + $Conn.AccessToken = $dbToken $Conn.Open() $createUserQuery = (Get-Content -Path "./model/automation-user.sql").Replace("", $automationAccountName) diff --git a/src/optimization-engine/Suppress-Recommendation.ps1 b/src/optimization-engine/Suppress-Recommendation.ps1 index e4f8aaefd..b96dbd2f6 100644 --- a/src/optimization-engine/Suppress-Recommendation.ps1 +++ b/src/optimization-engine/Suppress-Recommendation.ps1 @@ -114,9 +114,9 @@ $connectionSuccess = $false do { $tries++ try { - $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/" + $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/" -AsSecureString $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$databaseServer,1433;Database=$databaseName;Encrypt=True;Connection Timeout=$SqlTimeout;") - $Conn.AccessToken = $dbToken.Token + $Conn.AccessToken = $dbToken.Token | ConvertFrom-SecureString -AsPlainText $Conn.Open() $Cmd=new-object system.Data.SqlClient.SqlCommand $Cmd.Connection = $Conn @@ -261,9 +261,9 @@ if ("Y", "y" -contains $continueInput) $sqlStatement = "INSERT INTO [$suppressionsTable] VALUES (NEWID(), '$($controlRows.RecommendationSubTypeId)', '$suppressionType', $scope, GETDATE(), $endDate, '$author', '$notes', 1)" - $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/" + $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/" -AsSecureString $Conn2 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$databaseServer,1433;Database=$databaseName;Encrypt=True;Connection Timeout=$SqlTimeout;") - $Conn2.AccessToken = $dbToken.Token + $Conn2.AccessToken = $dbToken.Token | ConvertFrom-SecureString -AsPlainText $Conn2.Open() $Cmd=new-object system.Data.SqlClient.SqlCommand diff --git a/src/optimization-engine/azuredeploy-nested.bicep b/src/optimization-engine/azuredeploy-nested.bicep index 0cd2a7d96..a689361c1 100644 --- a/src/optimization-engine/azuredeploy-nested.bicep +++ b/src/optimization-engine/azuredeploy-nested.bicep @@ -100,7 +100,7 @@ param recommendationsLogAnalyticsIngestJobId string = newGuid() param suppressionsLogAnalyticsIngestJobId string = newGuid() param recommendationsCleanUpJobId string = newGuid() -param roleContributor string = '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c' +param roleContributor string = '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/ba92f5b4-2d11-453d-a403-e96b0029c9fe' @description('Optional. Enable telemetry to track anonymous module usage trends, monitor for bugs, and improve future releases.') param enableDefaultTelemetry bool = true @@ -907,294 +907,294 @@ var psModules = [ var runbooks = [ { name: advisorExportsRunbookName - version: '1.4.2.1' + version: '1.4.3.0' description: 'Exports Azure Advisor recommendations to Blob Storage using the Advisor API' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${advisorExportsRunbookName}.ps1') } { name: argDisksExportsRunbookName - version: '1.3.4.1' + version: '1.3.5.0' description: 'Exports Managed Disks properties to Blob Storage using Azure Resource Graph' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${argDisksExportsRunbookName}.ps1') } { name: argVhdExportsRunbookName - version: '1.1.4.1' + version: '1.1.5.0' description: 'Exports Unmanaged Disks (owned by a VM) properties to Blob Storage using Azure Resource Graph' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${argVhdExportsRunbookName}.ps1') } { name: argVmExportsRunbookName - version: '1.4.4.1' + version: '1.4.5.0' description: 'Exports Virtual Machine properties to Blob Storage using Azure Resource Graph' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${argVmExportsRunbookName}.ps1') } { name: argVmssExportsRunbookName - version: '1.0.2.1' + version: '1.0.3.0' description: 'Exports VMSS properties to Blob Storage using Azure Resource Graph' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${argVmssExportsRunbookName}.ps1') } { name: argAvailSetExportsRunbookName - version: '1.1.4.1' + version: '1.1.5.0' description: 'Exports Availability Set properties to Blob Storage using Azure Resource Graph' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${argAvailSetExportsRunbookName}.ps1') } { name: consumptionExportsRunbookName - version: '2.1.0.0' + version: '2.1.1.0' description: 'Exports Azure Consumption events to Blob Storage using Azure Consumption API' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${consumptionExportsRunbookName}.ps1') } { name: aadObjectsExportsRunbookName - version: '1.3.0.0' + version: '1.3.1.0' description: 'Exports Azure AAD Objects to Blob Storage using Azure ARM API' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${aadObjectsExportsRunbookName}.ps1') } { name: argLoadBalancersExportsRunbookName - version: '1.1.4.1' + version: '1.1.5.0' description: 'Exports Load Balancer properties to Blob Storage using Azure Resource Graph' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${argLoadBalancersExportsRunbookName}.ps1') } { name: argAppGWsExportsRunbookName - version: '1.1.4.1' + version: '1.1.5.0' description: 'Exports Application Gateway properties to Blob Storage using Azure Resource Graph' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${argAppGWsExportsRunbookName}.ps1') } { name: argResContainersExportsRunbookName - version: '1.0.5.1' + version: '1.0.6.0' description: 'Exports Resource Containers properties to Blob Storage using Azure Resource Graph' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${argResContainersExportsRunbookName}.ps1') } { name: rbacExportsRunbookName - version: '1.1.0.0' + version: '1.1.1.0' description: 'Exports RBAC assignments to Blob Storage using ARM and Microsoft Entra' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${rbacExportsRunbookName}.ps1') } { name: argNICExportsRunbookName - version: '1.0.2.1' + version: '1.0.3.0' description: 'Exports NIC properties to Blob Storage using Azure Resource Graph' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${argNICExportsRunbookName}.ps1') } { name: argNSGExportsRunbookName - version: '1.0.2.1' + version: '1.0.3.0' description: 'Exports NSG properties to Blob Storage using Azure Resource Graph' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${argNSGExportsRunbookName}.ps1') } { name: argPublicIpExportsRunbookName - version: '1.0.2.1' + version: '1.0.3.0' description: 'Exports Public IP properties to Blob Storage using Azure Resource Graph' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${argPublicIpExportsRunbookName}.ps1') } { name: argVNetExportsRunbookName - version: '1.0.2.1' + version: '1.0.3.0' description: 'Exports VNet properties to Blob Storage using Azure Resource Graph' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${argVNetExportsRunbookName}.ps1') } { name: argSqlDbExportsRunbookName - version: '1.0.2.1' + version: '1.0.3.0' description: 'Exports SQL DB properties to Blob Storage using Azure Resource Graph' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${argSqlDbExportsRunbookName}.ps1') } { name: policyStateExportsRunbookName - version: '1.0.3.1' + version: '1.0.4.0' description: 'Exports Azure Policy State to Blob Storage' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${policyStateExportsRunbookName}.ps1') } { name: monitorExportsRunbookName - version: '1.0.2.1' + version: '1.0.3.0' description: 'Exports Azure Monitor metrics to Blob Storage' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${monitorExportsRunbookName}.ps1') } { name: argAppServicePlanExportsRunbookName - version: '1.0.1.1' + version: '1.0.2.0' description: 'Exports App Service Plan properties to Blob Storage using Azure Resource Graph' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${argAppServicePlanExportsRunbookName}.ps1') } { name: reservationsExportsRunbookName - version: '1.1.2.1' + version: '1.1.3.0' description: 'Exports Reservations Usage to Blob Storage using the EA or MCA APIs' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${reservationsExportsRunbookName}.ps1') } { name: reservationsPriceExportsRunbookName - version: '1.0.1.1' + version: '1.0.2.0' description: 'Exports Reservations Prices to Blob Storage using the Retail Prices API' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${reservationsPriceExportsRunbookName}.ps1') } { name: priceSheetExportsRunbookName - version: '1.1.1.1' + version: '1.1.2.0' description: 'Exports Price Sheet to Blob Storage using the EA or MCA APIs' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${priceSheetExportsRunbookName}.ps1') } { name: savingsPlansExportsRunbookName - version: '1.0.0.0' + version: '1.0.1.0' description: 'Exports Savings Plans Usage to Blob Storage using the EA or MCA APIs' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${savingsPlansExportsRunbookName}.ps1') } { name: csvIngestRunbookName - version: '1.6.0.0' + version: '1.6.1.0' description: 'Ingests CSV blobs as custom logs to Log Analytics' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/data-collection/${csvIngestRunbookName}.ps1') } { name: unattachedDisksRecommendationsRunbookName - version: '2.5.0.0' + version: '2.5.1.0' description: 'Generates unattached disks recommendations' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/recommendations/${unattachedDisksRecommendationsRunbookName}.ps1') } { name: advisorCostAugmentedRecommendationsRunbookName - version: '2.10.0.0' + version: '2.10.1.0' description: 'Generates augmented Advisor Cost recommendations' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/recommendations/${advisorCostAugmentedRecommendationsRunbookName}.ps1') } { name: advisorAsIsRecommendationsRunbookName - version: '1.6.0.0' + version: '1.6.1.0' description: 'Generates all types of Advisor recommendations' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/recommendations/${advisorAsIsRecommendationsRunbookName}.ps1') } { name: vmsHARecommendationsRunbookName - version: '1.1.0.0' + version: '1.1.1.0' description: 'Generates VMs High Availability recommendations' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/recommendations/${vmsHARecommendationsRunbookName}.ps1') } { name: vmOptimizationsRecommendationsRunbookName - version: '1.1.0.0' + version: '1.1.1.0' description: 'Generates VM optimizations recommendations' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/recommendations/${vmOptimizationsRecommendationsRunbookName}.ps1') } { name: aadExpiringCredsRecommendationsRunbookName - version: '1.2.0.0' + version: '1.2.1.0' description: 'Generates AAD Objects with expiring credentials recommendations' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/recommendations/${aadExpiringCredsRecommendationsRunbookName}.ps1') } { name: unusedLBsRecommendationsRunbookName - version: '1.3.0.0' + version: '1.3.1.0' description: 'Generates unused Load Balancers recommendations' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/recommendations/${unusedLBsRecommendationsRunbookName}.ps1') } { name: unusedAppGWsRecommendationsRunbookName - version: '1.3.0.0' + version: '1.3.1.0' description: 'Generates unused Application Gateways recommendations' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/recommendations/${unusedAppGWsRecommendationsRunbookName}.ps1') } { name: armOptimizationsRecommendationsRunbookName - version: '1.1.0.0' + version: '1.1.1.0' description: 'Generates ARM optimizations recommendations' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/recommendations/${armOptimizationsRecommendationsRunbookName}.ps1') } { name: vnetOptimizationsRecommendationsRunbookName - version: '1.1.0.0' + version: '1.1.1.0' description: 'Generates Virtual Network optimizations recommendations' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/recommendations/${vnetOptimizationsRecommendationsRunbookName}.ps1') } { name: vmssOptimizationsRecommendationsRunbookName - version: '1.2.0.0' + version: '1.2.1.0' description: 'Generates VM Scale Set optimizations recommendations' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/recommendations/${vmssOptimizationsRecommendationsRunbookName}.ps1') } { name: sqldbOptimizationsRecommendationsRunbookName - version: '1.2.0.0' + version: '1.2.1.0' description: 'Generates SQL DB optimizations recommendations' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/recommendations/${sqldbOptimizationsRecommendationsRunbookName}.ps1') } { name: storageOptimizationsRecommendationsRunbookName - version: '1.1.0.0' + version: '1.1.1.0' description: 'Generates Storage Account optimizations recommendations' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/recommendations/${storageOptimizationsRecommendationsRunbookName}.ps1') } { name: appServiceOptimizationsRecommendationsRunbookName - version: '1.1.0.0' + version: '1.1.1.0' description: 'Generates App Service optimizations recommendations' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/recommendations/${appServiceOptimizationsRecommendationsRunbookName}.ps1') } { name: diskOptimizationsRecommendationsRunbookName - version: '1.2.0.0' + version: '1.2.1.0' description: 'Generates Disk optimizations recommendations' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/recommendations/${diskOptimizationsRecommendationsRunbookName}.ps1') } { name: recommendationsIngestRunbookName - version: '1.7.0.0' + version: '1.7.1.0' description: 'Ingests JSON-based recommendations into an Azure SQL Database' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/recommendations/${recommendationsIngestRunbookName}.ps1') } { name: recommendationsLogAnalyticsIngestRunbookName - version: '1.1.0.0' + version: '1.1.1.0' description: 'Ingests JSON-based recommendations into Log Analytics' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/recommendations/${recommendationsLogAnalyticsIngestRunbookName}.ps1') @@ -1208,21 +1208,21 @@ var runbooks = [ } { name: advisorRightSizeFilteredRemediationRunbookName - version: '1.3.0.0' + version: '1.3.1.0' description: 'Remediates Azure Advisor right-size recommendations given fit and tag filters' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/remediations/${advisorRightSizeFilteredRemediationRunbookName}.ps1') } { name: longDeallocatedVMsFilteredRemediationRunbookName - version: '1.1.0.0' + version: '1.1.1.0' description: 'Remediates long-deallocated VMs recommendations given fit and tag filters' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/remediations/${longDeallocatedVMsFilteredRemediationRunbookName}.ps1') } { name: unattachedDisksFilteredRemediationRunbookName - version: '1.1.0.0' + version: '1.1.1.0' description: 'Remediates unattached disks recommendations given fit and tag filters' type: 'PowerShell' scriptUri: uri(templateLocation, 'runbooks/remediations/${unattachedDisksFilteredRemediationRunbookName}.ps1') @@ -1251,16 +1251,6 @@ var automationVariables = [ description: 'The Azure Storage Account where data source exports are dumped to' value: '"${storageAccountName}"' } - { - name: 'AzureOptimization_StorageSinkRG' - description: 'The resource group for the Azure Storage Account sink' - value: '"${resourceGroup().name}"' - } - { - name: 'AzureOptimization_StorageSinkSubId' - description: 'The subscription Id for the Azure Storage Account sink' - value: '"${subscription().subscriptionId}"' - } { name: 'AzureOptimization_ConsumptionOffsetDays' description: 'The offset (in days) for querying for consumption data' diff --git a/src/optimization-engine/runbooks/data-collection/Export-AADObjectsToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-AADObjectsToBlobStorage.ps1 index bbe9bc594..1347d081e 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-AADObjectsToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-AADObjectsToBlobStorage.ps1 @@ -97,8 +97,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -158,8 +158,8 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-ARGAppGatewayPropertiesToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-ARGAppGatewayPropertiesToBlobStorage.ps1 index 226208aa8..5be7b1c69 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-ARGAppGatewayPropertiesToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-ARGAppGatewayPropertiesToBlobStorage.ps1 @@ -30,8 +30,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -74,8 +74,8 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-ARGAppServicePlanPropertiesToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-ARGAppServicePlanPropertiesToBlobStorage.ps1 index b81e05bbd..8e4fed27d 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-ARGAppServicePlanPropertiesToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-ARGAppServicePlanPropertiesToBlobStorage.ps1 @@ -35,8 +35,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -79,8 +79,8 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-ARGAvailabilitySetPropertiesToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-ARGAvailabilitySetPropertiesToBlobStorage.ps1 index d13e82b75..f62883987 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-ARGAvailabilitySetPropertiesToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-ARGAvailabilitySetPropertiesToBlobStorage.ps1 @@ -30,8 +30,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -74,8 +74,8 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-ARGLoadBalancerPropertiesToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-ARGLoadBalancerPropertiesToBlobStorage.ps1 index 103ba7cf6..f1eadfc1b 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-ARGLoadBalancerPropertiesToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-ARGLoadBalancerPropertiesToBlobStorage.ps1 @@ -30,8 +30,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -74,8 +74,8 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-ARGManagedDisksPropertiesToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-ARGManagedDisksPropertiesToBlobStorage.ps1 index 3ba66de18..1fd66721f 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-ARGManagedDisksPropertiesToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-ARGManagedDisksPropertiesToBlobStorage.ps1 @@ -30,8 +30,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -74,8 +74,8 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-ARGNICPropertiesToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-ARGNICPropertiesToBlobStorage.ps1 index 6ae3d1946..d5b91b94c 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-ARGNICPropertiesToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-ARGNICPropertiesToBlobStorage.ps1 @@ -35,8 +35,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -79,8 +79,8 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-ARGNSGPropertiesToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-ARGNSGPropertiesToBlobStorage.ps1 index 763dbe32d..b5da838ea 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-ARGNSGPropertiesToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-ARGNSGPropertiesToBlobStorage.ps1 @@ -35,8 +35,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -79,8 +79,8 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-ARGPublicIpPropertiesToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-ARGPublicIpPropertiesToBlobStorage.ps1 index d33a8330f..063d03cb2 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-ARGPublicIpPropertiesToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-ARGPublicIpPropertiesToBlobStorage.ps1 @@ -35,8 +35,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -79,8 +79,8 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-ARGResourceContainersPropertiesToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-ARGResourceContainersPropertiesToBlobStorage.ps1 index b7609cda6..329b5031c 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-ARGResourceContainersPropertiesToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-ARGResourceContainersPropertiesToBlobStorage.ps1 @@ -35,8 +35,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -79,8 +79,8 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-ARGSqlDatabasePropertiesToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-ARGSqlDatabasePropertiesToBlobStorage.ps1 index adf0979eb..cdb1e3b36 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-ARGSqlDatabasePropertiesToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-ARGSqlDatabasePropertiesToBlobStorage.ps1 @@ -35,8 +35,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -79,8 +79,8 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-ARGUnmanagedDisksPropertiesToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-ARGUnmanagedDisksPropertiesToBlobStorage.ps1 index e48c45406..734e05a02 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-ARGUnmanagedDisksPropertiesToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-ARGUnmanagedDisksPropertiesToBlobStorage.ps1 @@ -30,8 +30,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -74,8 +74,8 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-ARGVMSSPropertiesToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-ARGVMSSPropertiesToBlobStorage.ps1 index 81f39771a..6a2878c3b 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-ARGVMSSPropertiesToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-ARGVMSSPropertiesToBlobStorage.ps1 @@ -35,8 +35,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -79,8 +79,8 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-ARGVNetPropertiesToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-ARGVNetPropertiesToBlobStorage.ps1 index 94301bfad..0a252e721 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-ARGVNetPropertiesToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-ARGVNetPropertiesToBlobStorage.ps1 @@ -35,8 +35,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -79,8 +79,8 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-ARGVirtualMachinesPropertiesToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-ARGVirtualMachinesPropertiesToBlobStorage.ps1 index a30511aad..1a761c8d5 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-ARGVirtualMachinesPropertiesToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-ARGVirtualMachinesPropertiesToBlobStorage.ps1 @@ -35,8 +35,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -79,8 +79,8 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-AdvisorRecommendationsToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-AdvisorRecommendationsToBlobStorage.ps1 index cc82c3e90..0f4a9903b 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-AdvisorRecommendationsToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-AdvisorRecommendationsToBlobStorage.ps1 @@ -30,8 +30,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -79,8 +79,8 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-AzMonitorMetricsToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-AzMonitorMetricsToBlobStorage.ps1 index c673eaf9b..eae6d89b1 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-AzMonitorMetricsToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-AzMonitorMetricsToBlobStorage.ps1 @@ -53,8 +53,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -97,8 +97,8 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-ConsumptionToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-ConsumptionToBlobStorage.ps1 index 1d359ac44..0c68d965d 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-ConsumptionToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-ConsumptionToBlobStorage.ps1 @@ -280,8 +280,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -370,8 +370,8 @@ else if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-PolicyComplianceToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-PolicyComplianceToBlobStorage.ps1 index d287e7b6b..ea6177169 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-PolicyComplianceToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-PolicyComplianceToBlobStorage.ps1 @@ -39,8 +39,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -83,8 +83,8 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-PriceSheetToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-PriceSheetToBlobStorage.ps1 index e315cd995..13f0f9e4f 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-PriceSheetToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-PriceSheetToBlobStorage.ps1 @@ -61,8 +61,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -107,8 +107,8 @@ else if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-RBACAssignmentsToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-RBACAssignmentsToBlobStorage.ps1 index a9280d5a5..64be55332 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-RBACAssignmentsToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-RBACAssignmentsToBlobStorage.ps1 @@ -27,8 +27,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -69,8 +69,8 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-ReservationsPriceToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-ReservationsPriceToBlobStorage.ps1 index 9e4fa5554..95201d301 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-ReservationsPriceToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-ReservationsPriceToBlobStorage.ps1 @@ -40,8 +40,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -78,8 +78,8 @@ else if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-ReservationsUsageToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-ReservationsUsageToBlobStorage.ps1 index 80cdb3985..540bfe5bf 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-ReservationsUsageToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-ReservationsUsageToBlobStorage.ps1 @@ -42,8 +42,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -102,8 +102,8 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Export-SavingsPlansUsageToBlobStorage.ps1 b/src/optimization-engine/runbooks/data-collection/Export-SavingsPlansUsageToBlobStorage.ps1 index a5eb70ab2..39e4d23e4 100644 --- a/src/optimization-engine/runbooks/data-collection/Export-SavingsPlansUsageToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Export-SavingsPlansUsageToBlobStorage.ps1 @@ -36,8 +36,8 @@ if ($authenticationOption -eq "UserAssignedManagedIdentity") } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue if (-not($storageAccountSinkEnv)) { @@ -94,8 +94,8 @@ switch ($authenticationOption) { if (-not($storageAccountSinkKey)) { Write-Output "Getting Storage Account context with login" - Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId - $saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + + $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment } else { diff --git a/src/optimization-engine/runbooks/data-collection/Ingest-OptimizationCSVExportsToLogAnalytics.ps1 b/src/optimization-engine/runbooks/data-collection/Ingest-OptimizationCSVExportsToLogAnalytics.ps1 index bab858192..dc6a6206f 100644 --- a/src/optimization-engine/runbooks/data-collection/Ingest-OptimizationCSVExportsToLogAnalytics.ps1 +++ b/src/optimization-engine/runbooks/data-collection/Ingest-OptimizationCSVExportsToLogAnalytics.ps1 @@ -39,8 +39,8 @@ if ([string]::IsNullOrEmpty($lognamePrefix)) $lognamePrefix = "AzureOptimization" } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkContainer = $StorageSinkContainer $StorageBlobsPageSize = [int] (Get-AutomationVariable -Name "AzureOptimization_StorageBlobsPageSize" -ErrorAction SilentlyContinue) if (-not($StorageBlobsPageSize -gt 0)) @@ -142,15 +142,15 @@ $azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1) # get reference to storage sink Write-Output "Getting blobs list from $storageAccountSink storage account ($storageAccountSinkContainer container)..." -Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId -$sa = Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink + +$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment $allblobs = @() $continuationToken = $null do { - $blobs = Get-AzStorageBlob -Container $storageAccountSinkContainer -MaxCount $StorageBlobsPageSize -ContinuationToken $continuationToken -Context $sa.Context | Sort-Object -Property LastModified + $blobs = Get-AzStorageBlob -Container $storageAccountSinkContainer -MaxCount $StorageBlobsPageSize -ContinuationToken $continuationToken -Context $saCtx | Sort-Object -Property LastModified if ($blobs.Count -le 0) { break } $allblobs += $blobs $continuationToken = $blobs[$blobs.Count -1].ContinuationToken; @@ -226,7 +226,7 @@ foreach ($blob in $unprocessedBlobs) { $newProcessedTime = $blob.LastModified.UtcDateTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "About to process $($blob.Name)..." $blobFilePath = "$env:TEMP\$($blob.Name)" - Get-AzStorageBlobContent -CloudBlob $blob.ICloudBlob -Context $sa.Context -Force -Destination $blobFilePath | Out-Null + Get-AzStorageBlobContent -CloudBlob $blob.ICloudBlob -Context $saCtx -Force -Destination $blobFilePath | Out-Null $r = [IO.File]::OpenText($blobFilePath) diff --git a/src/optimization-engine/runbooks/recommendations/Ingest-RecommendationsToLogAnalytics.ps1 b/src/optimization-engine/runbooks/recommendations/Ingest-RecommendationsToLogAnalytics.ps1 index 075c57b85..4580d5902 100644 --- a/src/optimization-engine/runbooks/recommendations/Ingest-RecommendationsToLogAnalytics.ps1 +++ b/src/optimization-engine/runbooks/recommendations/Ingest-RecommendationsToLogAnalytics.ps1 @@ -38,8 +38,8 @@ $SqlTimeout = 120 $LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl" $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" @@ -142,8 +142,8 @@ $azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1) # get reference to storage sink Write-Output "Getting reference to $storageAccountSink storage account (recommendations exports sink)" -Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId -$saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + +$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment $allblobs = @() diff --git a/src/optimization-engine/runbooks/recommendations/Ingest-RecommendationsToSQLServer.ps1 b/src/optimization-engine/runbooks/recommendations/Ingest-RecommendationsToSQLServer.ps1 index 9341b91a8..8772352d1 100644 --- a/src/optimization-engine/runbooks/recommendations/Ingest-RecommendationsToSQLServer.ps1 +++ b/src/optimization-engine/runbooks/recommendations/Ingest-RecommendationsToSQLServer.ps1 @@ -29,8 +29,8 @@ if (-not($ChunkSize -gt 0)) $SqlTimeout = 120 $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" @@ -59,8 +59,8 @@ $azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1) # get reference to storage sink Write-Output "Getting reference to $storageAccountSink storage account (recommendations exports sink)" -Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId -$saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + +$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment $allblobs = @() diff --git a/src/optimization-engine/runbooks/recommendations/Recommend-AADExpiringCredentialsToBlobStorage.ps1 b/src/optimization-engine/runbooks/recommendations/Recommend-AADExpiringCredentialsToBlobStorage.ps1 index 1a7f04c4f..8bd5f2f45 100644 --- a/src/optimization-engine/runbooks/recommendations/Recommend-AADExpiringCredentialsToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/recommendations/Recommend-AADExpiringCredentialsToBlobStorage.ps1 @@ -21,8 +21,8 @@ $workspaceId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWork $workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceSubId" $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" @@ -110,8 +110,8 @@ $recommendationSearchTimeSpan = 1 # Grab a context reference to the Storage Account where the recommendations file will be stored -Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId -$sa = Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink + +$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId) { @@ -239,7 +239,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -355,7 +355,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." diff --git a/src/optimization-engine/runbooks/recommendations/Recommend-ARMOptimizationsToBlobStorage.ps1 b/src/optimization-engine/runbooks/recommendations/Recommend-ARMOptimizationsToBlobStorage.ps1 index 145ffed27..555950094 100644 --- a/src/optimization-engine/runbooks/recommendations/Recommend-ARMOptimizationsToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/recommendations/Recommend-ARMOptimizationsToBlobStorage.ps1 @@ -21,8 +21,8 @@ $workspaceId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWork $workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceSubId" $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" @@ -161,8 +161,8 @@ $recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart # Grab a context reference to the Storage Account where the recommendations file will be stored -Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId -$sa = Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink + +$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId) { @@ -283,7 +283,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -379,7 +379,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -501,7 +501,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." diff --git a/src/optimization-engine/runbooks/recommendations/Recommend-AdvisorAsIsToBlobStorage.ps1 b/src/optimization-engine/runbooks/recommendations/Recommend-AdvisorAsIsToBlobStorage.ps1 index 0c2387f09..f37a76767 100644 --- a/src/optimization-engine/runbooks/recommendations/Recommend-AdvisorAsIsToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/recommendations/Recommend-AdvisorAsIsToBlobStorage.ps1 @@ -19,8 +19,8 @@ $workspaceId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWork $workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceSubId" $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" @@ -154,8 +154,8 @@ $Conn.Dispose() # Grab a context reference to the Storage Account where the recommendations file will be stored -Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId -$sa = Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink + +$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId) { @@ -304,7 +304,7 @@ Write-Output "Uploading $jsonExportPath to blob storage..." $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json" }; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." diff --git a/src/optimization-engine/runbooks/recommendations/Recommend-AdvisorCostAugmentedToBlobStorage.ps1 b/src/optimization-engine/runbooks/recommendations/Recommend-AdvisorCostAugmentedToBlobStorage.ps1 index 5720fc66e..d5e11aef1 100644 --- a/src/optimization-engine/runbooks/recommendations/Recommend-AdvisorCostAugmentedToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/recommendations/Recommend-AdvisorCostAugmentedToBlobStorage.ps1 @@ -99,8 +99,8 @@ $workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogA $workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceTenantId" $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" @@ -301,8 +301,8 @@ $recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart # Grab a context reference to the Storage Account where the recommendations file will be stored -Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId -$sa = Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink + +$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId) { @@ -892,7 +892,7 @@ Write-Output "Uploading $jsonExportPath to blob storage..." $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json" }; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." diff --git a/src/optimization-engine/runbooks/recommendations/Recommend-AppServiceOptimizationsToBlobStorage.ps1 b/src/optimization-engine/runbooks/recommendations/Recommend-AppServiceOptimizationsToBlobStorage.ps1 index a095e390d..2fb7f26b7 100644 --- a/src/optimization-engine/runbooks/recommendations/Recommend-AppServiceOptimizationsToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/recommendations/Recommend-AppServiceOptimizationsToBlobStorage.ps1 @@ -24,8 +24,8 @@ $workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogA $workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceTenantId" $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" @@ -161,8 +161,8 @@ $recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart # Grab a context reference to the Storage Account where the recommendations file will be stored -Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId -$sa = Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink + +$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId) { @@ -344,7 +344,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -533,7 +533,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -679,7 +679,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." diff --git a/src/optimization-engine/runbooks/recommendations/Recommend-DiskOptimizationsToBlobStorage.ps1 b/src/optimization-engine/runbooks/recommendations/Recommend-DiskOptimizationsToBlobStorage.ps1 index 8ed919e9f..a92155592 100644 --- a/src/optimization-engine/runbooks/recommendations/Recommend-DiskOptimizationsToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/recommendations/Recommend-DiskOptimizationsToBlobStorage.ps1 @@ -39,8 +39,8 @@ $workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogA $workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceTenantId" $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" @@ -158,8 +158,8 @@ $recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart # Grab a context reference to the Storage Account where the recommendations file will be stored -Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId -$sa = Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink + +$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId) { @@ -527,7 +527,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." diff --git a/src/optimization-engine/runbooks/recommendations/Recommend-SqlDbOptimizationsToBlobStorage.ps1 b/src/optimization-engine/runbooks/recommendations/Recommend-SqlDbOptimizationsToBlobStorage.ps1 index a2c509645..de6634e22 100644 --- a/src/optimization-engine/runbooks/recommendations/Recommend-SqlDbOptimizationsToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/recommendations/Recommend-SqlDbOptimizationsToBlobStorage.ps1 @@ -24,8 +24,8 @@ $workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogA $workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceTenantId" $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" @@ -134,8 +134,8 @@ $recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart # Grab a context reference to the Storage Account where the recommendations file will be stored -Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId -$sa = Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink + +$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId) { @@ -288,7 +288,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -430,7 +430,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." diff --git a/src/optimization-engine/runbooks/recommendations/Recommend-StorageAccountOptimizationsToBlobStorage.ps1 b/src/optimization-engine/runbooks/recommendations/Recommend-StorageAccountOptimizationsToBlobStorage.ps1 index 313239419..cbaebfdf9 100644 --- a/src/optimization-engine/runbooks/recommendations/Recommend-StorageAccountOptimizationsToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/recommendations/Recommend-StorageAccountOptimizationsToBlobStorage.ps1 @@ -56,8 +56,8 @@ $workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogA $workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceTenantId" $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" @@ -162,8 +162,8 @@ $recommendationSearchTimeSpan = $growthLookbackDays + $consumptionOffsetDaysStar # Grab a context reference to the Storage Account where the recommendations file will be stored -Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId -$sa = Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink + +$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId) { @@ -317,7 +317,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." diff --git a/src/optimization-engine/runbooks/recommendations/Recommend-UnattachedDisksToBlobStorage.ps1 b/src/optimization-engine/runbooks/recommendations/Recommend-UnattachedDisksToBlobStorage.ps1 index e1e3a2140..df4cfdd7f 100644 --- a/src/optimization-engine/runbooks/recommendations/Recommend-UnattachedDisksToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/recommendations/Recommend-UnattachedDisksToBlobStorage.ps1 @@ -24,8 +24,8 @@ $workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogA $workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceTenantId" $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" @@ -118,8 +118,8 @@ $recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart # Grab a context reference to the Storage Account where the recommendations file will be stored -Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId -$sa = Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink + +$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId) { @@ -261,7 +261,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." diff --git a/src/optimization-engine/runbooks/recommendations/Recommend-UnusedAppGWsToBlobStorage.ps1 b/src/optimization-engine/runbooks/recommendations/Recommend-UnusedAppGWsToBlobStorage.ps1 index e1edc9dd9..cf6af1268 100644 --- a/src/optimization-engine/runbooks/recommendations/Recommend-UnusedAppGWsToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/recommendations/Recommend-UnusedAppGWsToBlobStorage.ps1 @@ -24,8 +24,8 @@ $workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogA $workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceTenantId" $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" @@ -118,8 +118,8 @@ $recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart # Grab a context reference to the Storage Account where the recommendations file will be stored -Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId -$sa = Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink + +$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId) { @@ -262,7 +262,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." diff --git a/src/optimization-engine/runbooks/recommendations/Recommend-UnusedLoadBalancersToBlobStorage.ps1 b/src/optimization-engine/runbooks/recommendations/Recommend-UnusedLoadBalancersToBlobStorage.ps1 index b4907ca6b..2404b12f1 100644 --- a/src/optimization-engine/runbooks/recommendations/Recommend-UnusedLoadBalancersToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/recommendations/Recommend-UnusedLoadBalancersToBlobStorage.ps1 @@ -24,8 +24,8 @@ $workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogA $workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceTenantId" $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" @@ -118,8 +118,8 @@ $recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart # Grab a context reference to the Storage Account where the recommendations file will be stored -Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId -$sa = Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink + +$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId) { @@ -267,7 +267,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -388,7 +388,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." diff --git a/src/optimization-engine/runbooks/recommendations/Recommend-VMOptimizationsToBlobStorage.ps1 b/src/optimization-engine/runbooks/recommendations/Recommend-VMOptimizationsToBlobStorage.ps1 index ecf9f55b3..cd2da514d 100644 --- a/src/optimization-engine/runbooks/recommendations/Recommend-VMOptimizationsToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/recommendations/Recommend-VMOptimizationsToBlobStorage.ps1 @@ -24,8 +24,8 @@ $workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogA $workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceTenantId" $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" @@ -122,8 +122,8 @@ $billingInterval = 30 + $consumptionOffsetDays # Grab a context reference to the Storage Account where the recommendations file will be stored -Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId -$sa = Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink + +$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId) { @@ -301,7 +301,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -445,7 +445,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." diff --git a/src/optimization-engine/runbooks/recommendations/Recommend-VMSSOptimizationsToBlobStorage.ps1 b/src/optimization-engine/runbooks/recommendations/Recommend-VMSSOptimizationsToBlobStorage.ps1 index ce6574af4..122620177 100644 --- a/src/optimization-engine/runbooks/recommendations/Recommend-VMSSOptimizationsToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/recommendations/Recommend-VMSSOptimizationsToBlobStorage.ps1 @@ -99,8 +99,8 @@ $workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogA $workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceTenantId" $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" @@ -239,8 +239,8 @@ $recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart # Grab a context reference to the Storage Account where the recommendations file will be stored -Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId -$sa = Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink + +$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId) { @@ -580,7 +580,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -781,7 +781,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." diff --git a/src/optimization-engine/runbooks/recommendations/Recommend-VMsHighAvailabilityToBlobStorage.ps1 b/src/optimization-engine/runbooks/recommendations/Recommend-VMsHighAvailabilityToBlobStorage.ps1 index 15f0e5349..ddb29d768 100644 --- a/src/optimization-engine/runbooks/recommendations/Recommend-VMsHighAvailabilityToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/recommendations/Recommend-VMsHighAvailabilityToBlobStorage.ps1 @@ -21,8 +21,8 @@ $workspaceId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWork $workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceSubId" $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" @@ -111,8 +111,8 @@ $recommendationSearchTimeSpan = 1 # Grab a context reference to the Storage Account where the recommendations file will be stored -Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId -$sa = Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink + +$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId) { @@ -233,7 +233,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -353,7 +353,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -481,7 +481,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -609,7 +609,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -726,7 +726,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -846,7 +846,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -972,7 +972,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -1091,7 +1091,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -1223,7 +1223,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -1343,7 +1343,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -1460,7 +1460,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." diff --git a/src/optimization-engine/runbooks/recommendations/Recommend-VNetOptimizationsToBlobStorage.ps1 b/src/optimization-engine/runbooks/recommendations/Recommend-VNetOptimizationsToBlobStorage.ps1 index e506b372e..b5dc9d01e 100644 --- a/src/optimization-engine/runbooks/recommendations/Recommend-VNetOptimizationsToBlobStorage.ps1 +++ b/src/optimization-engine/runbooks/recommendations/Recommend-VNetOptimizationsToBlobStorage.ps1 @@ -24,8 +24,8 @@ $workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogA $workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceTenantId" $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "recommendationsexports" @@ -158,8 +158,8 @@ $recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart # Grab a context reference to the Storage Account where the recommendations file will be stored -Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId -$sa = Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink + +$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId) { @@ -284,7 +284,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -410,7 +410,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -532,7 +532,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -651,7 +651,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -810,7 +810,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -997,7 +997,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -1169,7 +1169,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." @@ -1313,7 +1313,7 @@ $recommendations | ConvertTo-Json | Out-File $jsonExportPath $jsonBlobName = $jsonExportPath $jsonProperties = @{"ContentType" = "application/json"}; -Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $sa.Context -Force +Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..." diff --git a/src/optimization-engine/runbooks/remediations/Remediate-AdvisorRightSizeFiltered.ps1 b/src/optimization-engine/runbooks/remediations/Remediate-AdvisorRightSizeFiltered.ps1 index 9642fe141..3627a2578 100644 --- a/src/optimization-engine/runbooks/remediations/Remediate-AdvisorRightSizeFiltered.ps1 +++ b/src/optimization-engine/runbooks/remediations/Remediate-AdvisorRightSizeFiltered.ps1 @@ -27,8 +27,8 @@ if ([string]::IsNullOrEmpty($sqldatabase)) $sqldatabase = "azureoptimization" } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RemediationLogsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "remediationlogs" @@ -76,8 +76,8 @@ $cloudDetails = Get-AzEnvironment -Name $CloudEnvironment $azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1) # get reference to storage sink -Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId -$saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + +$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment Write-Output "Querying for right-size recommendations with fit score >= $minFitScore made consecutively for the last $minWeeksInARow weeks." diff --git a/src/optimization-engine/runbooks/remediations/Remediate-LongDeallocatedVMsFiltered.ps1 b/src/optimization-engine/runbooks/remediations/Remediate-LongDeallocatedVMsFiltered.ps1 index a81d892be..b22c1dc30 100644 --- a/src/optimization-engine/runbooks/remediations/Remediate-LongDeallocatedVMsFiltered.ps1 +++ b/src/optimization-engine/runbooks/remediations/Remediate-LongDeallocatedVMsFiltered.ps1 @@ -27,8 +27,8 @@ if ([string]::IsNullOrEmpty($sqldatabase)) $sqldatabase = "azureoptimization" } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RemediationLogsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "remediationlogs" @@ -76,8 +76,8 @@ $cloudDetails = Get-AzEnvironment -Name $CloudEnvironment $azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1) # get reference to storage sink -Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId -$saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + +$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment Write-Output "Querying for long-deallocated recommendations with fit score >= $minFitScore made consecutively for the last $minWeeksInARow weeks." diff --git a/src/optimization-engine/runbooks/remediations/Remediate-UnattachedDisksFiltered.ps1 b/src/optimization-engine/runbooks/remediations/Remediate-UnattachedDisksFiltered.ps1 index dfd151741..69c462294 100644 --- a/src/optimization-engine/runbooks/remediations/Remediate-UnattachedDisksFiltered.ps1 +++ b/src/optimization-engine/runbooks/remediations/Remediate-UnattachedDisksFiltered.ps1 @@ -27,8 +27,8 @@ if ([string]::IsNullOrEmpty($sqldatabase)) $sqldatabase = "azureoptimization" } $storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink" -$storageAccountSinkRG = Get-AutomationVariable -Name "AzureOptimization_StorageSinkRG" -$storageAccountSinkSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_StorageSinkSubId" + + $storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RemediationLogsContainer" -ErrorAction SilentlyContinue if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) { $storageAccountSinkContainer = "remediationlogs" @@ -81,8 +81,8 @@ $cloudDetails = Get-AzEnvironment -Name $CloudEnvironment $azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1) # get reference to storage sink -Select-AzSubscription -SubscriptionId $storageAccountSinkSubscriptionId -$saCtx = (Get-AzStorageAccount -ResourceGroupName $storageAccountSinkRG -Name $storageAccountSink).Context + +$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment Write-Output "Querying for unattached disks recommendations with fit score >= $minFitScore made consecutively for the last $minWeeksInARow weeks." diff --git a/src/optimization-engine/upgrade-manifest.json b/src/optimization-engine/upgrade-manifest.json index 7311e0263..bb91b4512 100644 --- a/src/optimization-engine/upgrade-manifest.json +++ b/src/optimization-engine/upgrade-manifest.json @@ -304,14 +304,14 @@ { "runbook": { "name": "runbooks/data-collection/Ingest-OptimizationCSVExportsToLogAnalytics.ps1", - "version": "1.6.0.0" + "version": "1.6.1.0" }, "source": "dataCollection" }, { "runbook": { "name": "runbooks/recommendations/Ingest-RecommendationsToSQLServer.ps1", - "version": "1.7.0.0" + "version": "1.7.1.0" }, "source": "recommendations", "schedule": "AzureOptimization_IngestRecommendationsWeekly" @@ -319,7 +319,7 @@ { "runbook": { "name": "runbooks/recommendations/Ingest-RecommendationsToLogAnalytics.ps1", - "version": "1.1.0.0" + "version": "1.1.1.0" }, "source": "recommendations", "schedule": "AzureOptimization_IngestRecommendationsWeekly" @@ -345,7 +345,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-AADObjectsToBlobStorage.ps1", - "version": "1.3.0.0" + "version": "1.3.1.0" }, "container": "aadobjectsexports", "requiredVariables": [ @@ -356,7 +356,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-ARGAppGatewayPropertiesToBlobStorage.ps1", - "version": "1.1.4.1" + "version": "1.1.5.0" }, "container": "argappgwexports", "requiredVariables": [ @@ -367,7 +367,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-ARGAvailabilitySetPropertiesToBlobStorage.ps1", - "version": "1.1.4.1" + "version": "1.1.5.0" }, "container": "argavailsetexports", "requiredVariables": [ @@ -378,7 +378,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-ARGLoadBalancerPropertiesToBlobStorage.ps1", - "version": "1.1.4.1" + "version": "1.1.5.0" }, "container": "arglbexports", "requiredVariables": [ @@ -389,7 +389,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-ARGManagedDisksPropertiesToBlobStorage.ps1", - "version": "1.3.4.1" + "version": "1.3.5.0" }, "container": "argdiskexports", "requiredVariables": [ @@ -400,7 +400,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-ARGNICPropertiesToBlobStorage.ps1", - "version": "1.0.2.1" + "version": "1.0.3.0" }, "container": "argnicexports", "requiredVariables": [ @@ -411,7 +411,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-ARGNSGPropertiesToBlobStorage.ps1", - "version": "1.0.2.1" + "version": "1.0.3.0" }, "container": "argnsgexports", "requiredVariables": [ @@ -422,7 +422,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-ARGPublicIpPropertiesToBlobStorage.ps1", - "version": "1.0.2.1" + "version": "1.0.3.0" }, "container": "argpublicipexports", "requiredVariables": [ @@ -433,7 +433,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-ARGResourceContainersPropertiesToBlobStorage.ps1", - "version": "1.0.5.1" + "version": "1.0.6.0" }, "container": "argrescontainersexports", "requiredVariables": [ @@ -444,7 +444,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-ARGUnmanagedDisksPropertiesToBlobStorage.ps1", - "version": "1.1.4.1" + "version": "1.1.5.0" }, "container": "argvhdexports", "requiredVariables": [ @@ -455,7 +455,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-ARGVNetPropertiesToBlobStorage.ps1", - "version": "1.0.2.1" + "version": "1.0.3.0" }, "container": "argvnetexports", "requiredVariables": [ @@ -466,7 +466,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-ARGVirtualMachinesPropertiesToBlobStorage.ps1", - "version": "1.4.4.1" + "version": "1.4.5.0" }, "container": "argvmexports", "requiredVariables": [ @@ -477,7 +477,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-ARGVMSSPropertiesToBlobStorage.ps1", - "version": "1.0.2.1" + "version": "1.0.3.0" }, "container": "argvmssexports", "requiredVariables": [ @@ -488,7 +488,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-ARGSqlDatabasePropertiesToBlobStorage.ps1", - "version": "1.0.2.1" + "version": "1.0.3.0" }, "container": "argsqldbexports", "requiredVariables": [ @@ -499,7 +499,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-ARGAppServicePlanPropertiesToBlobStorage.ps1", - "version": "1.0.1.1" + "version": "1.0.2.0" }, "container": "argappserviceplanexports", "requiredVariables": [ @@ -510,7 +510,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-AdvisorRecommendationsToBlobStorage.ps1", - "version": "1.4.2.1" + "version": "1.4.3.0" }, "container": "advisorexports", "requiredVariables": [ @@ -521,7 +521,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-ConsumptionToBlobStorage.ps1", - "version": "2.1.0.0" + "version": "2.1.1.0" }, "container": "consumptionexports", "requiredVariables": [ @@ -532,7 +532,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-RBACAssignmentsToBlobStorage.ps1", - "version": "1.1.0.0" + "version": "1.1.1.0" }, "container": "rbacexports", "requiredVariables": [ @@ -543,7 +543,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-PolicyComplianceToBlobStorage.ps1", - "version": "1.0.3.1" + "version": "1.0.4.0" }, "container": "policystateexports", "requiredVariables": [ @@ -554,7 +554,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-AzMonitorMetricsToBlobStorage.ps1", - "version": "1.0.2.1" + "version": "1.0.3.0" }, "container": "azmonitorexports", "requiredVariables": [ @@ -689,7 +689,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-PriceSheetToBlobStorage.ps1", - "version": "1.1.1.1" + "version": "1.1.2.0" }, "container": "pricesheetexports", "requiredVariables": [ @@ -704,7 +704,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-ReservationsPriceToBlobStorage.ps1", - "version": "1.0.1.1" + "version": "1.0.2.0" }, "container": "reservationspriceexports", "requiredVariables": [ @@ -719,7 +719,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-ReservationsUsageToBlobStorage.ps1", - "version": "1.1.2.1" + "version": "1.1.3.0" }, "container": "reservationsexports", "requiredVariables": [ @@ -730,7 +730,7 @@ { "runbook": { "name": "runbooks/data-collection/Export-SavingsPlansUsageToBlobStorage.ps1", - "version": "1.0.0.0" + "version": "1.0.1.0" }, "container": "savingsplansexports", "requiredVariables": [ @@ -743,7 +743,7 @@ { "runbook": { "name": "runbooks/recommendations/Recommend-AADExpiringCredentialsToBlobStorage.ps1", - "version": "1.2.0.0" + "version": "1.2.1.0" }, "requiredVariables": [ { @@ -760,7 +760,7 @@ { "runbook": { "name": "runbooks/recommendations/Recommend-AdvisorAsIsToBlobStorage.ps1", - "version": "1.6.0.0" + "version": "1.6.1.0" }, "requiredVariables": [ ], @@ -769,7 +769,7 @@ { "runbook": { "name": "runbooks/recommendations/Recommend-AdvisorCostAugmentedToBlobStorage.ps1", - "version": "2.10.0.0" + "version": "2.10.1.0" }, "requiredVariables": [ { @@ -782,7 +782,7 @@ { "runbook": { "name": "runbooks/recommendations/Recommend-VMOptimizationsToBlobStorage.ps1", - "version": "1.1.0.0" + "version": "1.1.1.0" }, "requiredVariables": [ { @@ -799,7 +799,7 @@ { "runbook": { "name": "runbooks/recommendations/Recommend-UnattachedDisksToBlobStorage.ps1", - "version": "2.5.0.0" + "version": "2.5.1.0" }, "requiredVariables": [ { @@ -812,7 +812,7 @@ { "runbook": { "name": "runbooks/recommendations/Recommend-UnusedAppGWsToBlobStorage.ps1", - "version": "1.3.0.0" + "version": "1.3.1.0" }, "requiredVariables": [ { @@ -825,7 +825,7 @@ { "runbook": { "name": "runbooks/recommendations/Recommend-UnusedLoadBalancersToBlobStorage.ps1", - "version": "1.3.0.0" + "version": "1.3.1.0" }, "requiredVariables": [ { @@ -838,7 +838,7 @@ { "runbook": { "name": "runbooks/recommendations/Recommend-VMsHighAvailabilityToBlobStorage.ps1", - "version": "1.1.0.0" + "version": "1.1.1.0" }, "requiredVariables": [ ], @@ -847,7 +847,7 @@ { "runbook": { "name": "runbooks/recommendations/Recommend-ARMOptimizationsToBlobStorage.ps1", - "version": "1.1.0.0" + "version": "1.1.1.0" }, "requiredVariables": [ { @@ -864,7 +864,7 @@ { "runbook": { "name": "runbooks/recommendations/Recommend-VNetOptimizationsToBlobStorage.ps1", - "version": "1.1.0.0" + "version": "1.1.1.0" }, "requiredVariables": [ { @@ -885,7 +885,7 @@ { "runbook": { "name": "runbooks/recommendations/Recommend-VMSSOptimizationsToBlobStorage.ps1", - "version": "1.2.0.0" + "version": "1.2.1.0" }, "requiredVariables": [ { @@ -906,7 +906,7 @@ { "runbook": { "name": "runbooks/recommendations/Recommend-SqlDbOptimizationsToBlobStorage.ps1", - "version": "1.2.0.0" + "version": "1.2.1.0" }, "requiredVariables": [ { @@ -927,7 +927,7 @@ { "runbook": { "name": "runbooks/recommendations/Recommend-StorageAccountOptimizationsToBlobStorage.ps1", - "version": "1.1.0.0" + "version": "1.1.1.0" }, "requiredVariables": [ { @@ -948,7 +948,7 @@ { "runbook": { "name": "runbooks/recommendations/Recommend-AppServiceOptimizationsToBlobStorage.ps1", - "version": "1.1.0.0" + "version": "1.1.1.0" }, "requiredVariables": [ { @@ -969,7 +969,7 @@ { "runbook": { "name": "runbooks/recommendations/Recommend-DiskOptimizationsToBlobStorage.ps1", - "version": "1.2.0.0" + "version": "1.2.1.0" }, "requiredVariables": [ { @@ -988,7 +988,7 @@ { "runbook": { "name": "runbooks/remediations/Remediate-AdvisorRightSizeFiltered.ps1", - "version": "1.3.0.0" + "version": "1.3.1.0" }, "requiredVariables": [ { @@ -1004,7 +1004,7 @@ { "runbook": { "name": "runbooks/remediations/Remediate-LongDeallocatedVMsFiltered.ps1", - "version": "1.1.0.0" + "version": "1.1.1.0" }, "requiredVariables": [ { @@ -1020,7 +1020,7 @@ { "runbook": { "name": "runbooks/remediations/Remediate-UnattachedDisksFiltered.ps1", - "version": "1.1.0.0" + "version": "1.1.1.0" }, "requiredVariables": [ {