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
Serverless
By progressive
Serverless
- 794