Déplacer des ressources vers un nouveau groupe de ressource ou un nouvel abonnement

Cet article vous montre comment déplacer des ressources Azure vers un autre abonnement Azure ou un autre groupe de ressources sous le même abonnement. Vous pouvez utiliser le portail Azure, Azure PowerShell, Azure CLI ou l’API REST pour déplacer des ressources.

Le groupe source et le groupe cible sont verrouillés pendant l’opération de déplacement. Les opérations d’écriture et de suppression sont bloquées sur les groupes de ressources tant que le déplacement n’est pas terminé. Ce verrou signifie que vous ne pouvez pas ajouter, mettre à jour ou supprimer des ressources dans les groupes de ressources. Cela ne signifie pas que les ressources sont figées. Par exemple, si vous déplacez un serveur logique Azure SQL, ses bases de données et d’autres ressources dépendantes vers un nouveau groupe de ressources ou un nouvel abonnement, les applications qui utilisent les bases de données ne rencontrent pas de panne. Elles peuvent toujours lire et écrire dans les bases de données. Le verrou peut durer jusqu’à quatre heures, mais la plupart des déplacements se terminent en moins de temps.

Si votre déplacement nécessite la configuration de nouvelles ressources dépendantes, ces services seront interrompus jusqu’à ce que les ressources soient reconfigurées.

Déplacer une ressource la déplace seulement vers un nouveau groupe de ressources ou un nouvel abonnement. Cette opération ne change pas l’emplacement de la ressource.

ID de ressource modifié

Quand vous déplacez une ressource, vous modifiez son ID de ressource. Le format standard d’un ID de ressource est /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}. Lorsque vous déplacez une ressource vers un nouveau groupe de ressources ou un nouvel abonnement, vous modifiez une ou plusieurs valeurs dans ce chemin d’accès.

Si vous utilisez l’ID de ressource n’importe où, vous devez modifier cette valeur. Par exemple, si vous avez un tableau de bord personnalisé dans le portail qui référence un ID de ressource, vous devez mettre à jour cette valeur. Recherchez les scripts ou modèles qui doivent être mis à jour pour le nouvel ID de ressource.

Liste de contrôle avant le déplacement de ressources

