Azure App Service MySQL In App

Ainda um serviço em preview, o recurso Azure App Service MySQL in-app foi muito bem recebido. Essa opção de hospedagem permite que seja criado, junto à aplicação web, também a hospedagem de um banco de dados MySQL local.

Aquiteturalmente, isso não faz muito sentido. Principalmente quando falamos de núvem, onde desacoplamento e escalabilidade sem dependencias são fundamentais. Mas, em situações atipicas como criação de uma aplicação com curto ciclo de vida, como um hotsite de um evento, ou um blog pessoal, com um WordPress, faz sentido ter um serviço menos complexo e que seja provisionado com agilidade.

Hoje o Azure oferta MySQL como serviço, mas sobre um serviço terceiro. Porém esse apresenta muitos problemas e faz uma entrega bastante insatisfatória. Por conta disso, existe um apelo forte para que o time de desenvolvimento do Microsoft Azure largue a ClearDB e desenvolva um PaaS MySQL nativo. Acesse e vote pars que essa feature seja o mais rapidamente atendida. 🙂

Contudo, como é um serviço em preview, tem seus bugs. E eu passei por um desses recentemente.

O fato que é a hospedagem embarcada no App Service é bastante limitado. Recebe apenas requisição do localhost, não permite gestão avança do banco de dados – apenas manipulação de objetos, como criação de tabelas, índices, etc – não se pode alterar ou criar usuários adicionais, etc. Ele cria apenas um banco de dados para utilização chamado azuredb com um usuário chamado azure com uma senha já estabelecida password. Enfim, é um servico muito simples, para aplicações realmente simples ou para provas de conceito.

O bug que experimentei foi, após uma semana, perdi a conexão com banco de dado. Via website retornava apenas “Error establishing a database connection”, se tentasse abrir o administrador do WordPress, eu recebia a seguinte tela:

Wordpress No database connection

Comecei a fazer a lista recomendada para investigar o problema. Partindo do mais simples, fui ver se o nome do banco estava correto. As changes de não estarem eram poucos, afinal o site estava funcionando à uma semana sem problemas. Mesmo assim, via App Service Editor, fui verificar o aquivo wp-config.php, e tudo estava correto.

App Servive Editior

Para me certificar que o serviço estava up and running, fui até o Kudu do App Service e listei os processos ativos para meu serviço. Assim pude certificar que o banco de dados estava OK.

kudu-mysql

Sem mais opções, realizei então um backup da aplicação, junto com os logs, afim de poder encontrar alguma pista do que podia estar ocorrendo. Então encontrei as seguintes mensagens:

2016-10-26T13:03:53.3177306Z, System.InvalidOperationException: mysqldump:4740 exit with 2!  mysqldump: Got error: 1862: Your password has expired. To log in you must change it using a client that supports expired passwords. when trying to connect
[…]
2016-10-26T12:58:40.835287Z 100 [Note] Your password has expired. To log in you must change it using a client that supports expired passwords.
2016-10-26T12:58:40.850938Z 101 [Note] Your password has expired. To log in you must change it using a client that supports expired passwords.
2016-10-26T12:59:40.905674Z 103 [Note] Your password has expired. To log in you must change it using a client that supports expired passwords.
Legal! Já sabemos a causa do problema. Agora fica mais fácil, certo? Certo, mas pena que eu temos acesso para alterar a senha desse usuário.
Para finalizar, entrei em contato com o time de produto Azure, direto na Microsoft, e eles me passaram um link de uma thread em um fórum já com esse problema – claro que não fui o primeiro.
Uma das respostas sugere um workaround para o problema. Basta acessar o Application Settings da hospedagem, e adicionar a seguinte chave/valor:
WEBSITE_MYSQL_ARGUMENTS = “–default_password_lifetime=0”
websitemysqlarguments
Com essa modificação feita, bastou abrir o site novamente, e tudo voltou a funcionar como deveria.

 


Leave a Reply

Your email address will not be published. Required fields are marked *