Desenvolvimento

16 abr, 2019

Publicando sua aplicação Web Python no WebApp do Azure e configurando o CI/CD da sua aplicação

Publicidade

Neste artigo, mostrarei como publicar um site ou Api REST em Python no Web App do Azure. Lembrando que o foco do artigo não é exatamente como criar sites ou APIs Rest com o Python, mas ao longo dos artigos vou avançando na utilização dos recursos e das bibliotecas e explicando um pouco sobre o Flask e como utilizá-lo.

  • Já conhece o Programa de Afiliados da FC Nuvem? Já pensou em ser remunerado quando um de seus clientes adota uma tecnologia em Nuvem? Então afilie-se em https://www.fcnuvem.com.br/afiliados com o código LUIGI.

Se você já conhece o Flask, vá direto para a parte do Azure.

Para isso, será utilizado:

  • Flask, que será melhor descrito posteriormente
  • Python na sua versão 3.6 (essa é a versão mais atual de suporte no Azure)
  • Visual Studio Code para codificar nossa aplicação (instale a extensão do Python)
  • Azure DevOps para utilização do repositório GIT que será utilizado para o deploy da aplicação
  • Postman para consumir nossa API de exemplo.

Começamos pela pergunta que mais escuto:

  • Por que Python?

Se você também se perguntou isso, vou tentar responder rapidamente.

Python é simples, leve, versátil, fácil de aprender e roda em todos os sistemas operacionais, e hoje – graças a estudos do Data Science – é utilizado por muitas empresas. Como já li em outros artigos, Python é o verdadeiro Canivete Suíço.

O que é Flask, então?

Flask é um micro-framework (um framework minimalista) desenvolvido em Python e baseado em três pilares:

  • 1. WerkZeug: biblioteca para desenvolvimento de apps WSGI que é a especificação universal de como deve ser a interface entre um app Python e um web server
  • 2. Jinja2: template engine escrito em Python – você escreve templates utilizando marcações como {{ nome_da_variavel }} ou {% for nome in lista_de_nomes %} Hello {{nome}}!! {% endfor %} e o Jinja se encarrega de renderizar este template. Ou seja, ele substitui os placeholders pelo valor de suas variáveis
  • 3. Good Intentions: o Flask é Pythonico! Além do código ter alta qualidade nos quesitos de legibilidade, ele também tenta seguir as premissas do Zen do Python, e dentro dessas boas intenções nós temos o fato dele ser um micro-framework, permitindo que você tenha liberdade de estruturar seu app da maneira que desejar.

Então temos uma linguagem super poderosa em mãos e um micro-framework que nos facilita começar com a parte Web em Python.

Mãos na massa:

Instale o Python em sua versão 3.6 ou 3.7, baixe neste link. No VS Code, abra um novo terminal:

Digite o comando abaixo:

python -m pip install flask ¹

O Pip é gerenciador de pacotes do Pytho. Para quem esta familiarizado com o .Net, seria o Nuget do Python.

O comando (1) instala o pacote Flask e suas dependências. Isso significa que já podemos começar a utilizá-lo.

Ainda no VS Code pressione “Ctrl+Shift+P” e selecione a opção “Python: selecionar interpretador”:

Na etapa seguinte, selecione a versão 3.6 ou 3.7 do Python

No canto esquerdo, embaixo, deverá estar da seguinte maneira:

Pronto, o VS Code está configurado para utilizar o Python.

Abra um novo arquivo e digite o seguinte comando:

from flask import Flask, jsonify
app = Flask(__name__)

# Make the WSGI interface available at the top level so wfastcgi can get it.
wsgi_app = app.wsgi_app

@app.route('/')
def home():
   return 'hello world'   

profissional = [
    {
        'id': 1,
        'nome': u'Luigi Tavolaro',
        'cargo': u'Desenvolvedor', 
        'idade': 36
    },
    {
        'id': 2,
        'nome': u'Douglas Pereira',
        'cargo': u'RH', 
        'idade': 25
    }
]

@app.route('/api', methods=['GET'])
def api_profissionais():
    return jsonify({'profissional': profissional}) 

if __name__ == '__main__':
    app.run()

Na linha 7 estou definindo minha rota principal, onde vai rodar minha aplicação WEB, e na linha 26 estou criando a rota para a minha API.