Plusieurs étapes importantes doivent être effectuées avant de déplacer une ressource. Vérifiez ces conditions pour prévenir d'éventuelles erreurs.

  1. Les abonnements source et de destination doivent être actifs. Si vous rencontrez des problèmes lors de l’activation d’un compte qui a été désactivé, créez une demande de support Azure. Sélectionnez Gestion des abonnements comme type de problème.

  2. Les abonnements source et de destination doivent exister dans le même client Azure Active Directory. Pour vérifier que les deux abonnements ont le même ID client, utilisez Azure PowerShell ou Azure CLI.

    Pour Azure PowerShell, utilisez :

    (Get-AzSubscription -SubscriptionName <your-source-subscription>).TenantId
    (Get-AzSubscription -SubscriptionName <your-destination-subscription>).TenantId
    

    Pour l’interface de ligne de commande Azure, consultez :

    az account show --subscription <your-source-subscription> --query tenantId
    az account show --subscription <your-destination-subscription> --query tenantId
    

    Si les ID client pour les abonnements source et de destination ne sont pas identiques, utilisez les méthodes suivantes pour rapprocher les ID client :

  3. Si vous tentez de déplacer des ressources vers ou à partir d’un partenaire fournisseur de solutions cloud (CSP), consultez Transférer des abonnements Azure entre des abonnés et des CSP.

  4. Les ressources que vous voulez déplacer doivent prendre en charge l’opération de déplacement. Pour obtenir la liste des ressources prenant en charge l’opération de déplacement, consultez Prise en charge de l’opération de déplacement pour les ressources.

  5. Certains services ont des limitations ou des exigences spécifiques lors du déplacement des ressources. Si vous déplacez l’un des services suivants, consultez d’abord ces conseils.

  6. L’abonnement de destination doit être inscrit pour le fournisseur de la ressource déplacée. Sinon, vous recevez une erreur indiquant que l’abonnement n’est pas inscrit pour un type de ressource. Vous pouvez rencontrer cette erreur lors du déplacement d’une ressource vers un nouvel abonnement qui n’a jamais été utilisé avec ce type de ressource.

    Pour PowerShell, utilisez les commandes suivantes pour obtenir l’état de l’inscription :

    Set-AzContext -Subscription <destination-subscription-name-or-id>
    Get-AzResourceProvider -ListAvailable | Select-Object ProviderNamespace, RegistrationState
    

    Pour inscrire un fournisseur de ressources, utilisez :

    Register-AzResourceProvider -ProviderNamespace Microsoft.Batch
    

    Pour l’interface CLI d’Azure, utilisez les commandes suivantes pour obtenir l’état de l’inscription :

    az account set -s <destination-subscription-name-or-id>
    az provider list --query "[].{Provider:namespace, Status:registrationState}" --out table
    

    Pour inscrire un fournisseur de ressources, utilisez :

    az provider register --namespace Microsoft.Batch
    
  7. Avant de déplacer les ressources, vérifiez les quotas d’abonnement pour l’abonnement vers lequel vous souhaitez déplacer les ressources. Si le déplacement des ressources signifie que l’abonnement dépassera ses limites, vous devez vérifier si vous pouvez demander une augmentation du quota. Pour connaître la liste des limites et savoir comment demander une augmentation, consultez Abonnement Azure et limites, quotas et contraintes du service.

  8. Le compte déplaçant les ressources doit avoir au moins les autorisations suivantes :

    • Microsoft.Resources/subscriptions/resourceGroups/moveResources/action sur le groupe de ressources source.
    • Microsoft.Resources/subscriptions/resourceGroups/write sur le groupe de ressources de destination.
  9. Si vous déplacez une ressource à laquelle un rôle Azure est affecté directement (ou est affecté à une ressource enfant de cette ressource), l’attribution de rôle n’est pas déplacée et devient orpheline. Après le déplacement, vous devez recréer l’attribution de rôle. Finalement, l’attribution de rôle orpheline est automatiquement supprimée, mais nous vous recommandons de supprimer l’attribution de rôle avant le déplacement.

    Pour plus d’informations sur la gestion des attributions de rôles, consultez Lister les attributions de rôle Azure et Attribuer des rôles Azure.

  10. Pour un déplacement entre des abonnements, la ressource et ses ressources dépendantes doivent se trouver dans le même groupe de ressources et être déplacées ensemble. Par exemple, une machine virtuelle avec des disques managés nécessite le déplacement simultané de la machine virtuelle, des disques managés ainsi que des autres ressources dépendantes.

    Si vous déplacez une ressource vers un nouvel abonnement, vérifiez si la ressource a des ressources dépendantes et si elles se trouvent dans le même groupe de ressources. Si les ressources ne se trouvent pas dans le même groupe de ressources, vérifiez si elles peuvent y être combinées. Dans ce cas, mettez toutes ces ressources dans le même groupe de ressources à l’aide d’une opération de déplacement entre les groupes de ressources.

    Pour plus d’informations, consultez Scénario de déplacement entre des abonnements.

Scénario de déplacement entre différents abonnements

Le déplacement de ressources d’un abonnement vers un autre est un processus en trois étapes :

scénario de déplacement entre des abonnements

Pour illustrer cela, nous avons une seule ressource dépendante.

  • Étape 1 : Si les ressources dépendantes sont réparties entre différents groupes de ressources, commencez par les déplacer vers un même groupe de ressources.
  • Étape 2 : Déplacez la ressource et les ressources dépendantes ensemble de l’abonnement source vers l’abonnement cible.
  • Étape 3 : Si vous le souhaitez, redistribuez les ressources dépendantes dans différents groupes de ressources dans l’abonnement cible.

Utiliser le portail

Pour déplacer des ressources, sélectionnez le groupe de ressources qui contient ces ressources.

Sélectionner les ressources que vous souhaitez déplacer. Pour déplacer toutes les ressources, cochez la case en haut de la liste. Ou sélectionnez les ressources individuellement.

sélectionner des ressources

Sélectionnez le bouton Déplacer.

options move

Ce bouton vous donne trois options :

