Python na Cloud

Serverless, containers, o que escolher?

Bianca Rosa

tech lead @ stone

biancarosa.com.br | @__biancarosa

  • Python & Go
  • Docker & Kubernetes & Cloud
  • PythOnRio & Pyladies

O que esperar

  • Um overview das possibilidades.
  • Mais munição pra escolher a melhor opção.
  • Exemplos. Muita coisa prática.

Cloud

There is no cloud. It's just someone else's computer.

#sóquenão

Cloud computing não é apenas sobre servidores remotos. É também sobre abstrações que tornam a vida dos desenvolvedores mais fácil e ajuda a construir sistemas e arquiteturas com alta qualidade.

Exemplos de abstrações

Bancos de dados gerenciados

Servidores de arquivos

Serverless

Vamos falar sobre...

  • PaaS
  • VMs
  • Serverless Functions
  • Containers
  • Kubernetes
  • Containers Serverless

SHOW ME THE CODE!

github.com/biancarosa/python-na-cloud

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

@app.route('/')
def hello_world():
    return jsonify({
      "message": "Hello, World!"
    })
pipenv shell
pipenv install
FLASK_APP=hello_world flask run

Legal! Quero colocar esse código em produção!

PaaS - Platform as a Service

Geralmente a forma mais simples de subir sua aplicação.

  • Heroku
  • Google App Engine
  • Azure App Service
  • Red Hat OpenShift
  • Tsuru

PaaS

  • Custo inicial pode ser baixo.
  • Escalabilidade.
  • Simplicidade para o time de desenvolvimento.
  • Pouco controle e autonomia sobre o ambiente.

Heroku - Hands on!

Procfile

web: gunicorn hello_world:app --workers=4

Heroku - Hands on!

Setup

heroku git:remote -a python-na-cloud

Heroku - Hands on!

Scale

heroku ps:scale web=1

Heroku - Hands on!

Deploy

git push heroku master

VMs - Máquinas Virtuais / Virtual Machines

  • Digital Ocean
  • AWS
  • Google Cloud Platform
  • Azure
  • ... e praticamente qualquer plataforma de cloud.

VMs

  • Controle e autonomia sobre o ambiente.
  • Precisa ser configurado do zero.
  • Maior preocupação com segurança, redes, infraestrutura em geral.

Serverless

Como assim serverless? Não tem servidor?!

Calma.

Arquiteturas serverless provêem uma abstração em cima do servidor em que seu código é executado.

martinfowler.com/articles/serverless.html

Serverless

  • Simplicidade.
  • Custo por tempo de execução.
  • Escalável.
  • Maior latência nos primeiros requests.

Serverless - Hands On!

gcloud beta functions deploy hello_world --trigger-http --runtime python37

Containers

Unidade de software que contém o código e todas as suas dependências para que uma aplicação rode bem e de forma confiável em qualquer ambiente.

docker.com/resources/what-container

Docker

Tecnologia de containers open-source.

Dockerfile

FROM python:3.7.2-alpine3.7

RUN apk add --no-cache --update git make gcc python3-dev musl-dev && \
    set -ex && \
    pip install --no-cache-dir pipenv==10.1.2

WORKDIR /app
ADD . .

RUN set -ex && \
    pipenv install --system --deploy

CMD exec gunicorn --bind :$PORT hello_world:app

Rodando com Docker

docker build . -t python-na-cloud
docker run -e PORT=8000 -p 5000:8000 python-na-cloud

Docker Compose

version: "3"
services:
  web:
    build:
      context: .
    command: gunicorn hello_world:app --workers=4 --bind 0.0.0.0:5000 --reload
    volumes:
      - .:/app
    ports:
      - "5000:5000"

Docker Compose

docker-compose up

Kubernetes

É um orquestrador de containers. Ajuda a gerenciar aplicações que rodam em containers em múltiplos nós, provendo mecanismos básicos pra deploy, manutenção e escalabilidade.

Minikube

Ferramenta para facilitar o teste e desenvolvimento baseado em Kubernetes. Cria uma VM localmente com um cluster de apenas um nó.

minikube start
eval $(minikube docker-env)
kubectl config current-context

Kubernetes - Deployments

kubectl apply -f kubernetes/deployment.yaml

Kubernetes - Pods

watch kubectl get pods

Kubernetes - Services

kubectl get services
minikube service python-na-cloud

Serverless Containers

demo!

Mas como escolhe, então?

Leve em consideração...

  • Custo (do serviço, do time de infraestrutura...)
  • Sua arquitetura
  • Tamanho da sua aplicação
  • Tecnologia

twitter: @__biancarosa

slides: biancarosa.com.br/slides/python-na-cloud.html

codigos: github.com/biancarosa/python-na-cloud

tks :)