How to fix Azure Classic Cloud Service prepare failure while using in-built ARM migration feature
Introduction:
Over the years, Azure Cloud Services (classic) has played a central role in Microsoft’s cloud offerings. However, as technology advances, there arises a demand for more sophisticated and efficient services. To address this, Microsoft has introduced Azure Cloud Services (extended support) as a successor to the classic model. It provides comparable functionality while adding extra benefits and features. This transition is essential for businesses to remain current with technology, enhance their cloud management capabilities, and be well-prepared for the future.
Cloud Services (extended support) is a highly anticipated and essential platform enhancement for Azure early adopter customers who are transitioning to Azure Resource Manager (ARM).
Cloud service in-built migration is a feature that allows you to migrate your cloud service deployments from the classic deployment model to the Azure Resource Manager deployment model. This can help you take advantage of the benefits of the Resource Manager model, such as role-based access control, tags, and policy.
However, sometimes the migration process may fail with an error message that says, "cloud service must be within a virtual network to be migrated". This means that your cloud service is not associated with a virtual network in the classic model, and you need to create one and link it to your cloud service before you can migrate.
In late 2018, Azure started automatically creating new deployments (without customer specified virtual network) into a platform created “default” virtual network. These default virtual networks are hidden from customers.
If you created your cloud service before 2018, it is possible that you never specified a virtual network for it, and it was deployed in the Azure public cloud without any isolation. This can cause problems when you try to migrate your cloud service to the ARM model, because the migration process requires a virtual network to map the network configuration of your cloud service. Hence, any cloud service deployment prior to 2018 would not support in-built migration to CSES.
Therefore, you need to create a virtual network in the classic model and link it to your cloud service before you can migrate it. This will not affect the functionality or availability of your cloud service, but it will enable you to move it to the ARM model more easily.
In this blog post, we will show you how to do that, and what steps to take if you encounter similar issues during the migration process.
Pre-requisites:
-
You need to have an Azure subscription and an Azure account with sufficient permission to create and manage cloud services and virtual networks.
-
You need to have the name and location of your cloud service that you want to migrate. You can find them in the Azure portal or by using the Get-AzureService cmdlet - Get-AzureService (Azure) | Microsoft Learn
Symptom:
Cloud service inbuilt migration fails with below error:
Deployment <guid-value> in cloud service <cloud-service-name> must be within a virtual network to be migrated.
Solution:
Solution-1:
One solution to this scenario and the easiest way is to consider redeploying cloud service application directly in Azure Resource Manager (i.e. new cloud service extended support) by creating a VNET and associating the same to cloud service via service configuration file.
Sample configuration only with VNET & subnet details that can be added in the CSCFG file is shown below:
<Networkconfiguration>
<Virtualnetworksite name="Your_RG-vnet">
<Addressassignments>
<Instanceaddress rolename="WebRoleSite">
<Subnets>
<Subnet name="test"></Subnet>
</Subnets>
</Instanceaddress>
</Addressassignments>
</Virtualnetworksite>
</Networkconfiguration>
The following example shows the complete NetworkConfiguration element and its child elements.
<ServiceConfiguration>
<NetworkConfiguration>
<AccessControls>
<AccessControl name="aclName1">
<Rule order="<rule-order>" action="<rule-action>" remoteSubnet="<subnet-address>" description="rule-description"/>
</AccessControl>
</AccessControls>
<EndpointAcls>
<EndpointAcl role="<role-name>" endpoint="<endpoint-name>" accessControl="<acl-name>"/>
</EndpointAcls>
<Dns>
<DnsServers>
<DnsServer name="<server-name>" IPAddress="<server-address>" />
</DnsServers>
</Dns>
<VirtualNetworkSite name="Group <RG-VNet> <VNet-name>"/>
<AddressAssignments>
<InstanceAddress roleName="<role-name>">
<Subnets>
<Subnet name="<subnet-name>"/>
</Subnets>
</InstanceAddress>
<ReservedIPs>
<ReservedIP name="GROUP <ResourceGroupNameOfReservedIP> <reserved-ip-name>"/>
</ReservedIPs>
</AddressAssignments>
</NetworkConfiguration>
</ServiceConfiguration>
Here is a quick reference guide for the pre-requisites to ensure a successful Cloud Services (extended support) deployment- Prerequisites for deploying Azure Cloud Services (extended support) | Microsoft Learn
Solution-2:
Migrate via creating new Staging deployment and VIP Swap. For this approach:
- Create a non VNET classic cloud service in the same region as the VNET you want to migrate and in the Azure portal, select the 'Staging' drop-down.
- Create a deployment with the same configuration as existing deployment by selecting 'Upload' next to the staging drop-down. The platform creates a Default VNET deployment in staging slot. Once staging deployment is created, the URL, IP address, and label populate.
- After verifying the data, select 'Swap' to swap the production and staging deployments. This operation swaps both the deployments. After swapping, you'll find staging deployment in production slot with the DNS and IP address of production deployment.
- You can now safely delete the staging slot and trigger the Cloud Service Migration Operation.
- Use this reference for step-by-step guide - Migrate cloud services not in a virtual network to a virtual network | Microsoft Learn
Solution-3:
Migrate the cloud service without VNET using PowerShell. For this approach:
- Get the deployment name for the Cloud Service you want to migrate:
$serviceName = "My Service"
$deployment = Get-AzureDeployment -ServiceName $serviceName
$deploymentName = $deployment.DeploymentName
- Validate that you can migrate the Cloud Service by using the commands below:
$validate = Move-AzureService -Validate -ServiceName $serviceName -DeploymentName $deploymentName -CreateNewVirtualNetwork
$validate.ValidationMessages
- Once validation is successful or has just warnings, you can move on to the Prepare step.
Move-AzureService -Prepare -ServiceName $serviceName -DeploymentName $deploymentName -CreateNewVirtualNetwork
- Check the configuration for the prepared Cloud Service (extended support).
- If you're ready to complete the migration, commit the migration:
Move-AzureService -Commit -ServiceName $serviceName -DeploymentName $deploymentName
- If you're not ready for migration and you want to go back to the old state, abort the migration.
Move-AzureService -Abort -ServiceName $serviceName -DeploymentName $deploymentName
We hope this blog post has helped you resolve the issue of cloud service in-built migration error. If you have any questions or feedback, please leave a comment below or contact us at [email protected].
Published on:
Learn moreRelated posts
Azure Storage - TLS 1.0 and 1.1 retirement
Overview TLS 1.0 and 1.1 retirement on Azure Storage was previously announced for Nov 1st, 2024, and it was postponed recently to 1 year later...
Efficient Management of Append and Page Blobs Using Azure Storage Actions
Overview In Azure Storage, Blob Lifecycle Management (BLM) allows you to automate the management of your data based on rules defined by...
[Azure AI Search] Internal Server Error when creating CMK encrypted objects
Scenario Customers follow the Microsoft doc to create CMK encrypted objects (data source, index etc.), but get the 500 Internal Serv...
Optimizing Azure Table Storage: Automated Data Cleanup using a PowerShell script with Azure Automate
Scenario This blog’s aim is to manage Table Storage data efficiently. Imagine you have a large Azure Table Storage that accumulates logs from ...
Optimizing Azure Table Storage: Automated Data Clean-up using a PowerShell script with Azure Automat
Scenario This blog’s aim is to manage Table Storage data efficiently. Imagine you have a large Azure Table Storage that accumulates logs from ...
Restoring Soft-Deleted Blobs with multithreading in Azure Storage Using C#
Blob soft delete is an essential feature that safeguards your data against accidental deletions or overwrites. By retaining deleted data for a...
Performing simple Azure Table Storage REST API operations using curl command.
The blog provides guidance to perform simple Table Storage REST API operations such as Create table, Delete Table, Insert entity, Delete entit...
Bulk delete all the old jobs from the batch account
Deleting a Job also deletes all Tasks that are part of that Job, and all Job statistics. This also overrides the retention period for Task dat...
Utilizing Azure Storage and Runbooks for scheduled automated backups of Azure SQL Databases
In this article, we are going to provide detailed steps to create a scheduled Azure SQL Database backup to storage account using automation. T...
[Azure Service Bus] JMS messages getting dead-lettered
The article discusses a problem where numerous messages end up in the dead letter queue (DLQ) when the JMS service bus consumer connects to th...