Indiquez si vous déplacez les ressources vers un nouveau groupe de ressources ou vers un nouvel abonnement.

Le groupe de ressources source est défini automatiquement. Spécifiez le groupe de ressources de destination. Si vous passez à un nouvel abonnement, spécifiez également l’abonnement. Sélectionnez Suivant.

sélectionner le groupe de ressources de destination

Le portail valide le fait que les ressources peuvent être déplacées. Attendez que la validation se termine.

Déplacer la validation

Lorsque la validation se termine avec succès, sélectionnez Suivant.

Reconnaissez que vous devez mettre à jour les outils et les scripts de ces ressources. Pour commencer à déplacer les ressources, sélectionnez Déplacer.

sélectionner la destination

Lorsque le déplacement est terminé, vous êtes informé du résultat.

afficher les résultats du déplacement

Utilisation d'Azure PowerShell

Validate

Pour tester votre scénario de déplacement sans réellement déplacer les ressources, utilisez la commande Invoke-AzResourceAction. Utilisez cette opération seulement quand vous devez prédéterminer les résultats. Pour exécuter cette opération, vous avez besoin des éléments suivants :

  • ID de ressource du groupe de ressources source
  • ID de ressource du groupe de ressources cible
  • ID de ressource de chaque ressource à déplacer
