diff --git a/docs-mslearn/toolkit/changelog.md b/docs-mslearn/toolkit/changelog.md index 17f30179c..deab23e42 100644 --- a/docs-mslearn/toolkit/changelog.md +++ b/docs-mslearn/toolkit/changelog.md @@ -3,7 +3,7 @@ title: FinOps toolkit changelog description: Review the latest features and enhancements in the FinOps toolkit, including updates to FinOps hubs, Power BI reports, and more. author: MSBrett ms.author: brettwil -ms.date: 04/04/2026 +ms.date: 04/22/2026 ms.topic: reference ms.service: finops ms.subservice: finops-toolkit @@ -59,6 +59,7 @@ _Released April 2026_ - **Fixed** - Fixed Init-DataFactory deployment script failing when an Event Grid subscription is already provisioning by checking subscription status before attempting subscribe/unsubscribe and polling separately for completion ([#1996](https://github.com/microsoft/finops-toolkit/issues/1996)). - Added row count check in `msexports_ExecuteETL` pipeline to fix error when export files have no rows ([#1535](https://github.com/microsoft/finops-toolkit/issues/1535)). + - Fixed hub deployment failure in US Government cloud regions caused by missing region-to-time-zone mappings and an invalid default value for Data Factory schedule triggers ([#2087](https://github.com/microsoft/finops-toolkit/issues/2087)). ### [FinOps workbooks](workbooks/finops-workbooks-overview.md) v14 diff --git a/src/templates/finops-hub/modules/Microsoft.CostManagement/ManagedExports/timeZones.bicep b/src/templates/finops-hub/modules/Microsoft.CostManagement/ManagedExports/timeZones.bicep index 316208660..85c7db916 100644 --- a/src/templates/finops-hub/modules/Microsoft.CostManagement/ManagedExports/timeZones.bicep +++ b/src/templates/finops-hub/modules/Microsoft.CostManagement/ManagedExports/timeZones.bicep @@ -1,6 +1,11 @@ @description('Optional. The location to use for the managed identity and deployment script to auto-start triggers. Default = (resource group location).') param location string = resourceGroup().location +// Maps Azure region names to Windows time zone IDs accepted by Data Factory schedule triggers. +// The timeZone field requires a Windows time zone ID (e.g. 'UTC'), not the display name +// (e.g. 'Universal Coordinated Time'). An invalid value causes trigger activation to fail with: +// ErrorCode=InvalidWorkflowTriggerRecurrence, ErrorMessage=The recurrence of trigger has an invalid time zone '...'. +// See: https://learn.microsoft.com/azure/data-factory/how-to-create-schedule-trigger#time-zone-option param timezoneobject object = { australiaeast: 'AUS Eastern Standard Time' australiacentral: 'AUS Eastern Standard Time' @@ -32,6 +37,13 @@ param timezoneobject object = { switzerlandwest: 'W. Europe Standard Time' uksouth: 'GMT Standard Time' ukwest: 'GMT Standard Time' + // US Government cloud regions. USGov Arizona does not observe DST — use 'US Mountain Standard Time'. + usdodcentral: 'Central Standard Time' + usdodeast: 'Eastern Standard Time' + usgovvirginia: 'Eastern Standard Time' + usgovtexas: 'Central Standard Time' + usgovarizona: 'US Mountain Standard Time' + usgoviowa: 'Central Standard Time' westcentralus: 'Central Standard Time' westeurope: 'W. Europe Standard Time' westindia: 'India Standard Time' @@ -45,7 +57,10 @@ param utcsecs string = utcNow('ss') var loc = toLower(replace(location, ' ', '')) -var timezone = timezoneobject[?loc] ?? 'Universal Coordinated Time' +// Fallback to 'UTC' — the valid Windows time zone ID. The display name 'Universal Coordinated Time' +// is rejected by Data Factory trigger validation. +// See: https://learn.microsoft.com/azure/data-factory/how-to-create-schedule-trigger#time-zone-option +var timezone = timezoneobject[?loc] ?? 'UTC' output AzureRegion string = location