Traslado de recursos de Azure a un nuevo grupo de recursos o a una nueva suscripción
En este artículo se explica cómo mover recursos de Azure entre grupos de recursos dentro de la misma suscripción o entre distintas suscripciones. Si el traslado implica suscripciones diferentes, ambas suscripciones deben formar parte del mismo inquilino de Microsoft Entra ID. Puede usar herramientas como Azure Portal, Azure PowerShell, CLI de Azure, la API de REST o Python para mover los recursos.
Durante la operación de traslado, los grupos de recursos de origen y de destino están bloqueados. No puede crear, eliminar ni actualizar recursos dentro de estos grupos de recursos mientras el traslado está en curso. Sin embargo, los recursos existentes permanecen totalmente operativos. Por ejemplo, si mueve una máquina virtual de un grupo de recursos a otro, no puede eliminarla ni modificar sus propiedades (por ejemplo, su tamaño) durante el traslado. A pesar da restricción, la máquina virtual sigue funcionando normalmente y los servicios que dependen de ella no experimentan ningún tiempo de inactividad. El bloqueo puede durar hasta cuatro horas. La mayoría de los movimientos se completan más rápido y el bloqueo se quita en consecuencia.
Solo se deben especificar recursos de nivel superior (primario) en la solicitud de traslado. Los recursos secundarios se mueven automáticamente con su elemento primario, pero no se pueden mover de forma independiente. Por ejemplo, puede mover un recurso primario, como Microsoft.Compute/virtualMachines
, y su recurso secundario, como Microsoft.Compute/virtualMachines/extensions
, se mueve con él. Sin embargo, no puede mover el recurso secundario por sí solo.
Al mover un recurso conserva sus dependencias con recursos secundarios, las dependencias con otros recursos pueden interrumpirse y es posible que deban configurarse de nuevo. Mover un recurso solo cambia su grupo de recursos asociado y no modifica la región física del recurso.
Nota:
Los recursos de Azure no se pueden mover si existe un bloqueo de solo lectura en el origen, el grupo de recursos de destino o la suscripción.
Cambio en el identificador de recurso
Cuando se mueve un recurso, cambia su identificador de recurso. El formato estándar para un identificador de recurso es /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
. Al trasladar un recurso a un nuevo grupo de recursos o a una nueva suscripción, cambia uno o varios valores de esa ruta de acceso.
Si usa el identificador de recurso en cualquier lugar, cambie ese valor. Por ejemplo, si tiene un panel personalizado en el portal que hace referencia a un identificador de recurso, actualice ese valor. Busque scripts o plantillas que deban actualizarse para el nuevo identificador de recurso.
Lista de comprobación antes de mover recursos
Algunos pasos importantes preceden al traslado de un recurso. Puede evitar errores si comprueba estas condiciones.
Las suscripciones de origen y de destino deben estar activas. Si tiene problemas para habilitar una cuenta que se ha deshabilitado, crea una solicitud de soporte técnico de Azure. Seleccione Administración de suscripciones para el tipo de problema.
Las suscripciones de origen y destino deben existir dentro del mismo inquilino de Microsoft Entra. Use la CLI de Azure o PowerShell para comprobar que ambas suscripciones tienen el mismo identificador de inquilino.
az account show --subscription <your-source-subscription> --query tenantId az account show --subscription <your-destination-subscription> --query tenantId
Si los identificadores de inquilino de las suscripciones de origen y de destino no coinciden, use los métodos siguientes para conciliarlos:
Para mover recursos a un asociado del Proveedor de soluciones en la nube (CSP) o desde este, consulte Transferencia de suscripciones de Azure entre suscriptores y CSP.
Los recursos que desea trasladar deben ser compatibles con la operación de traslado. Para obtener una lista de los recursos que admiten las operaciones de traslado, consulte Tipos de recursos de Azure para las operaciones de movimiento.
Algunos servicios tienen limitaciones o requisitos específicos al trasladar recursos. Compruebe las siguientes instrucciones de traslado antes de mover recursos dentro de estos servicios:
- Si usa Azure Stack Hub, no puede mover recursos entre grupos.
- Azure App Services
- Azure DevOps Services
- Modelo de implementación clásica para el proceso clásico, el almacenamiento, las redes virtuales y los servicios en la nube
- Cloud Services (soporte extendido)
- Redes
- Azure Recovery Services
- Máquinas virtuales
- Para trasladar una suscripción de Azure a un nuevo grupo de administración, consulte Movimiento de suscripciones.
La suscripción de destino debe estar registrada para el proveedor de recursos del recurso que va a mover. Si no es así, recibirá un error en el que se indicará que la suscripción no está registrada para un tipo de recurso. Es posible que vea este error al mover un recurso a una nueva suscripción si no usó previamente el tipo de recurso en la suscripción.
Para obtener el estado del registro:
az account set -s <destination-subscription-name-or-id> az provider list --query "[].{Provider:namespace, Status:registrationState}" --out table
Para registrar un proveedor de recursos:
az provider register --namespace Microsoft.Batch
Compruebe la cuota de suscripción de la suscripción a la que va a mover los recursos antes de iniciar una operación de traslado. Compruebe si puede solicitar un aumento en una cuota que provocaría que una suscripción de destino supere su límite. Consulte Límites, cuotas y restricciones de la suscripción y servicios de Azure para obtener instrucciones detalladas acerca de los límites y cómo solicitar un aumento.
La cuenta que mueve los recursos debe tener al menos los permisos siguientes:
- En el grupo de recursos de origen: Microsoft.Resources/subscriptions/resourceGroups/moveResources/action
- En el grupo de recursos de destino: Microsoft.Resources/subscriptions/resourceGroups/write
Si mueve un recurso con una asignación de roles de Azure activa (o su recurso secundario con esta misma asignación), la asignación de roles no se mueve y se vuelve huérfana. Debe volver a crear la asignación de roles después del traslado. Aunque el sistema quita automáticamente la asignación de roles huérfana, se recomienda quitarla antes del traslado.
Consulte Enumeración de asignaciones de roles de Azure y Asignación de roles de Azure para obtener más información acerca de cómo administrar las asignaciones de roles.
Para un traslado entre suscripciones, el recurso y sus recursos dependientes deben encontrarse en el mismo grupo de recursos y deben trasladarse juntos. Por ejemplo, una máquina virtual con discos administrados requiere mover la máquina virtual, los discos administrados y otros recursos dependientes en conjunto.
Si va a mover un recurso a una nueva suscripción, compruebe si el recurso tiene recursos dependientes y si se encuentran en el mismo grupo de recursos. Si los recursos no están en el mismo grupo de recursos, compruebe si puede combinarlos en el mismo grupo de recursos. Si es así, use una operación de traslado entre los grupos de recursos para consolidar todos los recursos en el mismo grupo de recursos.
Para más información, consulte Escenario para el traslado entre suscripciones.
Escenario para el traslado entre suscripciones
Mover recursos de una suscripción a otra es un proceso de tres pasos. Para ilustrar estos pasos, en el diagrama siguiente se muestra solo un recurso dependiente:
- Paso 1: Si los recursos dependientes se distribuyen entre diferentes grupos de recursos, trasládelos primero a un grupo de recursos.
- Paso 2: Traslade el recurso y los recursos dependientes juntos desde la suscripción de origen hasta la de destino.
- Paso 3: Opcionalmente, redistribuya los recursos dependientes a distintos grupos de recursos dentro de la suscripción de destino.
Traslado de recursos
Uso de Azure Portal
Para mover recursos, seleccione el grupo de recursos que contiene dichos recursos.
Seleccionar los recursos que quiere mover. Para trasladar todos los recursos, active la casilla situada en la parte superior de la lista. O bien, seleccione cada recurso de forma individual.
Seleccione el botón Mover.
Este botón ofrece tres opciones:
- Mover a un grupo de recursos nuevo
- Mover a una suscripción nueva
- Mover a una región nueva Para cambiar las regiones, consulte Movimiento de recursos entre regiones (desde el grupo de recursos) con Azure Resource Mover.
Seleccione si va a mover los recursos a un nuevo grupo de recursos o suscripción.
El grupo de recursos de origen se establece automáticamente. Especifique el grupo de recursos de destino. Si va a mover a una nueva suscripción, especifique esto también. Seleccione Siguiente.
El portal valida que se pueden trasladar los recursos. Espere a que se complete la validación.
Cuando la validación se complete correctamente, seleccione Siguiente.
Confirme que tiene que actualizar las herramientas y los scripts para estos recursos. Para empezar a mover los recursos, seleccione Mover.
- Azure Portal le notifica cuando se ha completado el traslado.
Uso de la CLI de Azure
Validación
Para probar el escenario de movimiento sin mover realmente los recursos en tiempo real, use el comando az resource invoke-action
. Use este comando solo cuando necesite modelar los resultados sin seguir los pasos. Para ejecutar esta operación, necesita el identificador de recurso del grupo de recursos de origen, el grupo de recursos de destino y cada recurso que se mueve.
Use \"
para escapar las comillas dobles en el cuerpo de la solicitud.
az resource invoke-action --action validateMoveResources \
--ids "/subscriptions/{subscription-id}/resourceGroups/{source-rg}" \
--request-body "{ \"resources\": [\"/subscriptions/{subscription-id}/resourceGroups/{source-rg}/providers/{resource-provider}/{resource-type}/{resource-name}\", \"/subscriptions/{subscription-id}/resourceGroups/{source-rg}/providers/{resource-provider}/{resource-type}/{resource-name}\", \"/subscriptions/{subscription-id}/resourceGroups/{source-rg}/providers/{resource-provider}/{resource-type}/{resource-name}\"],\"targetResourceGroup\":\"/subscriptions/{subscription-id}/resourceGroups/{destination-rg}\" }"
Si se supera la validación, verá:
{} Finished ..
Si se produce un error en la validación, verá un mensaje de error que explica por qué no se pueden mover los recursos.
Move
Para trasladar recursos existentes a otro grupo de recursos o a una suscripción, use el comando az resource move
. En el parámetro --ids
, ofrezca una lista separada por espacios de los identificadores de recurso que se van a trasladar.
Los comandos siguientes muestran cómo mover varios recursos a un nuevo grupo de recursos. Funcionan con la CLI de Azure en un terminal de Bash o en una consola de Azure PowerShell. Proporcione el parámetro --destination-subscription-id
para mover recursos a una nueva suscripción.
webapp=$(az resource show -g OldRG -n ExampleSite --resource-type "Microsoft.Web/sites" --query id --output tsv)
plan=$(az resource show -g OldRG -n ExamplePlan --resource-type "Microsoft.Web/serverfarms" --query id --output tsv)
az resource move --destination-group newgroup --ids $webapp $plan
Uso de Azure PowerShell
Validación
Para probar el escenario de movimiento sin mover realmente los recursos en tiempo real, use el Invoke-AzResourceAction
comando en Azure PowerShell. Use este comando solo cuando necesite modelar los resultados sin seguir los pasos.
$sourceName = "sourceRG"
$destinationName = "destinationRG"
$resourcesToMove = @("app1", "app2")
$sourceResourceGroup = Get-AzResourceGroup -Name $sourceName
$destinationResourceGroup = Get-AzResourceGroup -Name $destinationName
$resources = Get-AzResource -ResourceGroupName $sourceName | Where-Object { $_.Name -in $resourcesToMove }
Invoke-AzResourceAction -Action validateMoveResources `
-ResourceId $sourceResourceGroup.ResourceId `
-Parameters @{
resources = $resources.ResourceId; # Wrap in an @() array if providing a single resource ID string.
targetResourceGroup = $destinationResourceGroup.ResourceId
}
Una salida no se mostrará si la validación se realiza correctamente. Sin embargo, si se produce un error en la validación, un mensaje de error explica por qué no se pueden mover los recursos.
Move
Para mover recursos existentes a otro grupo de recursos o a otra suscripción, use el comando Move-AzResource. El siguiente ejemplo muestra cómo trasladar varios recursos a un nuevo grupo de recursos.
$sourceName = "sourceRG"
$destinationName = "destinationRG"
$resourcesToMove = @("app1", "app2")
$resources = Get-AzResource -ResourceGroupName $sourceName | Where-Object { $_.Name -in $resourcesToMove }
Move-AzResource -DestinationResourceGroupName $destinationName -ResourceId $resources.ResourceId
Para moverlos a una nueva suscripción, especifique un valor para el parámetro DestinationSubscriptionId
.
Uso de Python
Validación
Para probar el escenario de movimiento sin mover realmente los recursos en tiempo real, use el método ResourceManagementClient.resources.begin_validate_move_resources
. Use este método solo cuando necesite modelar los resultados sin seguir los pasos.
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
source_name = "sourceRG"
destination_name = "destinationRG"
resources_to_move = ["app1", "app2"]
destination_resource_group = resource_client.resource_groups.get(destination_name)
resources = [
resource for resource in resource_client.resources.list_by_resource_group(source_name)
if resource.name in resources_to_move
]
resource_ids = [resource.id for resource in resources]
validate_move_resources_result = resource_client.resources.begin_validate_move_resources(
source_name,
{
"resources": resource_ids,
"target_resource_group": destination_resource_group.id
}
).result()
print("Validate move resources result: {}".format(validate_move_resources_result))
No se muestra una salida si la validación se realiza correctamente. Sin embargo, si se produce un error en la validación, un mensaje de error explica por qué no se pueden mover los recursos.
Move
Para mover los recursos existentes a otro grupo de recursos o suscripción, use el método ResourceManagementClient.resources.begin_move_resources
en Python. El siguiente ejemplo muestra cómo trasladar varios recursos a un nuevo grupo de recursos.
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
source_name = "sourceRG"
destination_name = "destinationRG"
resources_to_move = ["app1", "app2"]
destination_resource_group = resource_client.resource_groups.get(destination_name)
resources = [
resource for resource in resource_client.resources.list_by_resource_group(source_name)
if resource.name in resources_to_move
]
resource_ids = [resource.id for resource in resources]
resource_client.resources.begin_move_resources(
source_name,
{
"resources": resource_ids,
"target_resource_group": destination_resource_group.id
}
)
Use la API de REST
Validación
La operación validate move operation
prueba el escenario de movimiento sin mover realmente los recursos. Use esta operación para comprobar si el traslado puede realizarse correctamente. La validación se llama automáticamente cuando se envía una solicitud de traslado. Use esta operación solo cuando necesite modelar los resultados sin seguir los pasos. Para ejecutar esta operación, necesita el:
- Nombre del grupo de recursos de origen
- Identificador de recurso del grupo de recursos de destino
- Identificador de recurso de cada recurso que se va a trasladar
- Token de acceso de la cuenta
Envíe la solicitud siguiente:
POST https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<source-group>/validateMoveResources?api-version=2019-05-10
Authorization: Bearer <access-token>
Content-type: application/json
Con un cuerpo de la solicitud:
{
"resources": ["<resource-id-1>", "<resource-id-2>"],
"targetResourceGroup": "/subscriptions/<subscription-id>/resourceGroups/<target-group>"
}
Si la solicitud tiene un formato correcto, la operación devuelve:
Response Code: 202
cache-control: no-cache
pragma: no-cache
expires: -1
location: https://management.azure.com/subscriptions/<subscription-id>/operationresults/<operation-id>?api-version=2018-02-01
retry-after: 15
...
Un 202 código de estado indica que se aceptó la solicitud de validación, pero aún no ha determinado si la operación de traslado se realizará correctamente. El valor location
contiene una dirección URL que se usa para comprobar el estado de la operación de ejecución larga.
Para comprobar el estado, envíe la solicitud siguiente:
GET <location-url>
Authorization: Bearer <access-token>
Seguirá recibiendo un código de estado 202 mientras se ejecuta la operación. Espere el número de segundos que se indica en el valor retry-after
antes de intentarlo de nuevo. Recibirá un código de estado 204 si la validación de movimiento tiene éxito. Si se produce un error en la validación de movimiento, recibirá un mensaje de error similar al siguiente:
{"error":{"code":"ResourceMoveProviderValidationFailed","message":"<message>"...}}
Move
Para mover los recursos existentes a otro grupo de recursos o suscripción, use la operación Move resources
.
POST https://management.azure.com/subscriptions/{source-subscription-id}/resourcegroups/{source-resource-group-name}/moveResources?api-version={api-version}
Especifique el grupo de recursos de destino y los recursos que se moverán en el cuerpo de la solicitud.
{
"resources": ["<resource-id-1>", "<resource-id-2>"],
"targetResourceGroup": "/subscriptions/<subscription-id>/resourceGroups/<target-group>"
}
Preguntas más frecuentes
Mi operación de movimiento de recursos que normalmente tarda unos minutos se ha estado ejecutando durante casi una hora. ¿Hay algo incorrecto?
Mover un recurso es una operación compleja con distintas fases. Pueden existir más implicaciones, además del proveedor de recursos del recurso que intenta mover. Azure Resource Manager permite que finalice una operación de traslado cuatro horas debido a las dependencias entre proveedores de recursos. Esta duración les da tiempo para recuperarse de problemas transitorios. Si la solicitud de traslado está dentro del período de cuatro horas, la operación sigue intentando completarse y podría realizarse correctamente. La operación bloquea los grupos de recursos de origen y de destino durante este tiempo para evitar problemas de coherencia.
¿Por qué mi grupo de recursos se bloquea durante cuatro horas mientras se realiza el movimiento de recursos?
Las operaciones de movimiento pueden completarse cuatro horas. La operación bloquea los grupos de recursos de origen y destino durante este tiempo para evitar que se modifiquen.
Hay dos fases en una solicitud de movimiento. Los recursos se mueven durante la primera fase y los proveedores de recursos que dependen de los recursos que se mueven se notifican durante la segunda fase. Un grupo de recursos se puede bloquear durante las cuatro horas cuando un proveedor de recursos produce un error en cualquiera de las fases. Resource Manager inicia los pasos con errores durante el intervalo de la operación de traslado.
Resource Manager desbloquea ambos grupos de recursos si un recurso no se mueve en un plazo de cuatro horas. Los recursos que se mueven correctamente se encuentran en el grupo de recursos de destino. Los recursos que no se pueden mover permanecen en el grupo de recursos de origen.
¿Cuáles son las implicaciones de que los grupos de recursos de origen y de destino se bloqueen durante el movimiento de recursos?
El bloqueo impide eliminar cualquiera de los grupos de recursos. El bloqueo también impide crear un nuevo recurso, eliminar un recurso o actualizar las propiedades de un recurso dentro de cada grupo de recursos (por ejemplo, cambiar el tamaño de una máquina virtual).
En la imagen siguiente se muestra un mensaje de error de Azure Portal cuando intenta eliminar un grupo de recursos que forma parte de un movimiento en curso:
En la imagen siguiente, el recurso de máquina virtual pertenece a un grupo de recursos ("TestB") que está formando parte actualmente de una operación de traslado. Cuando intenta actualizar una propiedad de una máquina virtual (por ejemplo, su tamaño), Azure Portal devuelve un mensaje de error. Este error ocurre porque el grupo de recursos se bloquea durante el traslado, lo que protege a los recursos de la modificación.
Además, los grupos de recursos de origen y de destino no pueden participar en otras operaciones de movimiento simultáneamente durante un traslado de recursos. Por ejemplo, si va a mover recursos del grupo de recursos A al grupo de recursos B, tanto el grupo de recursos A como el grupo de recursos B no pueden participar en otra operación de traslado al mismo tiempo. No se pueden mover recursos simultáneamente al grupo de recursos C ni desde este. Esta restricción impide que varias operaciones en conflicto bloqueen grupos de recursos durante el proceso de movimiento.
¿Qué significa el código de error "MissingMoveDependentResources"?
Al mover un recurso, sus recursos dependientes deben existir en el grupo de recursos de destino o en la suscripción, o incluirse en la solicitud de traslado. Obtiene el código de error MissingMoveDependentResource s cuando un recurso dependiente no cumple este requisito. El mensaje de error proporciona detalles sobre el recurso dependiente que debe incluir en la solicitud de traslado.
Por ejemplo, mover una máquina virtual podría requerir mover siete tipos de recursos con tres proveedores de recursos diferentes. Estos proveedores y tipos de recursos son:
Microsoft.Compute
- virtualMachines
- disks
Microsoft.Network
- networkInterfaces
- publicIPAddresses
- networkSecurityGroups
- virtualNetworks
Microsoft.Storage
- storageAccounts
Otro ejemplo común implica mover una red virtual en la que es posible que tenga que mover otros recursos asociados a esa red virtual. La solicitud de traslado podría requerir mover direcciones IP públicas, tablas de rutas, puertas de enlace de red virtual, grupos de seguridad de red y otros recursos. Una puerta de enlace de red virtual debe estar en el mismo grupo de recursos que su red virtual, ya que no se pueden mover por separado.
¿Qué significa el código de error "RequestDisallowedByPolicy"?
Resource Manager valida la solicitud de traslado antes de intentar realizar un traslado. Esta validación incluye la comprobación de directivas definidas para los recursos implicados en el traslado. Por ejemplo, se produce un error en la validación al intentar mover un almacén de claves, pero la organización tiene una directiva para denegar la creación de un almacén de claves en el grupo de recursos de destino. El código de error devuelto es RequestDisallowedByPolicy.
Para más información sobre las directivas, consulte ¿Qué es Azure Policy?.
¿Por qué no puedo mover algunos recursos de Azure?
No todos los recursos de Azure permiten operaciones de movimiento.
¿Cuántos recursos puedo mover en una operación?
Separa los movimientos grandes en diferentes operaciones de movimiento siempre que sea posible. Resource Manager inmediatamente devolverá un error si hay más de 800 recursos en una sola operación. Sin embargo, mover menos de 800 recursos también puede producir un error al agotar el tiempo de espera.
¿Cuál es el significado del error que un recurso no está en un estado "correcto"?
Cuando recibe un mensaje de error que indica que no puede mover un recurso porque no está en un estado Correcto, puede deberse a que un recurso dependiente está bloqueando el movimiento. Normalmente, el código de error es MoveCannotProceedWithResourcesNotInSucceededState.
Si el grupo de recursos de origen o de destino contiene una red virtual, los estados de todos los recursos que dependen de esa red virtual se comprueban durante el traslado. Esta comprobación incluye recursos que dependen directa e indirectamente de la red. El traslado se bloquea si algún recurso no tiene un estado correcto. Por ejemplo, si una máquina virtual usa una red virtual que no informa de un estado correcto, el traslado se bloquea. El traslado se bloquea incluso cuando la máquina virtual no es uno de los recursos que se mueven. El traslado también se bloquea incluso cuando la máquina virtual no está en el grupo de recursos de origen o destino.
Para resolver este problema, traslade los recursos a un grupo de recursos que no tenga una red virtual o póngase en contacto con soporte técnico.
¿Puedo mover un grupo de recursos a otra suscripción?
No, no puede mover un grupo de recursos a una nueva suscripción. Sin embargo, puede mover todos los recursos de un grupo de recursos a un grupo de recursos de otra suscripción. La configuración, como etiquetas, asignaciones de roles y directivas, no se transfiere automáticamente desde el grupo de recursos original al grupo de recursos de destino. Debe aplicar esta configuración manualmente al nuevo grupo de recursos.
Pasos siguientes
Consulte Soporte técnico para la operación de traslado de recursos para comprobar qué recursos de Azure admiten las operaciones de movimiento.