$30 off During Our Annual Pro Sale. View Details »

Introduciendo Serverless en Proyectos Python

Introduciendo Serverless en Proyectos Python

Charla para Python Madrid, Septiembre de 2017.

En esta charla citaremos las ventajas de Serverless y nos centraremos en las situaciones en las que podemos introducirlo dentro de nuestros proyectos Python. Utilizaremos AWS Lambda para los ejemplos.

Vídeo de la charla en https://youtu.be/BPJI2zApuug

Carlos Hernando

September 06, 2017
Tweet

More Decks by Carlos Hernando

Other Decks in Programming

Transcript

  1. Introduciendo Serverless en
    Proyectos Python
    Carlos Hernando
    @chernando

    View Slide

  2. Serverless Hype!
    https://trends.google.com/trends/explore?date=2014-01-01%202017-08-27&q=serverless

    View Slide

  3. View Slide

  4. View Slide

  5. Serverless

    View Slide

  6. Saas / BaaS

    View Slide

  7. Está usted aquí
    Nuestra Aplicación

    View Slide

  8. def handler(event, context):
    # PONGA SU CÓDIGO AQUÍ
    return
    AWS Lambda

    View Slide

  9. Serverless

    View Slide

  10. https://aws.amazon.com/serverless/

    View Slide

  11. Arquitectura Serverless
    https://medium.com/cloud-academy-inc/serverless-beyond-functions-cd81ee4c6b8d

    View Slide

  12. Escenarios

    View Slide

  13. Scripts de “mantenimiento”

    View Slide

  14. View Slide

  15. AWS Lambda

    View Slide

  16. def handler(event, context):
    # PONGA SU CÓDIGO AQUÍ
    return

    View Slide

  17. View Slide

  18. AWS Lambda
    Desarrolladores
    Credenciales
    Base de datos
    Servidores

    View Slide

  19. Empaquetar
    $ cd venv/lib/python3.6/site-packages/
    $ zip -r9 ../../../../deploy.zip *
    $ cd -
    $ zip -g deploy.zip *.py

    View Slide

  20. Crear Lambda
    $ aws lambda create-function \
    --region eu-west-1 \
    --function-name SimpleScript \
    --zip-file fileb://deploy.zip \
    --role arn:aws:iam::XXX:role/MyLambdaRole \
    --vpc-config SubnetIds=XXX,SecurityGroupIds=XXX \
    --handler handler.handler \
    --runtime python3.6 \
    --profile personal \
    --timeout 10 \
    --memory-size 512

    View Slide

  21. Actualizar Lambda
    $ aws lambda update-function-code \
    --region eu-west-1 \
    --function-name SimpleScript \
    --zip-file fileb://deploy.zip \
    --profile personal

    View Slide

  22. Aprendizajes

    View Slide

  23. Tareas periódicas

    View Slide

  24. # Crontab
    30 08 10 06 * /root/full-backup
    00 11,16 * * * /root/incremental-backup
    00 09-18 * * * /root/check-db-status
    00 09-18 * * 1-5 /root/send-updates
    */10 * * * * /root/consolidate-reports
    @yearly /root/annual-maintenance
    @monthly /root/steal-money

    View Slide

  25. Celery workers
    Celery Beat

    View Slide

  26. View Slide

  27. Celery Beat
    Celery workers

    View Slide

  28. AWS
    Lambda
    Cloudwatch
    Events
    Celery workers

    View Slide

  29. def handler(event, context):
    # PONGA SU CÓDIGO AQUÍ
    return

    View Slide

  30. >>> from tasks import add
    >>> add.delay(4, 4)

    View Slide

  31. >>> from celery import Celery
    >>> app = Celery(broker=broker)
    >>> app.send_task('tasks.add', args=[4,4])

    View Slide

  32. View Slide

  33. https://serverless.com

    View Slide

  34. functions:
    celeryless:
    handler: celeryless.handler
    events:
    - schedule:
    rate: rate(10 minutes)
    input:
    task: tasks.add
    args: [4, 4]

    View Slide

  35. Aprendizajes

    View Slide

  36. APIs a pequeña escala

    View Slide

  37. View Slide

  38. API Gateway AWS Lambda

    View Slide

  39. View Slide

  40. SAM: Serverless Application Model
    https://github.com/awslabs/serverless-application-model

    View Slide

  41. https://github.com/aws/chalice

    View Slide

  42. from flask import Flask
    app = Flask(__name__)
    @app.route("/")
    def index():
    return "Hello World!"

    View Slide

  43. from chalice import Chalice
    app = Chalice(app_name="helloworld")
    @app.route("/")
    def index():
    return {"hello": "world"}

    View Slide

  44. Aprendizajes

    View Slide

  45. Eventos encadenados

    View Slide

  46. Serverless Image resizing (AWS Lambda and AWS s3)
    http://blog.kaliloudiaby.com/index.php/serverless-image-resizing-aws-lambda-and-aws-s3/

    View Slide

  47. De $0,20 a $834

    View Slide

  48. 14 horas
    $425
    25.000.000 GB/s (290 días)
    37.000.000 Invocaciones
    AWS Lambda

    View Slide

  49. View Slide

  50. Serverless
    Scripts Periódicos API HTTP

    View Slide

  51. https://www.wdl.org/en/item/576/

    View Slide

  52. Documentación de la charla:

    https://bit.ly/pymad0917

    Carlos Hernando

    @chernando

    View Slide

  53. •Photo by Chris Lawton
    on Unsplash
    •Photo by Maarten van
    den Heuvel on Unsplash
    •Photo by Markus Spiske
    on Unsplash
    •Photo by Teresa Kluge
    on Unsplash
    •Photo by Dan Paul on
    Unsplash
    •Photo by Mike Alonzo
    on Unsplash
    Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
    https://creativecommons.org/licenses/by-sa/4.0/
    Imágenes cortesía de:

    View Slide