6. 1. Madurez de servicios cloud
2. BaaS “SaaS-ification”
3. API’s son la goma de las
integraciones
4. Contenderos– Ahora por función o
subrutina
5. SysOps DevOps NoOps
Menos operaciones, más desarrollo
5 factores que fomentan el movimiento
serverless
https://www.forbes.com/sites/janakirammsv/2016/02/28/five-factors-that-are-fueling-serverless-computing-part-1
@SigNarvaez | #MDBEvenings | #CDMX
8. Trabajos recurrentes
• Secuencias / Orquestación (¿AWS Steps?)
Data Quality
• Evento Clasificar llamar función
Micro o Nano servicios
• Clicks o taps
Procesamiento de eventos e IoT
• No se preocupe por escalar servidores de
aplicaciones
APIs ligeros
• Demo
¿Casos de uso para Serverless?
@SigNarvaez | #MDBEvenings | #CDMX
11. Micro Servicios bajo Contenedores
Payments
Service
Product Catalog
Service
Shopping Cart
Service
Dominios
https://www.mongodb.com/blog/post/serverless-architectures-the-evolution-of-cloud-computing
@SigNarvaez | #MDBEvenings | #CDMX
12. Micro Servicios bajo Serverless
Command
Query
Responsibility
Segregation
Considerar:
Servicios específicos o generales
Lógica compartida
Tiempo de arranque
Empaquetar
Despliegue
Versionamiento
@SigNarvaez | #MDBEvenings | #CDMX
13. Patrón CQRS con Micro Servicios Serverless
GET
API
PUT PATCH
POST DELETE …
API
API Key
API Key
Lambda Function(s)
Lambda Function(s)
Code
Code
Lambda Function(s)
VPC
Peering
@SigNarvaez | #MDBEvenings | #CDMX
14. Forma / Esquema
• Persona
• Pólizas de seguro
• La forma cambia por tipo de póliza
• Direcciones, Contacto, etc.
Funcionalidad del API
• GET Clientes – pólizas próximas a expirar
por radio geoespacial
• GET Clientes / por CURP/SSN, id, etc.
• PATCH Actualizar info de contacto (cel,
email, …)
Vista única del cliente - Industria de seguros
(ejemplo)
Arquitectura de alto nivel de una
plataforma de vista única
@SigNarvaez | #MDBEvenings | #CDMX
17. mgeneratejs
• https://github.com/rueckstiess/mgeneratejs
• npm install -g mgeneratejs
• Crea plantilla – generar datos
• Subir a Atlas via mongoimport
• Navegar con Compass
Generar un set de datos
Plantilla (InsuranceC360_Customers.json)
mgeneratejs -n 100 InsuranceC360_Customers.json |
mongoimport --host ”TU ATLAS CLUSTER" --
numInsertionWorkers 4
--db WebinarCustomerSingleView --collection Customers --
authenticationDatabase admin --ssl --username TUUSER--
password TUPASSWORD
@SigNarvaez | #MDBEvenings | #CDMX
18. IAM
• Roles - póliza de ejecución para
Lambda
VPC
• VPC
• Security Groups – reglas de trafico
• Internet Gateway – conectividad
exterior
• VPC Peering Connection – Tabla de
rutas
Servicios de AWS
Lambda
• VPC, Security Group y IAM role
• Desarrolla en línea o sube un .zip
• Usar driver de MongoDB – conectarse a
Atlas
API Gateway
• Definición del API
• API Keys y Usage Plans
• Métodos HTTP y recursos (rutas)
• “Mapear” rutas contra funciones Lambda
@SigNarvaez | #MDBEvenings | #CDMX
20. MongoDB Atlas
• Crea un cluster – M10+ VPC Peer requiere una región de AWS
• Usar la misma región AWS – (En mi caso, us-west-2)
• Iniciar el VPC peer con AWS
AWS VPC
• Aceptar la conexión/pedido de Peering
• Actualizar la tabla de rutas (Route Table)
EC2
• Instalar MongoDB
• Probar la conexión desde el shell de MongoDB para asegurar que el VPC Peer este
funcionando
• Altamente recomendado antes de proceder con Lambda (no hay ambiente para depurar)
MongoDB Atlas peered con tu VPC de AWS
@SigNarvaez | #MDBEvenings | #CDMX
29. Subir y
configurar una
función Handler de la función
Role con permisos para lambda
El VPC peered con Atlas
Grupo de seguridad que permite
trafico
Por lo menos 2 sub-redes
@SigNarvaez | #MDBEvenings | #CDMX
39. Conexiones y contenedores …..
http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html
… AWS Lambda maintains the container for some time in anticipation of another Lambda function
invocation. … the service freezes the container after a function completes, and thaws the container for
reuse. If AWS Lambda chooses to reuse the container, this has the following implications:
- Any declarations in your Lambda function code (outside the handler code, see Programming
Model) remains initialized, providing additional optimization when the function is invoked again. For
example, if your Lambda function establishes a database connection, instead of reestablishing
the connection, the original connection is used in subsequent invocations. You can add logic in
your code to check if a connection already exists before creating one.
@SigNarvaez | #MDBEvenings | #CDMX
43. ¿Escalamiento?
Lambda
No se requiere intervención del usuario - Control
de seguridad por defecto de 100 ejecuciones
simultáneas por cuenta por región.
Las funciones invocadas sincrónicamente arrojan
el código de error 429. Las funciones invocadas
de forma asíncrona pueden absorber ráfagas
razonables durante aprox. 15-30 minutos. Si se
agota, considere el uso de Simple Queue
Service (SQS) o Simple Notification Service
(SNS) como la Dead Letter Queue(DLQ).
Mas en https://aws.amazon.com/lambda/faqs/
MongoDB Atlas
On-Demand
Zero downtime
Upscale/Downscale:
• Instancia
• Storage
• IOPS
• Factor de
replicación
@SigNarvaez | #MDBEvenings | #CDMX
44. ¿Precios?
Lambda
El costo depende de: las solicitudes (por millón),
del tiempo de solicitud, de la memoria (GB)
asignada a cada función.
Primero 1 millón de solicitudes por mes gratis - $
0.20 por cada 1 millón de solicitudes posteriores.
$ 0.00001667 por cada segundo GB utilizado
Los servicios adicionales de AWS implican un
costo (por ejemplo, API Gateway, ...)
Mas en https://aws.amazon.com/lambda/pricing/
MongoDB Atlas
El costo depende del tamaño de la instancia,
almacenamiento, iops, factor de replicación y
retención de copias de seguridad.
M0 gratis– (no VPC peering, usar IP whitelist)
M10 comienza en $0.08/hr – genial para desarrollo
M30 comienza en $0.54.hr – genial para productiva
Mas en https://www.mongodb.com/cloud/atlas/pricing
@SigNarvaez | #MDBEvenings | #CDMX
45. Conexiones a MongoDB Atlas
Encriptar por medio de AWS KMS – blog post:
https://www.mongodb.com/blog/post/serverless-
development-with-nodejs-aws-lambda-mongodb-
atlas
Contenedores: congelar y reciclar
• Definir conexión fuera de función lambda
• Bajo escala nuevos contendores, nuevas
conexiones
• Ok si el API se consume en ráfagas, más no
si es de uso ocasional
• ¿Y si no?
¿Otros?
Desarrollo local emuladores Lambda
• python-lambda-local
https://pypi.python.org/pypi/python-lambda-local
• lambda-local (node.js)
https://www.npmjs.com/package/lambda-local
Serverless frameworks
• Serverless Framework
• Zappa
• Chalice
• ¡ Y más! - https://thenewstack.io/tns-guide-
serverless-technologies-best-frameworks-
platforms-tools/
@SigNarvaez | #MDBEvenings | #CDMX
46. Forma / Esquema
• Persona
• Pólizas de seguro
• La forma cambia por tipo de póliza
• Direcciones, Contacto, etc.
Funcionalidad del API
• GET Clientes – pólizas próximas a expirar
por radio geoespacial
• GET Clientes / por CURP/SSN, id, etc.
• PATCH Actualizar info de contacto (cel,
email, …)
Vista única del cliente - Industria de seguros
(ejemplo)
Arquitectura de alto nivel de una
plataforma de vista única
@SigNarvaez | #MDBEvenings | #CDMX
47. Façade Funciones Serverless
contra API del backend
Backend API tradicional,
stateful directo hacia las bases
de datos
¿Esto seria una arquitectura
Serverless?
Vista única del cliente - Industria de seguros
(ejemplo)
Arquitectura de alto nivel de una
plataforma de vista única
Stateful API
Service Layer
@SigNarvaez | #MDBEvenings | #CDMX