SlideShare una empresa de Scribd logo
1 de 21
Descargar para leer sin conexión
Serverless
¡Presenta tus ideas en Quito Lambda!
Si tienes algo interesante que presentar, ¡ven a presentar con nosotros!
Programación Funcional, DevOps, Cloud Computing, IaaS, Desarrollo Web, React, WebGL, ReasonML
y cualquier cosa interesante
info@stackbuilders.com
Serverless
● Evolución de la web y de la infraestructura
● En qué contexto aparece Serverless
● Qué ofrece Serverless
● Ejemplo de uso
● Demostración en vivo
¿ Como hago que mi página web se pueda ver en Internet ?
Infraestructura Web
Evolución histórica de la infraestructura
● Servidor Web
○ Computador conectado a Internet, con servidor en puerto 80
○ WAMP/LAMP/MAMP, cgi-bin
● Servidor Web contratado
○ Static hosting, PHP hosting
● Servidor Web contratado basado en máquina virtual/real
○ Explosión de frameworks web: RoR, Django, ASP.net, Spring
● Infrastructure as a Service
○ Poder contratar fácilmente varios servidores web, interconectarlos
● Platform as a Service
○ Usar framework web sin tener que configurar un servidor web
Evolución histórica de la arquitectura software web
● Página Web estática
● Página Web con PHP
● Página Web con binarios para hacer cosas avanzadas
● Framework Web
○ Rutas, templates, base de datos, seguridad, organización
● Monolito basado en framework web
● Microservicios
La protesta de Serverless
¿Por qué tenemos que hablar tanto de infraestructura?
¿Por qué todo tiene que estar dentro de un servidor?
¿Por qué gran parte de mi trabajo consiste en cuidar servidores, alimentarlos y cambiarles el pañal?
¿Por qué hablamos tanto de los servidores, y tan poco de la lógica de negocio?
La propuesta de Serverless (1)
Quiero que se ejecute este código cuando ocurra cierto evento. Eventos posibles:
● Alguien visite mi aplicación web
● Alguien rellene y envíe un formulario web
● Alguien llame a cierto endpoint de mi API
● Alguien pague una compra en mi tienda
● Alguien haga un push a mi repositorio en Github
● Alguien me mande un email
Y muchas otras opciones.
La propuesta de Serverless (2)
No quiero saber nada de servidores.
No quiero saber nada de costes de mantener la infraestructura.
No quiero saber nada de actualizaciones de software, de configurar Nginx para que me haga forwarding, de establecer
certificados, de escalar la aplicación, de hacerla más pequeña, de construir para las máquinas de
AWS/Heroku/Azure/Whatever, de enrutar paquetes, de escalar la base de datos, de configurar el DNS, de parches de
seguridad, de CWE-1234 que afecta al framework si está configurado en Linux usando Apache, certificados con TLS
1.2, es martes y hay luna llena...
La propuesta de Serverless (3)
Sólo quiero que se ejecute cierto código cuando ocurra cierto evento.
Mi proveedor de la Nube se encargará del servidor, de las actualizaciones, de escalar y de todos esos detalles que yo no
quiero conocer.
Desde Monolito hasta Serverless (1)
Monolito
● Todo junto en el mismo binario
● Diseño flexible. Puedo usar variables globales, estado general disponible.
● Difícil de escalar
Microservicios
● Separar diferentes servicios
● Mayor separación, potencialmente mejor ingeniería
● Más fácil de escalar
● Mayor coste de intercomunicación
Desde Monolito hasta Serverless (2)
Serverless
● Todo separado en funciones independientes
● Estado explícito en forma de bases de datos externas.
● Estado interno inexistente/efímero
● Fácil de escalar. Tan fácil, que el proveedor de la nube puede escalar automáticamente.
● Coste de intercomunicación más alto
● Alternativas de billing: coste por invocación -> coste por usuario/coste por transacción
Principios de Serverless
Funciones separadas
● Conectadas a endpoints y a fuentes de eventos
● Que no tienen estado compartido
○ El estado que tienen es explícito en servicios externos (BBDD externas)
● Que actúan sobre servicios externos:
○ Modificar datos en bases de datos
○ Crear/modificar/destruir servidores
○ Enviar emails
○ Ejecutar transacciones
○ ...
Principios de Serverless (2)
Funciones separadas
● Desplegadas a la Nube sin tener que entender los detalles que ocurren por debajo
● Cobradas por invocación
● Sin requerir frameworks avanzados para enrutar
Framework Serverless
Funciones:
● Python, NodeJS, Go, Java, C#, y muchos otros lenguajes usando plugins
Descripción de interconexión de funciones - serverless.yml
● Fuente de eventos
● Recursos utilizables
● Parámetros adjuntos
○ Variables de entorno, configuración CORS, logging, y otros
Un ejemplo
module.exports.hello = (event, context, callback) => {
const response = {
statusCode: 200,
body: JSON.stringify({
message: 'Go Serverless v1.0! Your function executed successfully!'
}),
};
callback(null, response);
};
Endpoint
● GET - https://fpxhkf7a9c.execute-api.us-east-1.amazonaws.com/dev/ hello
serverless.yml
service: my-service
provider:
name: aws
runtime: nodejs6.10
functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: get
Demo!
Preguntas?
Stack Builders
Presenta tus ideas
info@stackbuilders.com
Trabaja con nosotros
stackbuilders.com/join
Facebook: /QuitoLambda
Twitter: @QuitoLambda
Proximamente: Slack

