Até pouco tempo, o Azure Service Bus apenas tinha apenas a oferta para o Tier Standard otimizados para ambientes de baixa taxa de transferência e para desenvolvedores.
O Tier Premium proporciona recursos dedicados por namespace, garantindo latência previsível e maior taxa de transferência a um preço fixo, sendo otimizada para ambientes de produção e alta taxa de transferência.
Hoje vou mostrar como realizar a migração do Azure Service Bus Standard para Premium utilizando Powershell (também é possível fazer no Azure Portal)
Antes de migrar, você precisa saber disso
- Nenhuma alteração na aplicação é necessária, pois a Connection String existente no tier Standard vai ser criada no novo namespace Premium
- Caso você já possua um Service Bus Premium e queira utilizá-lo para esta migração, ele não deverá ter entidades e não deverá ter o particionamento habilitado
- Todas as entidades no namespace standard são copiadas para o namespace premium durante o processo de migração
- A migração dá suporte a 1.000 entidades por unidade do sistema de mensagens na camada premium
- Para migrar um tier Basic para o tier Premium, é necessário migrá-lo para o tier Standard primeiro e depois para o Premium
- O controle de acesso baseado em função (RBAC) não é migrado, sendo necessário adicionar após a migração
Realizando a migração com Powershell
Antes de começar o primeiro passo é ter dois Azure Service Bus, o Standard e o Premium, lembrando que o Premium precisa estar vazio
Aqui te mostro o passo a passo, para realizar a migração, mas também tem o script pronto aqui no meu repositório GitHub

Vamos dar uma olhada nas configurações do Service Bus Standard
Service Bus Standard
Overview

Shared access policies

Queue

Topic

E agora garantir que o Service Bus Premium está vazio
Service Bus Premium
Overview

Shared access policies
Shared access policies são criadas automaticamente ao criar um Azure Service Bus, seja ele Standard ou Premium, então tudo bem existir e não vai atrapalhar a migração.
Quer saber mais sobre Shared Access Policies? Clique aqui

Queue

Topic

Definindo variáveis
Em seguida, vamos precisar das seguintes informações para definir como variáveis no nosso script
- Resource Group do Azure Service Bus Standard
- Nome do Azure Service Bus Standard
- Resource ID do Service Bus Premium, no formato abaixo
- /subscriptions/[subscription-id]/resourceGroups/[resource-group]/providers/Microsoft.ServiceBus/namespaces/[Azure-Service-Bus-Premium-Name]
- Domain Name Service Name pós-migração
- Será utilizado para acessar o namespace Standard (antigo) após a migração para esvaziar filas e assinaturas
No cenário que estou utilizando, estas são as variáveis:
$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"

Executando a migração
Uma vez definida as variáveis, vamos iniciar a migração, com o seguinte comando
az servicebus migration start --resource-group $resourceGroupSourceAsb --name $sourceServiceBus --target-namespace $targetServiceBus --post-migration-name $dnsPostMigration

E aguardar a execução até que você veja a seguinte saída

Então, confirmar a migração, para conseguir acessar o Service Bus Premium pela sua Connection String
az servicebus migration complete --resource-group $resourceGroupSourceAsb --name $sourceServiceBus

Este comando não retornará nenhum tipo de saída, então agora vamos verificar como está o Service Bus no Azure Portal
Verificar no Azure Portal
Primeiro, vamos até o Azure Service Bus Standard
Pós-migração Service Bus Standard
O Shared access policies foi alterado, como você pode ver, agora o Primary e o Seconday Connection String mostra o valor definido na variável $dnsPostMigration (acessarviniciussb01)

Observando o queues, no Service Bus Standard ainda possui a queue-test e com 16 mensagens, e precisamos limpar antes de deletar esse Service Bus

Pós-migração Service Bus Premium
Já no Shared access policies do Service Bus Premium, temos um Alias Primary e Secondary Connection String utilizando o nome do Service Bus Standard, e esta é a explicação para a frase “Antes de migrar, você precisa saber disso”:
Nenhuma alteração na aplicação é necessária, pois a Connection String existente no tier Standard vai ser criada no novo namespace Premium

E também o topics-test em Topics

Além disto, temos agora o queue-test em Queues

Porém, como podem observar, as mensagens que existiam no Service Bus Standard não foram migradas para o Premium, inclusive a Microsoft, em sua documentação, explica isso
Os dados da mensagem que foram confirmados no namespace standard não são copiados do namespace standard para o namespace premium.
O namespace standard pode ter algumas mensagens que foram enviadas e confirmadas enquanto a migração estava em andamento. Esvazie manualmente essas mensagens do namespace Standard e envie-as manualmente para o namespace Premium. Para drenar manualmente as mensagens, utilize um aplicativo de console ou um script que drene as entidades do namespace padrão usando o nome DNS pós-migração que você especificou nos comandos de migração. Envie essas mensagens para o namespace premium para que elas possam ser processadas pelos receptores.
Enviar mensagens Service Bus Standard para o Service Bus Premium
Até o momento da criação deste artigo, não consegui encontrar uma forma de fazer através de Powershell, apenas C# e Python.
Então, utilizei o código que encontrei aqui como exemplo para criar o código em Python.
Você precisa instalar os seguintes módulos do Python e o código em Python está disponível aqui no meu GitHub
- pip install azure-servicebus
Eu executei através do Visual Studio Code, indo em Run > Start Debugging para caso exista algum erro, eu consiga ter mais detalhes a respeito

E essa foi a saída, após a execução

Vamos conferir no Azure Portal, se o Service Bus Premium agora possui mensagens no queue

Agora que a migração ocorreu, as mensagens foram transferidas para o Service Bus Premium, basta remover o Service Bus Standard
Referências
- https://renicius-pagotto.medium.com/azure-service-bus-entendendo-seu-funcionamento-parte-1-52ab641a4d00
- https://learn.microsoft.com/pt-br/azure/service-bus-messaging/service-bus-migrate-standard-premium
- https://learn.microsoft.com/pt-br/azure/service-bus-messaging/service-bus-migrate-standard-premium#migration-steps
- https://learn.microsoft.com/pt-br/azure/service-bus-messaging/service-bus-authentication-and-authorization
Deixe um comentário