Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article explique comment échanger entre deux déploiements de services cloud indépendants dans Microsoft Azure Services cloud (support étendu). Contrairement à Azure Services cloud (classique), le modèle Azure Resource Manager dans la version de prise en charge étendue n’utilise pas d’emplacements de déploiement. Lorsque vous déployez une nouvelle version d’un service cloud dans Azure Services cloud (support étendu), vous pouvez rendre le service cloud « échangeable » avec un service cloud existant dans la version de support étendue. L’article montre comment mettre à jour la version du service cloud à l’aide de PowerShell et de l’API REST pour échanger l’adresse IP virtuelle (VIP).
Prerequisites
Deux adresses IP publiques statiques : une pour l’environnement de production, l’autre pour l’environnement intermédiaire. Les adresses IP de cet exemple sont nommées
cses-prod
etcses-stag
, respectivement.Un réseau virtuel pour l’environnement de test. Dans cet exemple, le réseau virtuel est nommé
test001VNet
.URL du fichier de configuration de service et du fichier de package, au format d’URI de signature d’accès partagé (SAP) du service. Si vous n’avez pas encore créé ces URL, vous pouvez créer chaque URI SAS (ou le jeton SAP qui fait partie de l’URI SAP) à l’aide de l’Portail Azure ou en appelant l’applet de commande New-AzStorageBlobSASToken. Affectez respectivement les URL du fichier de configuration du service et du
$cscfg
$cspkg
fichier de package aux variables. L’extrait de code PowerShell suivant montre le format de ces URL. Les URL sont utilisées dans les appels suivants à l’applet de commande New-AzCloudService .$containerUrl = "https://<storage-account-name>.blob.core.windows.net/<container-name>" $sasTokenCfg = "?sp=r&st={0}&se={1}&spr=https&sv={2}&sr=b&sig={3}" -f ( "<start-time1>", "<expiration-time1>", "<storage-version1>", "<signature1>" ) $sasTokenPkg = "?sp=r&st={0}&se={1}&spr=https&sv={2}&sr=b&sig={3}" -f ( "<start-time2>", "<expiration-time2>", "<storage-version2>", "<signature2>" ) $cscfg = "$containerUrl/<configuration-file>$sasTokenCfg" $cspkg = "$containerUrl/<package-file>$sasTokenPkg"
Fichier de configuration pour l’adresse IP publique de l’environnement de production. Le fichier doit ressembler au code suivant :
<ServiceConfiguration xmlns=http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration serviceName="Test_cloudservice" osFamily="6" osVersion="*" schemaVersion="2015-04.2.6"> <Role name="TestWebRole"> <Instances count="1" /> </Role> <Role name="TestWorkerRole"> <Instances count="1" /> </Role> <NetworkConfiguration> <VirtualNetworkSite name="test001VNet" /> <AddressAssignments> <InstanceAddress roleName="TestWebRole"> <Subnets> <Subnet name="default" /> </Subnets> </InstanceAddress> <InstanceAddress roleName="TestWorkerRole"> <Subnets> <Subnet name="default" /> </Subnets> </InstanceAddress> <ReservedIPs> <ReservedIP name="cses-stag" /> </ReservedIPs> </AddressAssignments> </NetworkConfiguration> </ServiceConfiguration>
Fichier de configuration pour l’adresse IP publique de l’environnement intermédiaire. Le fichier doit ressembler au code suivant. (Notez que le nom de l’adresse IP réservée a changé de
cses-stag
àcses-prod
.)<ServiceConfiguration xmlns=http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration serviceName="Test_cloudservice" osFamily="6" osVersion="*" schemaVersion="2015-04.2.6"> <Role name="TestWebRole"> <Instances count="1" /> </Role> <Role name="TestWorkerRole"> <Instances count="1" /> </Role> <NetworkConfiguration> <VirtualNetworkSite name="test001VNet" /> <AddressAssignments> <InstanceAddress roleName="TestWebRole"> <Subnets> <Subnet name="default" /> </Subnets> </InstanceAddress> <InstanceAddress roleName="TestWorkerRole"> <Subnets> <Subnet name="default" /> </Subnets> </InstanceAddress> <ReservedIPs> <ReservedIP name="cses-prod" /> </ReservedIPs> </AddressAssignments> </NetworkConfiguration> </ServiceConfiguration>
Workflow
Le diagramme suivant montre les actions que vous devez effectuer pour effectuer l’échange d’adresses IP virtuelles.
Les actions sont décrites dans les étapes suivantes :
Créez un service cloud de production (
testcsesv1
) et mappez l’adresse IP publique statique de production (cses-prod
) au service cloud de production.Lorsque vous disposez d’un nouveau code version 2, créez le service cloud intermédiaire (
testcsesv2
) et mappez l’adresse IP publique intermédiaire (cses-stag
) au service cloud intermédiaire.Déclenchez une opération d’échange d’adresses IP virtuelles pour promouvoir le service cloud intermédiaire vers l’adresse IP publique de production (
cses-prod
).Une fois que vous avez promu la nouvelle version du service cloud de la préproduction vers la production, l’ancienne version du service cloud est supprimée.
Lorsque vous avez un nouveau code version 3, créez le service cloud (
testcsesv3
) et mappez l’adresse IP publique intermédiaire (cses-stag
) au nouveau service cloud.Déclenchez une autre opération d’échange d’adresses IP virtuelles pour promouvoir la nouvelle version du service cloud vers l’adresse IP publique de production (
cses-prod
).
Ces actions sont décrites plus en détail dans les sections suivantes.
Étape 1 : Créer un service cloud de production pour mapper l’adresse IP de production
Le script PowerShell suivant initialise le service cloud de production pour l’étape 1. Dans l’appel d’applet de commande New-AzCloudService , le AllowModelOverride
paramètre permet de remplacer le paramètre de profil de rôle dans le fichier de définition. Pour plus d’informations, consultez Remplacer les paramètres de référence SKU dans les fichiers .cscfg et .csdef pour Services cloud (prise en charge étendue).
# Define basic variables.
$csName = "testcsesv1"
$csRG = "testcses"
$publicIPName = "cses-prod"
$publicIPRG = "testcses"
$location = "East US"
# Create the network profile.
$publicIP = Get-AzPublicIpAddress -Name $publicIPName -ResourceGroupName $publicIPRG
$feIpConfigParams = @{
Name = $csName + '_FEIP'
PublicIPAddressId = $publicIp.Id
}
$feIpConfig = New-AzCloudServiceLoadBalancerFrontendIPConfigurationObject @feIpConfigParams
$loadBalancerConfigParams = @{
FrontendIPConfiguration = $feIpConfig
Name = $csName + '_LB'
}
$loadBalancerConfig = New-AzCloudServiceLoadBalancerConfigurationObject @loadBalancerConfigParams
$networkProfile = @{loadBalancerConfiguration = $loadBalancerConfig}
# Create the role profile.
$skuInfo = @{
SkuCapacity = 1
SkuName = 'Standard_A1_v2'
SkuTier = 'Standard'
}
$role1 = New-AzCloudServiceRoleProfilePropertiesObject -Name "TestWebRole" @skuInfo
$role2 = New-AzCloudServiceRoleProfilePropertiesObject -Name "TestWorkerRole" @skuInfo
$roleProfile = @{role = @($role1,$role2)}
# Create the cloud service.
$azCloudServiceParams = @{
Name = $csName
ResourceGroupName = $csRG
Location = $location
AllowModelOverride = $true
ConfigurationUrl = $cscfg
NetworkProfile = $networkProfile
PackageUrl = $cspkg
RoleProfile = $roleProfile
}
New-AzCloudService @azCloudServiceParams
Après avoir exécuté ce script PowerShell, Azure crée le service cloud, comme indiqué dans la sortie suivante :
ResourceGroupName Name Location ProvisioningState
----------------- ---------- -------- -----------------
TESTCSES testcsesv1 eastus Succeeded
Dans le Portail Azure, vous pouvez afficher des détails sur le nouveau service cloud de production. Recherchez et sélectionnez Services cloud (support étendu), puis sélectionnez le service cloud testcsesv1 dans la liste des services cloud. Dans la page Vue d’ensemble de ce service cloud, la section Essentials affiche le nom de l’adresse IP de production dans le champ Nom DNS d’adresse IP publique (cses-prod.eastus.cloudapp.azure.com
dans le diagramme de flux de travail).
Étape 2 : Créer un service cloud intermédiaire pour mapper l’adresse IP intermédiaire
Lorsque vous disposez d’une nouvelle version du service cloud, vous pouvez la créer en tant que service cloud intermédiaire pour l’étape 2. Dans cette étape, nous recherchons le service cloud de production à l’aide du paramètre frontal de l’adresse IP publique de production. Pour implémenter cette étape, lorsque vous définissez le profil réseau du service cloud intermédiaire, veillez à définir l’ID de sa propriété de service cloud permutable sur l’ID du service cloud de production.
# Define basic variables.
$csName = "testcsesv2"
$csRG = "testcses"
$publicIPName = "cses-stag"
$publicIPRG = "testcses"
$location = "East US"
$FEName = $csName+'_FEIP' # Frontend IP address name
$LBName = $csName+'_LB' # Load balancer name
# Pair to the production public IP address.
$prodPIPName= "cses-prod"
$prodPIPRG = "testcses"
# Get the properties of the production cloud service.
$prodPIPres = (Get-AzPublicIpAddress -Name $prodPIPName -ResourceGroupName $prodPIPRG).Id
$prodCS = (Get-AzCloudService) |
Where-Object {
$_.networkProfile.LoadBalancerConfiguration.FrontendIPConfiguration.PublicIPAddressId
-eq $prodPIPres
}
$csName_pair = $prodCS.Name
$csRG_pair = $prodCS.ResourceGroupName
# Create the network profile.
$publicIP = Get-AzPublicIpAddress -Name $publicIPName -ResourceGroupName $publicIPRG
$feIpConfigParams = @{
Name = $csName + '_FEIP'
PublicIPAddressId = $publicIp.Id
}
$feIpConfig = New-AzCloudServiceLoadBalancerFrontendIPConfigurationObject @feIpConfigParams
$loadBalancerConfigParams = @{
FrontendIPConfiguration = $feIpConfig
Name = $csName + '_LB'
}
$loadBalancerConfig = New-AzCloudServiceLoadBalancerConfigurationObject @loadBalancerConfigParams
$networkProfile = New-Object Microsoft.Azure.PowerShell.Cmdlets.CloudService.Models.Api20210301.CloudServiceNetworkProfile
# Set the network profile's load balancer configuration and swappable cloud service ID.
$networkProfile.LoadBalancerConfiguration = $loadBalancerConfig
$networkProfile.SwappableCloudService.Id = (
Get-AzCloudService -Name $csName_pair -ResourceGroup $csRG_pair
).Id
# Create the role profile.
$skuInfo = @{
SkuCapacity = 1
SkuName = 'Standard_A1_v2'
SkuTier = 'Standard'
}
$role1 = New-AzCloudServiceRoleProfilePropertiesObject -Name "TestWebRole" @skuInfo
$role2 = New-AzCloudServiceRoleProfilePropertiesObject -Name "TestWorkerRole" @skuInfo
$roleProfile = @{role = @($role1,$role2)}
# Create the cloud service.
$azCloudServiceParams = @{
Name = $csName
ResourceGroupName = $csRG
Location = $location
AllowModelOverride = $true
ConfigurationUrl = $cscfg
NetworkProfile = $networkProfile
PackageUrl = $cspkg
RoleProfile = $roleProfile
}
New-AzCloudService @azCloudServiceParams
Après avoir exécuté ce script PowerShell, Azure crée le service cloud et le associe à l’adresse IP publique intermédiaire, comme indiqué dans la sortie suivante :
ResourceGroupName Name Location ProvisioningState
----------------- ---------- -------- -----------------
TESTCSES testcsesv2 eastus Succeeded
Dans le Portail Azure, vous pouvez vérifier que ce nouveau service cloud intermédiaire est configuré pour être permutable avec le service cloud de production. Recherchez et sélectionnez Services cloud (support étendu), puis sélectionnez le service cloud testcsesv2 dans la liste des services cloud. Dans la page Vue d’ensemble de ce service cloud, la section Essentials affiche le nom de l’adresse IP intermédiaire dans le champ Nom DNS d’adresse IP publique (cses-stag.eastus.cloudapp.azure.com
dans le diagramme de flux de travail). En outre, cette section affiche une valeur de service cloud échangeable de testcsesv1. À l’inverse, si vous avez sélectionné testcsesv1 dans la liste des services cloud, la valeur du service cloud permutable est affichée comme testcsesv2.
Étape 3 : Déclencher l’échange d’adresses IP virtuelles pour mapper l’adresse IP de production au service cloud intermédiaire
Vous pouvez utiliser les équilibreurs de charge : échangez l’API REST d’adresses IP publiques sur la configuration frontale pour vous aider à permuter l’adresse IP des services cloud. Vous pouvez utiliser l’URL dans l’en-tête de réponse pour vérifier que l’opération asynchrone a terminé.
L’opération d’échange d’adresses IP virtuelles utilise la demande d’Azure Azure-AsyncOperation
Resource Manager. Pour plus d’informations sur les opérations d’échange, consultez Suivre les opérations Azure asynchrones.
# Get the staging public IP address.
$stagPIP = "cses-stag"
$stagPIPRG = "testcses"
$stagPIPres = Get-AzPublicIpAddress -Name $stagPIP -ResourceGroupName $stagPIPRG
$stagPIPID = $stagPIPres.id
$stagPIPFEID = $stagPIPres.IpConfiguration.id
# Get the production public IP address.
$prodPIP = "cses-prod"
$prodPIPRG = "testcses"
$prodPIPres = Get-AzPublicIpAddress -Name $prodPIP -ResourceGroupName $prodPIPRG
$prodPIPID = $prodPIPres.id
$prodPIPFEID = $prodPIPres.IpConfiguration.id
$Payload = (
'{"frontendIPConfigurations":[{"properties":{"publicIPAddress":{"id":"', $prodPIPID,
'"}},"id":"', $stagPIPFEID,
'"},{"properties":{"publicIPAddress":{"id":"', $stagPIPID,
'"}},"id":"', $prodPIPFEID,
'"}]}'
) -Join ""
$subID = (Get-AzContext).Subscription.id
$location = $prodPIPres.Location
$url = (
"/subscriptions/", $subID,
"/providers/Microsoft.Network/locations/", $location,
"/setLoadBalancerFrontendPublicIpAddresses?api-version=2021-02-01"
) -Join ""
# Start a swap operation.
$result = Invoke-AzRestMethod -Path $url -Method POST -Payload $Payload
If ($result.StatusCode -eq 202)
{
$async_url = (
$result.Headers | Where-Object {$_.Key -eq "Azure-AsyncOperation"}
).Value[0]
$code = 0
Do {
$code = (Invoke-AzRestMethod -Uri $async_url -Method Get).StatusCode
If ($code -eq 200) {
Write-Host "Swap Completed!"
}
Else {
Write-Host "In Swapping... Retry after 5 seconds"
Start-Sleep -Seconds 5
}
} While (!($code -eq 200))
}
Étape 4 : Supprimer le service cloud intermédiaire qui a été échangé à partir de la production
Supprimez le service cloud qui a désormais l’adresse IP publique intermédiaire. Ce service cloud était précédemment le service cloud de production. Toutefois, à l’étape précédente, elle a été échangée avec la nouvelle version du service cloud. L’adresse IP intermédiaire est désormais mappée à cette ancienne version. Par conséquent, l’ancien service cloud peut désormais être supprimé en toute sécurité.
# Define basic variables.
$prodPIPName = "cses-prod"
$prodPIPRG = "testcses"
$stagPIPName= "cses-stag"
$stagPIPRG = "testcses"
# Get the cloud service that has the production public IP address.
$prodPIPres = (Get-AzPublicIpAddress -Name $prodPIPName -ResourceGroupName $prodPIPRG).Id
$prodCS = (Get-AzCloudService) |
Where-Object {
$_.networkProfile.LoadBalancerConfiguration.FrontendIPConfiguration.PublicIPAddressId
-eq $prodPIPres
}
# Get the cloud service that has the staging public IP address.
$stagPIPres = (Get-AzPublicIpAddress -Name $stagPIPName -ResourceGroupName $stagPIPRG).Id
$stagCS = (Get-AzCloudService) |
Where-Object {
$_.networkProfile.LoadBalancerConfiguration.FrontendIPConfiguration.PublicIPAddressId
-eq $stagPIPres
}
# Remove the cloud service that has the staging name.
Remove-AzCloudService -Name $stagCS.Name -ResourceGroupName $stagCS.ResourceGroupName
À présent, vous devez être en mesure de voir la nouvelle version du service cloud mappée au nom de l’adresse IP publique de production. De plus, le service cloud échangeable ne sera plus visible.
Dans le Portail Azure, recherchez et sélectionnez Services cloud (support étendu), puis sélectionnez le service cloud testcsesv2 dans la liste des services cloud. (Il n’y aura plus de service cloud testcsesv1 répertorié.) Dans la page Vue d’ensemble de ce service cloud, la section Essentials n’affiche plus de champ de service cloud échangeable (qui contenait auparavant une valeur de testcsesv1). Le champ nom DNS d’adresse IP publique affiche désormais l’adresse IP de production (cses-prod.eastus.cloudapp.azure.com
dans le diagramme de flux de travail).
Étapes 5 et 6 : échanger la nouvelle version du service cloud avec une troisième version
Vous pouvez répéter les étapes 2 à 4 pour configurer la troisième version du service cloud pour la mettre en production et supprimer la deuxième version du service cloud. Vous devez modifier les noms des services cloud, comme décrit dans le résumé suivant des actions :
Créez une troisième version du service cloud en tant que service
testcsesv3
cloud intermédiaire mappé avec l’adresse IP publique intermédiaire.Échangez cette troisième version du service cloud avec la deuxième version (
testcsesv2
maintenant mappée avec l’adresse IP de production après sa configuration avec l’adresse IP intermédiaire).Supprimez la deuxième version du service cloud (
testcsesv2
désormais mappée à l’adresse IP intermédiaire).
Limitations des opérations d’échange d’adresses IP virtuelles
Pour plus d’informations sur les limitations de l’opération d’échange d’adresses IP virtuelles, consultez Permutation ou basculement de déploiements dans Azure Services cloud (support étendu).
Contactez-nous pour obtenir de l’aide
Pour toute demande ou assistance, créez une demande de support ou posez une question au support de la communauté Azure. Vous pouvez également soumettre des commentaires sur les produits à la communauté de commentaires Azure.