Más contenido relacionado

La actualidad más candente

Realtime nodejs socket io
Realtime nodejs   socket ioRealtime nodejs   socket io
Realtime nodejs socket ioJose Gratereaux
 
¿Por qué usar frameworks javascript?
¿Por qué usar frameworks javascript?¿Por qué usar frameworks javascript?
¿Por qué usar frameworks javascript?aitorgr
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJSBEEVA_es
 
0094 rodrigo zubeldía alphasoluciones
0094 rodrigo zubeldía alphasoluciones0094 rodrigo zubeldía alphasoluciones
0094 rodrigo zubeldía alphasolucionesGeneXus
 
Introduccion meteor.js
Introduccion meteor.jsIntroduccion meteor.js
Introduccion meteor.jsIcalia Labs
 
Futuro de Desarrollo en SharePoint
Futuro de Desarrollo en SharePointFuturo de Desarrollo en SharePoint
Futuro de Desarrollo en SharePointHaaron Gonzalez
 
Node.js - Eventos para Todos
Node.js - Eventos para TodosNode.js - Eventos para Todos
Node.js - Eventos para TodosMariano Iglesias
 
Desarrollo de Aplicaciones con Node.js | INTERSYS UNPRG | 2012
Desarrollo de Aplicaciones con Node.js | INTERSYS UNPRG | 2012Desarrollo de Aplicaciones con Node.js | INTERSYS UNPRG | 2012
Desarrollo de Aplicaciones con Node.js | INTERSYS UNPRG | 2012Pilmee Gates
 
Node JS (Francisco Cerdas)
Node JS (Francisco Cerdas)Node JS (Francisco Cerdas)
Node JS (Francisco Cerdas)PiXeL16
 
¿Cómo mezclar agua con aceite? NodeJS + Azure
¿Cómo mezclar agua con aceite? NodeJS + Azure¿Cómo mezclar agua con aceite? NodeJS + Azure
¿Cómo mezclar agua con aceite? NodeJS + AzureNacho Fanjul Corteguera
 

La actualidad más candente (20)

Realtime nodejs socket io
Realtime nodejs   socket ioRealtime nodejs   socket io
Realtime nodejs socket io
 
¿Por qué usar frameworks javascript?
¿Por qué usar frameworks javascript?¿Por qué usar frameworks javascript?
¿Por qué usar frameworks javascript?
 
Introduccion a Node.js
Introduccion a Node.jsIntroduccion a Node.js
Introduccion a Node.js
 
Meteor
MeteorMeteor
Meteor
 
Descifrando Ruby on Rails
Descifrando Ruby on RailsDescifrando Ruby on Rails
Descifrando Ruby on Rails
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJS
 