Invoke-AzResourceAction -Action validateMoveResources `
-ResourceId "/subscriptions/{subscription-id}/resourceGroups/{source-rg}" `
-Parameters @{ 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 la validation réussit, vous ne voyez aucune sortie.

Si la validation échoue, un message d’erreur s’affiche pour vous expliquer pourquoi les ressources ne peuvent pas être déplacées.

Déplacer

Pour déplacer des ressources existantes vers un autre groupe de ressources ou un autre abonnement, utilisez la commande Move-AzResource. L’exemple suivant vous indique comment déplacer plusieurs ressources vers un nouveau groupe de ressources.

$webapp = Get-AzResource -ResourceGroupName OldRG -ResourceName ExampleSite
$plan = Get-AzResource -ResourceGroupName OldRG -ResourceName ExamplePlan
Move-AzResource -DestinationResourceGroupName NewRG -ResourceId $webapp.ResourceId, $plan.ResourceId

Pour déplacer des ressources vers un nouvel abonnement, renseignez une valeur pour le paramètre DestinationSubscriptionId.

Utiliser l’interface de ligne de commande Microsoft Azure

Validate

Pour tester votre scénario de déplacement sans réellement déplacer les ressources, utilisez la commande az resource invoke-action. Utilisez cette opération seulement quand vous devez prédéterminer les résultats. Pour exécuter cette opération, vous avez besoin des éléments suivants :

  • ID de ressource du groupe de ressources source
  • ID de ressource du groupe de ressources cible
  • ID de ressource de chaque ressource à déplacer

Dans le corps de la demande, utilisez \" pour échapper aux guillemets doubles.

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 la validation réussit, vous voyez :

{} Finished .. 

Si la validation échoue, un message d’erreur s’affiche pour vous expliquer pourquoi les ressources ne peuvent pas être déplacées.

Déplacer

Pour déplacer des ressources existantes vers un autre groupe de ressources ou un autre abonnement, exécutez la commande az resource move . Dans le paramètre --ids, spécifiez une liste séparée par des espaces des ID des ressources à déplacer.

L’exemple suivant vous indique comment déplacer plusieurs ressources vers un nouveau groupe de ressources. Il fonctionne lors de l’utilisation d’Azure CLI dans un terminal Bash.

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

L’exemple suivant montre comment exécuter les mêmes commandes dans une console PowerShell.

$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

Pour déplacer des ressources vers un nouvel abonnement, spécifiez le paramètre --destination-subscription-id.

Avec l’API REST

Validate

L’opération de validation du déplacement vous permet de tester votre scénario de déplacement sans réellement déplacer les ressources. Utilisez cette opération pour vérifier si le déplacement va réussir. La validation est appelée automatiquement quand vous envoyez une demande de déplacement. Utilisez cette opération seulement quand vous devez prédéterminer les résultats. Pour exécuter cette opération, vous avez besoin des éléments suivants :

  • Nom du groupe de ressources source
  • ID de ressource du groupe de ressources cible
  • ID de ressource de chaque ressource à déplacer
  • Jeton d’accès pour votre compte

Envoyez la requête suivante :

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

Avec le corps de la demande :

{
 "resources": ["<resource-id-1>", "<resource-id-2>"],
 "targetResourceGroup": "/subscriptions/<subscription-id>/resourceGroups/<target-group>"
}

Si la demande est correctement mise en forme, l’opération retourne :

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
...

Le code d’état 202 indique que la demande de validation a été acceptée, mais la réussite de l’opération de déplacement n’est pas encore déterminée. La valeur de location contient une URL que vous utilisez pour vérifier l’état de l’opération longue.

Pour vérifier l’état, envoyez la demande suivante :

GET <location-url>
Authorization: Bearer <access-token>

Pendant l’exécution de l’opération, vous continuez à recevoir le code d’état 202. Attendez le nombre de secondes indiqué dans la valeur retry-after avant de réessayer. Si l’opération de déplacement est validée, vous recevez le code d’état 204. Si la validation de déplacement échoue, vous recevez un message d’erreur, par exemple :

{"error":{"code":"ResourceMoveProviderValidationFailed","message":"<message>"...}}

Déplacer

Pour déplacer des ressources existantes vers un autre groupe de ressources ou un autre abonnement, utilisez l’opération Déplacer des ressources.

POST https://management.azure.com/subscriptions/{source-subscription-id}/resourcegroups/{source-resource-group-name}/moveResources?api-version={api-version}

Dans le corps de la requête, vous indiquez le groupe de ressources cible et les ressources à déplacer.

{
 "resources": ["<resource-id-1>", "<resource-id-2>"],
 "targetResourceGroup": "/subscriptions/<subscription-id>/resourceGroups/<target-group>"
}

Forum aux questions

Quelques : Mon opération de déplacement de ressources, qui prend généralement quelques minutes, s’exécute depuis presque une heure. Y a-t-il un problème ?

Le déplacement d’une ressource est une opération complexe qui a des phases différentes. Elle peut impliquer davantage que le fournisseur de ressources de la ressource que vous essayez de déplacer. En raison des dépendances entre les fournisseurs de ressources, Azure Resource Manager accorde à l’opération 4 heures pour se terminer. Ce laps de temps donne aux fournisseurs de ressources la possibilité de récupérer des problèmes temporaires. Si votre demande de déplacement se situe dans le délai de quatre heures, l’opération continue de s’exécuter et peut encore aboutir. Les groupes de ressources sources et de destination sont verrouillés pendant ce temps afin d’éviter les problèmes de cohérence.

Question : Pourquoi mon groupe de ressources est-il verrouillé pendant quatre heures pendant le déplacement des ressources ?

Une demande de déplacement est autorisée à s’exécuter un maximum de quatre heures. Pour empêcher les ressources déplacées d’être modifiées, les groupes de ressources sources et de destination sont verrouillés le déplacement des ressources.

Une demande de déplacement comporte deux phases. Dans la première phase, la ressource est déplacée. Dans la deuxième phase, des notifications sont envoyées à d’autres fournisseurs de ressources qui dépendent de la ressource déplacée. Un groupe de ressources peut être verrouillé durant l’intégralité du délai de quatre heures lorsqu’un fournisseur de ressources échoue dans l’une ou l’autre phase. Pendant le temps imparti, Resource Manager retente l’étape qui a échoué.

Si une ressource ne peut pas être déplacée dans le délai de quatre heures, Resource Manager déverrouille les deux groupes de ressources. Les ressources qui ont été déplacées se trouvent dans le groupe de ressources de destination. Les ressources qui n’ont pas pu être déplacées sont conservées dans le groupe de ressources source.

Question : Quelles sont les implications des groupes de ressources sources et de destination verrouillés pendant le déplacement des ressources ?

Le verrou vous empêche de supprimer un groupe de ressources, de créer une nouvelle ressource dans un groupe de ressources ou de supprimer les ressources impliquées dans le déplacement.

L’illustration suivante montre un message d’erreur du portail Azure lorsqu’un utilisateur tente de supprimer un groupe de ressources qui fait partie d’un déplacement en cours.

Message d’erreur lors du déplacement, tentative de suppression

Question : Que signifie le code d’erreur « MissingMoveDependentResources » ?

Lorsque vous déplacez une ressource, ses ressources dépendantes doivent exister dans l’abonnement ou le groupe de ressources de destination ou bien, elles doivent être incluses dans la demande de déplacement. Vous recevez le code d’erreur MissingMoveDependentResources quand une ressource dépendante n’est pas conforme à cette exigence. Le message d’erreur contient des détails sur la ressource dépendante qui doit être incluse dans la demande de déplacement.

Par exemple, le déplacement d’une machine virtuelle peut nécessiter le déplacement de sept types de ressources avec trois fournisseurs de ressources différents. Ces types et fournisseurs de ressources sont les suivants :

  • Microsoft.Compute

    • virtualMachines
    • disks
  • Microsoft.Network

    • networkInterfaces
    • publicIPAddresses
    • networkSecurityGroups
    • virtualNetworks
  • Microsoft.Storage

    • storageAccounts

Un autre exemple courant implique le déplacement d’un réseau virtuel. Vous devrez peut-être déplacer plusieurs autres ressources associées à ce réseau virtuel. La demande de déplacement peut nécessiter le déplacement d’adresses IP publiques, de tables de routage, de passerelles de réseau virtuel, de groupes de sécurité réseau, etc.

Question : que signifie le code d’erreur « RequestDisallowedByPolicy » ?

Resource Manager valide votre requête de déplacement avant de tenter le déplacement. Cette validation comprend la vérification des stratégies définies sur les ressources impliquées dans le déplacement. Par exemple, si vous tentez de déplacer un coffre de clés, mais que votre organisation a une stratégie pour refuser la création d’un coffre de clés dans le groupe de ressources cible, la validation échoue et le déplacement est bloqué. Le code d'erreur retourné est RequestDisallowedByPolicy.

Pour plus d’informations sur les stratégies, consultez Qu’est-ce qu’Azure Policy ?

Question : Pourquoi ne puis-je pas déplacer certaines ressources dans Azure ?

Actuellement, toutes les ressources dans Azure prennent en charge le déplacement. Pour obtenir la liste des ressources prenant en charge l’opération de déplacement, consultez Prise en charge de l’opération de déplacement pour les ressources.

Question : combien de ressources puis-je déplacer en une seule opération ?

Quand c’est possible, divisez les grands déplacements en opérations de déplacement distinctes. Resource Manager retourne immédiatement une erreur en cas de tentative de déplacement de plus de 800 ressources en une seule opération. Cependant, un déplacement de moins de 800 ressources peut également échouer en raison d’un dépassement du délai d’expiration.

Question : quelle est la signification de l’erreur indiquant qu’une ressource n’est pas dans un état de réussite ?

Quand vous obtenez un message d’erreur indiquant qu’une ressource ne peut pas être déplacée parce qu’elle n’est pas dans un état de réussite, le problème peut en fait être lié à une ressource dépendante qui bloque le déplacement. En général, le code d’erreur est MoveCannotProceedWithResourcesNotInSucceededState.

Si le groupe de ressources source ou cible contient un réseau virtuel, les états de toutes les ressources dépendantes pour le réseau virtuel sont vérifiés au cours du déplacement. La vérification comprend les ressources qui dépendent directement et indirectement du réseau virtuel. Si l’une de ces ressources est en état d’échec, le déplacement est bloqué. Par exemple, si une machine virtuelle qui utilise le réseau virtuel a échoué, le déplacement est bloqué. Le déplacement est bloqué même lorsque la machine virtuelle n’est pas l’une des ressources déplacées et ne se trouve pas dans l’un des groupes de ressources à déplacer.

Lorsque vous recevez cette erreur, deux options s’offrent à vous. Déplacez vos ressources vers un groupe de ressources qui n’a pas de réseau virtuel ou contactez le support technique.

Étapes suivantes

Pour obtenir la liste des ressources prenant en charge l’opération de déplacement, consultez Prise en charge de l’opération de déplacement pour les ressources.