AWS para tiesos

Introducción a Serverless

Por Alberto Fernández Valiente

Primero un poco de historia

  • Servidores tradicionales
  • Servidores virtualizados
  • La nube (IaaS)
  • Contenedores
  • Serverless (FaaS)

Contenedores VS Funciones

Mucho en común

  • Facilidad de escalado
  • Autocontenido
  • Simplicidad de administración

Contenedores VS Funciones

Docker Lambda
Actualizaciones de seguridad Si No
Estandarización Si No (CNCF)
Persistencia Si No
Portabilidad Si No
Estructura de coste Autoescalable Totalmente dinámica

¿Qué es Serverless?

  • Orientado a eventos
  • Sin estado
  • Estructura de costes
  • Microservicios o Nanoservicios

Proveedores FaaS

  • AWS Lambda
  • IBM Cloud Functions (Apache OpenWhisk)
  • Azure Functions (Experimental)
  • Google Cloud Functions (Beta)

Características de AWS Lambda

  • Generosa capa gratuita
  • Muchos origenes de eventos
  • Serverless Application Repository

Limitaciones de AWS Lambda

  • Duración máxima de 300 segundos
  • Tamaño máximo de memoria 3008 MB
  • Tamaño máximo de Zip 50 MB
  • Carpeta temporal de 512 MB
  • 1000 ejecuciones concurrentes por región

Estructura

+ demo-lambda
  + psycopg2
  - exclude.lst
  - create_and_publish.sh
  - configure.sh
  - deploy.sh
  - invoke.sh
  - handler.py
  - connection.py
  - logger.py
  - test_connection.py
          

Crear funciones a mano

zip -r demo.zip * -x@exclude.lst

aws lambda create-function --function-name python-sevilla-demo
  --runtime python3.6 --handler handler.handler
  --role arn:aws:iam::xxxxxxxxxxxx:role/python-sevilla-role
  --tags "Project=PythonSevilla, Service=Demo, Stage=DEV"
  --description "Lambda de prueba"
  --timeout 15 --publish --zip-file fileb://demo.zip            
          

Configurar funciones

aws lambda update-function-configuration
  --function-name python-sevilla-demo
  --environment '{"Variables":{"CONN_STRING":"dbname=test host=test.xxxxxxxxxx.eu-west-1.rds.amazonaws.com port=5432 user=xxxxxxxx password=xxxxxxxxx"}}'
          

Invocar la función

aws lambda invoke --function-name python-sevilla-demo
  --payload '{"campo_1":"test_1", "campo_2":"test_2", "campo_3":"test_3"}'
  results.log

cat results.log
          

Desplegar una nueva versión

zip -r demo.zip * -x@exclude.lst

aws lambda update-function-code --function-name python-sevilla-demo
  --publish --zip-file fileb://demo.zip
          

Frameworks

Enlaces

stacksense.io/krishnan/platforms/the-maturity-of-functions-as-a-service

www.fullstackpython.com/serverless.html

blog.bluesoftglobal.com/microservices-on-aws

serverless.email

demo