0094 rodrigo zubeldía alphasoluciones
0094 rodrigo zubeldía alphasoluciones0094 rodrigo zubeldía alphasoluciones
0094 rodrigo zubeldía alphasoluciones
 
Introduccion meteor.js
Introduccion meteor.jsIntroduccion meteor.js
Introduccion meteor.js
 
ASP.NET MVC Workshop Día 3
ASP.NET MVC Workshop Día 3ASP.NET MVC Workshop Día 3
ASP.NET MVC Workshop Día 3
 
Futuro de Desarrollo en SharePoint
Futuro de Desarrollo en SharePointFuturo de Desarrollo en SharePoint
Futuro de Desarrollo en SharePoint
 
Node.js - Eventos para Todos
Node.js - Eventos para TodosNode.js - Eventos para Todos
Node.js - Eventos para Todos
 
Meteor intro-2014 - spanish
Meteor intro-2014 - spanishMeteor intro-2014 - spanish
Meteor intro-2014 - spanish
 
Introducción a vnext
Introducción a vnextIntroducción a vnext
Introducción a vnext
 
Desarrollo de Aplicaciones con Node.js | INTERSYS UNPRG | 2012
Desarrollo de Aplicaciones con Node.js | INTERSYS UNPRG | 2012Desarrollo de Aplicaciones con Node.js | INTERSYS UNPRG | 2012
Desarrollo de Aplicaciones con Node.js | INTERSYS UNPRG | 2012
 
Node JS (Francisco Cerdas)
Node JS (Francisco Cerdas)Node JS (Francisco Cerdas)
Node JS (Francisco Cerdas)
 
Introduccion a Node.js
Introduccion a Node.jsIntroduccion a Node.js
Introduccion a Node.js
 
Introducción a Node.js
Introducción a Node.jsIntroducción a Node.js
Introducción a Node.js
 
Net love open source v1.7
Net love open source v1.7Net love open source v1.7
Net love open source v1.7
 
Nodejs
NodejsNodejs
Nodejs
 
¿Cómo mezclar agua con aceite? NodeJS + Azure
¿Cómo mezclar agua con aceite? NodeJS + Azure¿Cómo mezclar agua con aceite? NodeJS + Azure
¿Cómo mezclar agua con aceite? NodeJS + Azure
 

Similar a Serverless: La evolucion de la arquitectura a la nube

Meetup En mi local funciona - Serverless... ¡en local! con Serverless Framewo...
Meetup En mi local funciona - Serverless... ¡en local! con Serverless Framewo...Meetup En mi local funciona - Serverless... ¡en local! con Serverless Framewo...
Meetup En mi local funciona - Serverless... ¡en local! con Serverless Framewo...atSistemas
 
dockerize.it
dockerize.itdockerize.it
dockerize.itbetabeers
 
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...Restorando
 
Novedades .Net Core - NetBaires
Novedades .Net Core - NetBairesNovedades .Net Core - NetBaires
Novedades .Net Core - NetBairesfernando sonego
 
2. Revision de Tecnologias Web.pdf
2. Revision de Tecnologias Web.pdf2. Revision de Tecnologias Web.pdf
2. Revision de Tecnologias Web.pdfCarlosDavidMontellan
 
Introducción a SharePoint Framework
Introducción a SharePoint FrameworkIntroducción a SharePoint Framework
Introducción a SharePoint FrameworkHaaron Gonzalez
 
Servidor Web Apache para Linux
Servidor Web Apache para LinuxServidor Web Apache para Linux
Servidor Web Apache para LinuxMaría del Cisne
 
Optimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-MemoryOptimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-MemoryGonzalo Chacaltana
 
Mapa Conceptual Servidores web
Mapa Conceptual Servidores webMapa Conceptual Servidores web
Mapa Conceptual Servidores webArturo_09
 
Introducción a Azure App Service - MUG Buenos Aires
Introducción a Azure App Service - MUG Buenos AiresIntroducción a Azure App Service - MUG Buenos Aires
Introducción a Azure App Service - MUG Buenos AiresGuillermo Javier Bellmann
 
