Python a architektura "serverless" w chmurze AWS

Piotr Grzesik

@p_grzesik

Co znaczy "serverless"? 

Serverless

  • Function as a Service
  • Serwery zarządzane przez providera
  • Bezstanowe kontenery
  • Sterowane zdarzeniowo

Przykład

Dlaczego warto?

  • Brak konieczności zarządzania instancjami
  • Skalowanie horyzontalne
  • Wysoka dostępność
  • Płacimy tylko za faktycznie wykorzystany czas

Ewentualne problemy

  • Debugging
  • Mniejsza kontrola
  • Zależność od dostawcy usługi (AWS, Azure, etc.) 
  • Na AWS tylko Python 2.7 :( 
  • Względnie nowe rozwiązanie (Lambda - 2014)

Zastosowania

  • Analiza logów "w locie"
  • Aplikacje webowe
  • Przetwarzanie obrazów, wideo
  • Automatyczne backupy, etc.

AWS Lambda

  • Python 2.7, Java, node.js, C#
  • Łatwa integracja z serwisami jak API Gateway, Kinesis, AWS RDS, S3, etc.
  • Limit czasu wykonywania - 5 minut
  • Limit równolegle wykonywanych funkcji - 100 ("miękki" limit)
  • Koszt - 1 milion requestów, 400 000 GB-sekund 
  • Wielkość paczki - 50 MB

Alternatywy

  • Google Cloud Functions
  • Azure Functions
  • IBM Open Whisk
  • Iron.io

Hello lambda

Zappa

(https://github.com/Miserlou/Zappa)

  • Serverless microservices w Pythonie
  • Pakuje i deployuje aplikacje na AWS Lambda
  • Działa ze wszystkimi frameworkami kompatybilnymi z WSGI
from flask import Flask

app = Flask(__name__)


@app.route('/')
def index():
    return "Hello lambda!", 200


@app.route('/cheers')
def cheers():
    return "Cheers!", 200


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

app.py

workon zappa-example-venv
zappa init
zappa deploy dev
...
Deployment complete!: https://9uxxay7zu8.execute-api.eu-west-1.amazonaws.com/dev

Aktywujemy virtualenv

Tworzymy plik konfiguracyjny

{
    "dev": {
        "app_function": "app.app", 
        "s3_bucket": "zappa-0nk7abe9w"
    }
}

zappa_settings.json

Deploy aplikacji

zappa undeploy dev

Usunięcie aplikacji

Made with Slides.com