I got a response from Microsoft support about this.
Root Cause: The hotfix changed the behavior of the CMG maintenance task. It now attempts to update the CMG's Azure Public IP address without specifying an availability zone ("No Zone"). However, if your existing Public IP was originally created with zones (1, 2, 3), Azure's API correctly blocks this change, as a zone configuration cannot be modified after creation. This mismatch causes the recurring DeploymentFailed error every 20 minutes. Workaround Solution: The confirmed resolution is to manually replace the existing zoned Public IP with a new one configured for "No Zone". This is a safe procedure that does not impact existing client connectivity to the CMG.
Their instructions were to recreate the public IP address used by the CMG resource group in Azure using "zone-redundant" for the availability zone. However, this simply recreates the same problem as before. You need to create a non-zonal public IP address, but there isn't a way to do this in the Azure web portal (at least none that I could see). I was eventually able to resolve the issue without re-provisioning the CMG by recreating the public IP address without an availability zone using PowerShell. Afterwards, the maintenance was able to be performed on the CMG successfully and all the errors cleared.
- Stop the CMG and wait for the status to show "stopped"
- In the Azure portal, go to your CMG's resource group and create a temporary public IP address and name it "CMG-Temp-PIP".
- In the same resource group, open the Load Balancer resource, go to Frontend IP configuration, edit the existing frontend IP config, and change the public IP address from the original one to the new temporary one (CMG-Temp-PIP).
- Note the properties of your original public IP address (namely its name and DNS name), then delete it.
- Recreate the original public IP address using the PowerShell commands below (just be sure to update the values in the hashtable). This creates the public IP address without any zone properties (effectively "no zone", which is what you want).
- Repeat step 3, except this time repoint the Load Balancer frontend IP configuration to use the replacement public IP address you created in the previous step.
- Delete the temporary public IP address (CMG-Temp-PIP)
- Start the CMG. You should now see the maintenance complete successfully on the next attempt.
Install-Module Az.Network
Connect-AzAccount
$ip = @{
Name = 'CMG-Original-PIP'
ResourceGroupName = 'Example-CMG-RG'
Location = 'eastus' #'westus', etc.
Sku = 'Standard'
AllocationMethod = 'Static'
IpAddressVersion = 'IPv4'
DomainNameLabel = 'Original-CMG-Label'
}
New-AzPublicIpAddress @ip