Trabajo fin de master Dirección TI
Trabajo fin de master Dirección TITrabajo fin de master Dirección TI
Trabajo fin de master Dirección TIManolo Crespo
 
AWS Fundamentals.pptx
AWS Fundamentals.pptxAWS Fundamentals.pptx
AWS Fundamentals.pptxEnrique
 
Sacale El Jugo A La Virtualizacion
Sacale El Jugo A La VirtualizacionSacale El Jugo A La Virtualizacion
Sacale El Jugo A La VirtualizacionPablo Campos
 
LaCoctelera.com y The Shaker - Conferencia Rails Hispana 2006
LaCoctelera.com y The Shaker - Conferencia Rails Hispana 2006LaCoctelera.com y The Shaker - Conferencia Rails Hispana 2006
LaCoctelera.com y The Shaker - Conferencia Rails Hispana 2006Álvaro Ortiz
 

Similar a Serverless: La evolucion de la arquitectura a la nube (20)

Descubriendo windows azure
Descubriendo windows azureDescubriendo windows azure
Descubriendo windows azure
 
Meetup En mi local funciona - Serverless... ¡en local! con Serverless Framewo...
Meetup En mi local funciona - Serverless... ¡en local! con Serverless Framewo...Meetup En mi local funciona - Serverless... ¡en local! con Serverless Framewo...
Meetup En mi local funciona - Serverless... ¡en local! con Serverless Framewo...
 
Aplicaciones distribuidas
Aplicaciones distribuidasAplicaciones distribuidas
Aplicaciones distribuidas
 
dockerize.it
dockerize.itdockerize.it
dockerize.it
 
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
 
Novedades .Net Core - NetBaires
Novedades .Net Core - NetBairesNovedades .Net Core - NetBaires
Novedades .Net Core - NetBaires
 
Apuntes entorno cliente servidor
Apuntes entorno cliente   servidorApuntes entorno cliente   servidor
Apuntes entorno cliente servidor
 
2. Revision de Tecnologias Web.pdf
2. Revision de Tecnologias Web.pdf2. Revision de Tecnologias Web.pdf
2. Revision de Tecnologias Web.pdf
 
¿Cómo elegir servidor web?
¿Cómo elegir servidor web?¿Cómo elegir servidor web?
¿Cómo elegir servidor web?
 
Introducción a SharePoint Framework
Introducción a SharePoint FrameworkIntroducción a SharePoint Framework
Introducción a SharePoint Framework
 
Servidor Web Apache para Linux
Servidor Web Apache para LinuxServidor Web Apache para Linux
Servidor Web Apache para Linux
 
Cómo elegir un servidor Web
Cómo elegir un servidor WebCómo elegir un servidor Web
Cómo elegir un servidor Web
 
Optimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-MemoryOptimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-Memory
 
Mapa Conceptual Servidores web
Mapa Conceptual Servidores webMapa Conceptual Servidores web
Mapa Conceptual Servidores web
 
Introducción a Azure App Service - MUG Buenos Aires
Introducción a Azure App Service - MUG Buenos AiresIntroducción a Azure App Service - MUG Buenos Aires
Introducción a Azure App Service - MUG Buenos Aires
 
Trabajo fin de master Dirección TI
Trabajo fin de master Dirección TITrabajo fin de master Dirección TI
Trabajo fin de master Dirección TI
 
Go global
Go globalGo global
Go global
 
AWS Fundamentals.pptx
AWS Fundamentals.pptxAWS Fundamentals.pptx
AWS Fundamentals.pptx
 
Sacale El Jugo A La Virtualizacion
Sacale El Jugo A La VirtualizacionSacale El Jugo A La Virtualizacion
Sacale El Jugo A La Virtualizacion
 
LaCoctelera.com y The Shaker - Conferencia Rails Hispana 2006
LaCoctelera.com y The Shaker - Conferencia Rails Hispana 2006LaCoctelera.com y The Shaker - Conferencia Rails Hispana 2006
LaCoctelera.com y The Shaker - Conferencia Rails Hispana 2006
 