No VS Code:

Clicar no debug à esquerda e em seguida clicar no play verde que está destacado pela seta azul. A aplicação está rodando conforme destacado em amarelo.
A aplicação está rodando no localhost
Postman retorna o resultado da API rodando via localhost

Sua aplicação Flask já está rodando – tanto a parte web, como a Api.

Agora vamos para parte do Azure:

Se você não tem uma conta no Azure, recomendo o programa Visual Studio Dev Essentials. Há diversos serviços gratuitos ou para experimentar, e o Azure é um deles: “Conta gratuita do Azure (inclui um ano de serviços gratuitos, US$200 no primeiro mês)”, se você não tem um cartão de crédito internacional, pode criar uma conta no Nubank, por exemplo.

Abra o portal do Azure e clique em App Services:

Criar um novo WebApp
Clicar nos itens destacados. Inserir o nome, o Resource Group, e o plano que será utilizado
Depois de criar o recurso, entre em seu WebApp e vá em configurações. Na aba General Settings escolha a Stack  – no caso, Python

Existe uma versão do Python instalada e é a versão 3.4. A equipe do Azure não atualiza a versão do Python para não “quebrar” os aplicativos que já estão rodando. Porém, podemos fazer isso manualmente conforme abaixo:

Clique no link Extensions
Escolha a versão 3.6.4 x64 do Python

Aceite os termos legais.

Pronto, agora temos o Python 3.6 instalado. Porém, agora precisamos instalar a biblioteca do Flask para rodar nossa aplicação.

Para isso usaremos o projeto KUDU do Azure. Dessa maneira poderemos manipular nosso WebApp via linha de comando.

Clicar em Advanced tools e posteriormente em Go
abra o CMD para manipularmos o WebApp
Navegar até a pasta D:\home\python364x64
Executar o mesmo comando (1) do início do artigo
O Flask foi instalado no nosso WebApp

Lembrando que é uma configuração Windows nosso Web App. Portanto, estamos utilizando o IIS para rodar a aplicação. Precisamos então de um Web.config para as configurações da aplicação.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="WSGI_HANDLER" value="main.app"/>
    <add key="PYTHONPATH" value="D:\home\site\wwwroot"/>
    <add key="WSGI_LOG" value="D:\home\LogFiles\wfastcgi.log"/>
  </appSettings>
  <system.webServer>
	<httpErrors errorMode="Detailed"></httpErrors>
    <handlers>
      <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule" scriptProcessor="D:\home\Python364x64\python.exe|D:\home\Python364x64\wfastcgi.py" resourceType="Unspecified" requireAccess="Script"/>
    </handlers>
  </system.webServer>
</configuration>

Na linha 4 informamos quem é meu arquivo principal. Ou seja, quem deve ser executado. No caso, meu arquivo do Flask é o main.py. Portanto, na linha 4 deve estar o main.app. Essa configuração é apenas para aplicações Flask.

As demais linhas são configurações sobre caminho do Python e do FastCGI, que é utilizado para executar o script.

Agora vamos colocar nossa aplicação no repositório do Azure DevOps. Entre em https://azure.microsoft.com/pt-br/services/devops/.

Poderíamos transferir os dados via ftp também.

Clique em novo projeto e informe o nome e a descrição:

Criado o repositório, vamos fazer o push do nosso código. Eu fiz via Web mesmo, mas vocês podem usar a ferramenta de Git que vocês preferirem.

Clique no botão destacado para fazer o upload dos arquivos

Voltando ao Portal do Azure, dentro do seu WebApp.

Clique em Deployment Center e logo em seguida escolha o Azure Repos. Vale destacar que poderia ser outro serviço como o GitHub, ou até mesmo o OneDrive
Escolha os itens pedidos.

Pronto! Ao finalizar será feito automaticamente o Deploy da sua aplicação, e para cada novo PR, o deploy será automático. Sendo assim, temos um início de CI/CD da aplicação.

Aplicação rodando na WebApp.

Faça parte de comunidades técnicas! É muito importante para sua carreira. Conheça as comunidades das quais sou líder:

Se inscreva no canal do YouTube também e me sigam nas redes sociais.

Valeu e obrigado!

Referências