Flyway & Azure DevOps : IaC com ARM Template
Tags: azure, devops, sql, database
Published: 2020-06-30 15:16:21

E chegamos ao penúltimo artigo dessa serie.

Vamos agora adicionar a criação do nosso banco *Azure SQL Database* também no Azure DevOps.

E para isso, lembram que um pouco antes de criar o serviço de SQL Database no Azure, tínhamos a opção de baixar o template ARM? Pois bem, utilizaremos ele agora.

# Tópicos
* [IaC e ARM Template](#chapter-0)
* [Adicionado ARM Template ao Repos GIT](#chapter-1)
* [Adicionando ARM Template no nosso Release Pipeline](#chapter-2)

## IaC e ARM Template<a name="chapter-0"></a>


![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/7yi0qvgmn1z1grnpjd1c.png)


O nosso banco ja esta no nosso pipeline, mas a nossa infraestrutura (o nosso servidor de banco de dados SQL Database) não.

E para isso, precisamos também adicionar a criação do nosso banco de dados ao nosso repositório, versionando e atualizando através de scripts.

E essa tarefa, podemos chamar de IaC, ou simplesmente, Infraestrutura como código. 

Temos varias opções no mercado, como *Terraform*. Mas usarei um recurso do Azure, chamado *ARM*, *Azure Resource Manager*.

## Adicionado ARM Template ao Repos GIT<a name="chapter-1"></a>

Primeiro, vamos descompactar o arquivo que baixamos antes de criação do nosso banco SQL Database no Portal do Azure.

E encontramos esses 2 arquivos: *parameters.json* e *template.json*.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/36ligcgikpza721smmnm.png)

Vamos precisar incluir eles no nosso Azure Repos.

Para isso, vamos criar o arquivo *parameters.json* e adicionar nele o conteúdo do nosso arquivo da pasta descompactada com o mesmo nome.

No parâmetro *administratorLoginPassword*, voce precisará adicionar a senha a ser aplicada ao banco de dados.

*Não é uma boa ideia adicionar senha do seu banco no seu repositório. No próximo artigo dessa serie, iremos substituir a senha por um segredo do Azure Key Vaults*.

E podemos *commitar* ele.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/9pbrmbixtecbnkm35yjw.png)

Vamos fazer upload do nosso arquivo *template.json*.

Portanto, ficaremos com os 2 arquivos na nossa pasta *ARM*.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/oov9fte1stbfr5pydgmg.png)

## Adicionando ARM Template no nosso Release Pipeline <a name="chapter-2"></a>

Vamos ir em *Pipelines > Releases* e editar o nosso pipeline.

E adicionar um novo *Stages* em *Add > New Stage*.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/scwukgznkz0ayflqbxot.png)

E novamente, vamos inserir o o template vazio em *Empty Job*.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/qe7ru62bggawhrhccm5f.png)

Podemos editar o seu nome para *ARM - Create DB*.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/7gpw1oaddrf8ak1m51t8.png)

E vamos editar o agente desse estagio.

Adicionar um nova tarefa. E procurar por *ARM*.

E será essa que usaremos: *ARM Template Deployment*.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/dhoa54u00q9zlwwp1dvd.png)

Precisamos selecionar e autorizar a nossa inscrição no Azure e a nossa inscrição. 

A *action* será *Create or update resource group*. Precisamos também selecionar o nosso grupo de recursos e a localização que usaremos.

E por fim, precisamos *linkar* o nosso template com o arquivo dentro da pasta *ARM* e o mesmo com o arquivo de parâmetros.


![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/6p6x81x67s4bpuzx03ly.png)

Podemos voltar a aba *Pipelines* e alterar a execucao do estagio *Flyway Info & Migrate*.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/1ih9dhv39jilx5xvmh6p.png)

Vamos alterar o gatilho para *After stage* e selecionar o estágio de *ARM - Create DB*.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/hxuxkf80s73f38dq02t9.png)

E ficou assim o nosso release pipeline:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/pxb00inc9ucl5erc7gki.png)

Antes de gerar o pipeline, vamos ir no Portal do Azure e excluir o nosso servidor e banco SQL Database.

E para isso, vamos ir no nosso grupo de recursos do Azure, selecionar o nosso *SQL database* e *Sql server* e exclui-los.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/m0knaf6biokd8cg899pl.png)

Vamos confirmar e excluir.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/j2ccvui7lc82oasj7pe9.png)

Pronto! Não temos *SQL Database* no nosso grupo de recursos.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/33adku4n8tlnq0cf7k0i.png)

Agora sim, podemos salvar o nosso pipeline e criar um novo release.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/dcrbmeop98yqu3kv3hbd.png)

E nosso *deploy* irá iniciar. Primeiro iremos criar o banco SQL Database no Azure, depois passaremos para o estágio do Flyway onde teremos a instalação, a execução do comando de informação e por fim, a migração rodando todos os scripts disponíveis.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/qhac3nfwb8pf3lk3m622.png)

E la está. Executou com sucesso como o esperado. ;)

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/xcx7cbpl8qfov9vr5i3i.png)

No próximo artigo, iremos adicionar segredo do *Azure Key Vaults* no nosso Release Pipeline, e assim, iremos atribuir a senha do banco de dados ao serviço do Azure!

:)