Más de Quito Lambda

Python con un toque funcional
Python con un toque funcionalPython con un toque funcional
Python con un toque funcionalQuito Lambda
 
Aplicaciones móviles multiplataforma con React Native y Redux
Aplicaciones móviles multiplataforma con React Native y ReduxAplicaciones móviles multiplataforma con React Native y Redux
Aplicaciones móviles multiplataforma con React Native y ReduxQuito Lambda
 
Vue.js: Adaptando un enfoque funcional
Vue.js: Adaptando un enfoque funcionalVue.js: Adaptando un enfoque funcional
Vue.js: Adaptando un enfoque funcionalQuito Lambda
 
ReasonML is awesome
ReasonML is awesomeReasonML is awesome
ReasonML is awesomeQuito Lambda
 
Ansible + AWS: Cómo administrar tu infraestructura de AWS con Ansible
Ansible + AWS: Cómo administrar tu infraestructura de AWS con AnsibleAnsible + AWS: Cómo administrar tu infraestructura de AWS con Ansible
Ansible + AWS: Cómo administrar tu infraestructura de AWS con AnsibleQuito Lambda
 
El otro TDD: Type Driven Development
El otro TDD: Type Driven DevelopmentEl otro TDD: Type Driven Development
El otro TDD: Type Driven DevelopmentQuito Lambda
 

Más de Quito Lambda (6)

Python con un toque funcional
Python con un toque funcionalPython con un toque funcional
Python con un toque funcional
 
Aplicaciones móviles multiplataforma con React Native y Redux
Aplicaciones móviles multiplataforma con React Native y ReduxAplicaciones móviles multiplataforma con React Native y Redux
Aplicaciones móviles multiplataforma con React Native y Redux
 
Vue.js: Adaptando un enfoque funcional
Vue.js: Adaptando un enfoque funcionalVue.js: Adaptando un enfoque funcional
Vue.js: Adaptando un enfoque funcional
 
ReasonML is awesome
ReasonML is awesomeReasonML is awesome
ReasonML is awesome
 
Ansible + AWS: Cómo administrar tu infraestructura de AWS con Ansible
Ansible + AWS: Cómo administrar tu infraestructura de AWS con AnsibleAnsible + AWS: Cómo administrar tu infraestructura de AWS con Ansible
Ansible + AWS: Cómo administrar tu infraestructura de AWS con Ansible
 
El otro TDD: Type Driven Development
El otro TDD: Type Driven DevelopmentEl otro TDD: Type Driven Development
El otro TDD: Type Driven Development
 

