DEV Community

Ana Carolina Manzan
Ana Carolina Manzan

Posted on

Implementando Blue-Green deployment com Deployment slots do Azure Web App

Você já passou pela experiência de planejar os seus deployments fora de horário comercial por causa da indisponibilidade que o deployment pode causar?

Ou então, depois de finalizar o deployment, você se deu conta de que a nova versão tem problemas que não deveriam chegar ao ambiente produtivo e precisou realizar um rollback para a versão anterior?

Neste artigo, eu quero mostrar uma solução simples para este problema utilizando a estratégia blue-green deployment com os deployment slots do Azure App Service.

O que são deployment slots?

Primeiramente, precisamos entender o que são os deployment slots e como eles podem nos auxiliar a aplicar a estratégia Blue-green.

Deployment slots é uma funcionalidade específica do recurso Azure App Service que facilita a implantação da aplicação seguindo a estratégia blue-green. Ele nos permite criar uma réplica, um ambiente duplicado atrelado ao Web App original que irá se comportar como um ambiente de preparação que irá receber novas versões da nossa aplicação.

E como isso se relaciona com a estratégia blue-green?

O blue-green é uma estratégia de deployment que consiste em termos uma réplica do ambiente produtivo, na qual iremos implantar as novas versões da aplicação. Depois da implantação, chaveiam-se os ambientes e todas as requisições para a aplicação são encaminhadas para esta nova versão, liberando assim o acesso a todos os usuários.

Uma de suas vantagens é que, em caso de erros na nova versão, basta redirecionar as requisições dos usuários de volta para a versão anterior.

Vou usar uma analogia para explicar melhor: Imagine que você tem 2 cozinhas em seu restaurante: uma azul e uma verde. A cozinha azul é utilizada para preparar as refeições e servir os seus clientes, enquanto a cozinha verde está passando por uma reforma. Quando a reforma da cozinha verde é finalizada, você volta a utilizá-la para preparar as refeições e servir seus clientes, e, se tudo correr bem, você então irá desativar a cozinha azul.

Vamos à prática

Para utilizar os deployment slots, é necessário criar um Web App atrelado a um App Service Plan na camada Standard, no mínimo. As camadas Premium e Isolated de precificação também oferecem a funcionalidade de Deployment Slots.

Para facilitar esta etapa, vamos usar o Azure CLI para criar os recursos.

Quero deixar uma explicação breve sobre o código de criação de recursos abaixo: da linha 1 até a linha 5, criamos variáveis que vão conter as informações dos recursos, como por exemplo, a região onde o recurso deve ser criado, o nome do grupo de recursos, do App Service Plan, do web app e do deployment slot. Você pode trocar os valores das variáveis de acordo com o nome que desejar para seus recursos.

Da linha 7 até a linha 10 do código, vamos criar o grupo de recursos, o App Service Plan, o Web App e o Deployment Slot acoplado ao Web App.

location="brazilsouth"
rgName="bg"
planName="bgplan"
webAppName="bgapp"
slotName="stage"
az group create --location $location --name $rgName
az appservice plan create --name $planName --resource-group $rgName --location $location --sku "S1"
az webapp create --name $webAppName --plan $planName --resource-group $rgName --runtime "dotnet:8"
az webapp deployment slot create --name $webAppName --resource-group $rgName --slot $slotName

Os comandos acima podem ser executados diretamente no seu computador (após instalar o Azure CLI) ou no portal do Azure usando o cloud shell.

Depois de executar os comandos, esse é o resultado que esperamos no portal do Azure, com todos os recursos criados:

Image description

Logo após a criação dos recursos, o Web App (à esquerda) e o Deployment Slot (à direita) exibirão uma mensagem aguardando pelo código que será implantado neles, conforme a imagem abaixo:

Image description

Agora com a infraestrutura pronta, precisamos criar uma pipeline que fará a implantação (o deployment) da aplicação no Web App, e depois disso, fará a operação de troca do Web App com o Deployment Slot.

- task: bash@3
displayName: Deploy to Azure App Service
inputs:
targetType: inline
script: |
az webapp deploy \
--resource-group bg \
--name bgapp \
--slot stage \
--type zip \
--src-path '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
- task: bash@3
displayName: Swap App Service Slots
inputs:
targetType: inline
script: |
az webapp deployment slot swap \
--slot stage \
--resource-group bg \
--name bgapp

No código acima, temos as tarefas que farão as operações de deployment e troca de ambientes. Vamos focar nestas duas tarefas da pipeline por ora, mas disponibilizei o código completo da pipeline aqui e o código completo do projeto aqui.

A primeira tarefa da pipeline será utilizada para implantar a nossa aplicação no Web App. Nesta tarefa, o código da aplicação será enviado diretamente ao deployment slot chamado stage do Web App bgapp.

Depois que o código for implantado no deployment slot, na segunda tarefa vamos realizar a operação de troca dos ambientes (swap). Nesta etapa, trocamos o deployment slot stage de lugar com o Web App que está em produção, e então, disponibilizaremos aos nossos usuários a versão mais atual da aplicação.

Observe que neste cenário, sempre que tivermos uma implantação, a troca também acontecerá logo depois dela. Se desejar ou se for aplicável ao seu cenário, você também pode executar a operação de troca manualmente no portal do Azure.

É hora de testar!

Agora que finalizamos as implementações, configure e execute a pipeline diretamente no Azure DevOps pela primeira vez e valide então o resultado:

Image description

Após a primeira execução da pipeline, implantamos a versão da aplicação que contém a funcionalidade blue, como podemos confirmar na imagem acima.

Agora, iremos implementar a funcionalidade green e implantar novamente com a nossa pipeline. Altere o código fonte para exibir a funcionalidade green, faça o commit e o push para o Azure DevOps, e então, a pipeline será acionada pelas mudanças realizadas na branch main.

Durante a execução da pipeline, o código será implantando no deployment slot stage inicialmente:

Image description

E depois que a operação de troca de ambientes acontecer, teremos então o resultado final da nossa nova implementação:

Image description

À esquerda na imagem acima, temos o nosso ambiente produtivo do Web App com a versão da aplicação que contém a funcionalidade green. À direita, temos o slot stage com a versão anterior que contém a funcionalidade blue.

--

Espero que este conteúdo possa contribuir para sua jornada, e se você gostou, deixe um comentário ou entre em contato comigo no LinkedIn.

Até mais! 👋

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Immerse yourself in a wealth of knowledge with this piece, supported by the inclusive DEV Community—every developer, no matter where they are in their journey, is invited to contribute to our collective wisdom.

A simple “thank you” goes a long way—express your gratitude below in the comments!

Gathering insights enriches our journey on DEV and fortifies our community ties. Did you find this article valuable? Taking a moment to thank the author can have a significant impact.

Okay