Azure · Migração · Service Bus

Migrar Service Bus Standard a Premium

Hasta hace poco, el Azure Service Bus solo tenía la oferta para el Tier Standard optimizados para entornos de baja tasa de transferencia y para desarrolladores.

El Tier Premium ofrece recursos dedicados por namespace, garantizando latencia predecible y mayor tasa de transferencia a un precio fijo, estando optimizado para entornos de producción y alta tasa de transferencia.

Hoy voy a mostrar cómo realizar la migración de Azure Service Bus Standard a Premium utilizando Powershell (también es posible hacerlo en Azure Portal)

Antes de migrar, necesitas saber esto

  • No es necesaria ninguna modificación en la aplicación, ya que la Connection String existente en el tier Standard será creada en el nuevo namespace Premium
  • Si ya posees un Service Bus Premium y quieres usarlo para esta migración, no debe tener entidades y no debe tener el particionamiento habilitado
  • Todas las entidades en el namespace standard se copian al namespace premium durante el proceso de migración
  • La migración admite 1.000 entidades por unidad del sistema de mensajería en la capa premium
  • Para migrar un tier Basic al tier Premium, es necesario migrarlo primero al tier Standard y luego al Premium
  • El control de acceso basado en roles (RBAC) no se migra, siendo necesario agregarlo después de la migración

Realizando la migración con Powershell

Antes de empezar, el primer paso es tener dos Azure Service Bus, el Standard y el Premium, recordando que el Premium debe estar vacío

Aquí te muestro el paso a paso, para realizar la migración, pero también está el script pronto aquí en mi repositorio GitHub

Vamos a echar un vistazo a las configuraciones del Service Bus Standard

Service Bus Standard

Overview

Shared access policies

Queue

Topic

Y ahora asegúrate de que el Service Bus Premium está vacío

Service Bus Premium

Overview

Shared access policies

Las Shared access policies se crean automáticamente al crear un Azure Service Bus, ya sea Standard o Premium, así que está bien existir y no interferirá con la migración.

¿Quieres saber más sobre Shared Access Policies? Haz clic aquí

Queue

Topic

Definiendo variables

A continuación, necesitaremos la siguiente información para definir variables en nuestro script

  • Resource Group del Azure Service Bus Standard
  • Nombre del Azure Service Bus Standard
  • Resource ID del Service Bus Premium, en el formato a continuación
    • /subscriptions/[subscription-id]/resourceGroups/[resource-group]/providers/Microsoft.ServiceBus/namespaces/[Azure-Service-Bus-Premium-Name]_
  • Domain Name Service Name luego de la migración
    • Será utilizado para accesar el namespace Standard (antiguo) tras la migración para vaciar colas y suscripciones

En el escenario que estoy utilizando, estas son las variables:

$resourceGroupSourceAsb = "rg-vinicius"
$sourceServiceBus = "vinicius-sb01"
$targetServiceBus = "/subscriptions/073f055f-b619-5649-c913-bb1462def95f/resourceGroups/rg-vinicius/providers/Microsoft.ServiceBus/namespaces/vinicius-sb02-premium"
$dnsPostMigration = "acessarviniciussb01"

Ejecutando la migración

Una vez definidas las variables, vamos a iniciar la migración, con el siguiente comando

az servicebus migration start --resource-group $resourceGroupSourceAsb --name $sourceServiceBus --target-namespace $targetServiceBus --post-migration-name $dnsPostMigration

Y espera a que se ejecute hasta que veas la siguiente salida

Entonces, confirma la migración para poder acceder al Service Bus Premium por su Connection String

az servicebus migration complete --resource-group $resourceGroupSourceAsb --name $sourceServiceBus

Este comando no devolverá ningún tipo de salida, así que ahora vamos a verificar cómo está el Service Bus en Azure Portal

Verificar en Azure Portal

Primero, vamos al Azure Service Bus Standard

Post-migración Service Bus Standard

El Shared access policies fue cambiado, como puedes ver, ahora el Primary y el Seconday Connection String muestran el valor definido en la variable $dnsPostMigration (acessarviniciussb01)

Observando las queues, en el Service Bus Standard aún existe la queue-test y con 16 mensajes, y necesitamos vaciar antes de eliminar este Service Bus

Post-migración Service Bus Premium

Ya en el Shared access policies del Service Bus Premium, tenemos un Alias Primary y Secondary Connection String utilizando el nombre del Service Bus Standard, y esta es la explicación para la frase “Antes de migrar, necesitas saber esto”:

No es necesaria ninguna modificación en la aplicación, ya que la Connection String existente en el tier Standard se creará en el nuevo namespace Premium

This image has an empty alt attribute; its file name is migrar-service-bus-standard-para-premium-service-bus-premium-shared-access-policies-apos-migracao-viniciusdeschamps.com_.br_-1024x629.png

Y también el topics-test en Topics

Además, ahora tenemos el queue-test en Queues

Sin embargo, como se puede observar, los mensajes que existían en el Service Bus Standard no se migraron al Premium, incluso Microsoft, en su documentación, explica esto

Los datos de los mensajes que fueron confirmados en el namespace standard no se copian del namespace standard al namespace premium.

El namespace standard puede tener algunos mensajes que fueron enviados y confirmados mientras la migración estaba en progreso. Vacía manualmente estos mensajes del namespace Standard y envíalos manualmente al namespace Premium. Para drenar manualmente los mensajes, utiliza una aplicación de consola o un script que drene las entidades del namespace estándar usando el nombre DNS pos-migración que especificaste en los comandos de migración. Envía estos mensajes al namespace premium para que puedan ser procesados por los receptores.

Enviar mensajes de Service Bus Standard al Service Bus Premium

Hasta la fecha de creación de este artículo, no pude encontrar una forma de hacerlo mediante Powershell, solo C# y Python.

Entonces, utilicé el código que encontré aquí como ejemplo para crear el código en Python.

Necesitas instalar los siguientes módulos de Python y el código en Python está disponible aquí en mi GitHub

  • pip install azure-servicebus

He ejecutado a través de Visual Studio Code, yendo a Run > Start Debugging para que, si hay algún error, pueda obtener más detalles

Y esta fue la salida, tras la ejecución

Vamos a verificar en Azure Portal, si el Service Bus Premium ahora posee mensajes en la queue

Ahora que la migración ocurrió, los mensajes fueron transferidos al Service Bus Premium, basta quitar el Service Bus Standard

Referencias

AzureAzure Service BusMigraçãoPremiumService BusStandard
Migrar Service Bus Standard a Premium — Vinicius Deschamps