Serverless: La evolucion de la arquitectura a la nube

  • 2. ¡Presenta tus ideas en Quito Lambda! Si tienes algo interesante que presentar, ¡ven a presentar con nosotros! Programación Funcional, DevOps, Cloud Computing, IaaS, Desarrollo Web, React, WebGL, ReasonML y cualquier cosa interesante info@stackbuilders.com
  • 3. Serverless ● Evolución de la web y de la infraestructura ● En qué contexto aparece Serverless ● Qué ofrece Serverless ● Ejemplo de uso ● Demostración en vivo
  • 4. ¿ Como hago que mi página web se pueda ver en Internet ? Infraestructura Web
  • 5. Evolución histórica de la infraestructura ● Servidor Web ○ Computador conectado a Internet, con servidor en puerto 80 ○ WAMP/LAMP/MAMP, cgi-bin ● Servidor Web contratado ○ Static hosting, PHP hosting ● Servidor Web contratado basado en máquina virtual/real ○ Explosión de frameworks web: RoR, Django, ASP.net, Spring ● Infrastructure as a Service ○ Poder contratar fácilmente varios servidores web, interconectarlos ● Platform as a Service ○ Usar framework web sin tener que configurar un servidor web
  • 6. Evolución histórica de la arquitectura software web ● Página Web estática ● Página Web con PHP ● Página Web con binarios para hacer cosas avanzadas ● Framework Web ○ Rutas, templates, base de datos, seguridad, organización ● Monolito basado en framework web ● Microservicios
  • 7. La protesta de Serverless ¿Por qué tenemos que hablar tanto de infraestructura? ¿Por qué todo tiene que estar dentro de un servidor? ¿Por qué gran parte de mi trabajo consiste en cuidar servidores, alimentarlos y cambiarles el pañal? ¿Por qué hablamos tanto de los servidores, y tan poco de la lógica de negocio?
  • 8. La propuesta de Serverless (1) Quiero que se ejecute este código cuando ocurra cierto evento. Eventos posibles: ● Alguien visite mi aplicación web ● Alguien rellene y envíe un formulario web ● Alguien llame a cierto endpoint de mi API ● Alguien pague una compra en mi tienda ● Alguien haga un push a mi repositorio en Github ● Alguien me mande un email Y muchas otras opciones.
  • 9. La propuesta de Serverless (2) No quiero saber nada de servidores. No quiero saber nada de costes de mantener la infraestructura. No quiero saber nada de actualizaciones de software, de configurar Nginx para que me haga forwarding, de establecer certificados, de escalar la aplicación, de hacerla más pequeña, de construir para las máquinas de AWS/Heroku/Azure/Whatever, de enrutar paquetes, de escalar la base de datos, de configurar el DNS, de parches de seguridad, de CWE-1234 que afecta al framework si está configurado en Linux usando Apache, certificados con TLS 1.2, es martes y hay luna llena...
  • 10. La propuesta de Serverless (3) Sólo quiero que se ejecute cierto código cuando ocurra cierto evento. Mi proveedor de la Nube se encargará del servidor, de las actualizaciones, de escalar y de todos esos detalles que yo no quiero conocer.
  • 11. Desde Monolito hasta Serverless (1) Monolito ● Todo junto en el mismo binario ● Diseño flexible. Puedo usar variables globales, estado general disponible. ● Difícil de escalar Microservicios ● Separar diferentes servicios ● Mayor separación, potencialmente mejor ingeniería ● Más fácil de escalar ● Mayor coste de intercomunicación
  • 12. Desde Monolito hasta Serverless (2) Serverless ● Todo separado en funciones independientes ● Estado explícito en forma de bases de datos externas. ● Estado interno inexistente/efímero ● Fácil de escalar. Tan fácil, que el proveedor de la nube puede escalar automáticamente. ● Coste de intercomunicación más alto ● Alternativas de billing: coste por invocación -> coste por usuario/coste por transacción
  • 13. Principios de Serverless Funciones separadas ● Conectadas a endpoints y a fuentes de eventos ● Que no tienen estado compartido ○ El estado que tienen es explícito en servicios externos (BBDD externas) ● Que actúan sobre servicios externos: ○ Modificar datos en bases de datos ○ Crear/modificar/destruir servidores ○ Enviar emails ○ Ejecutar transacciones ○ ...
  • 14. Principios de Serverless (2) Funciones separadas ● Desplegadas a la Nube sin tener que entender los detalles que ocurren por debajo ● Cobradas por invocación ● Sin requerir frameworks avanzados para enrutar
  • 15. Framework Serverless Funciones: ● Python, NodeJS, Go, Java, C#, y muchos otros lenguajes usando plugins Descripción de interconexión de funciones - serverless.yml ● Fuente de eventos ● Recursos utilizables ● Parámetros adjuntos ○ Variables de entorno, configuración CORS, logging, y otros
  • 16. Un ejemplo module.exports.hello = (event, context, callback) => { const response = { statusCode: 200, body: JSON.stringify({ message: 'Go Serverless v1.0! Your function executed successfully!' }), }; callback(null, response); }; Endpoint ● GET - https://fpxhkf7a9c.execute-api.us-east-1.amazonaws.com/dev/ hello
  • 17. serverless.yml service: my-service provider: name: aws runtime: nodejs6.10 functions: hello: handler: handler.hello events: - http: path: hello method: get
  • 18.
  • 19. Demo!
  • 21. Stack Builders Presenta tus ideas info@stackbuilders.com Trabaja con nosotros stackbuilders.com/join Facebook: /QuitoLambda Twitter: @QuitoLambda Proximamente: Slack