Transformando GraphQL: Infraestructura como código para desarrolladores front-end

Rate this content
Bookmark

En esta charla mostraré cómo podemos utilizar una combinación de GraphQL SDL junto con un nuevo DSL (GraphQL Transform) creado por el equipo de Amplify para construir una aplicación en la nube de pila completa directamente desde su esquema de GraphQL. Usando este DSL de GraphQL, recorreremos cómo modelar una base de datos, reglas de autorización, relaciones y patrones de acceso personalizados. Veremos cómo prototipar rápidamente una aplicación de ejemplo y ver algunas demostraciones, incluida una aplicación de votación capaz de manejar más de 100,000 operaciones por segundo.

27 min
18 Jun, 2021

Video Summary and Transcription

Esta charla trata sobre la construcción de aplicaciones en la nube de pila completa como desarrollador front-end utilizando GraphQL y la biblioteca GraphQL Transform. Cubre las tres partes principales de AWS Amplify: hosting, CLI y bibliotecas de cliente. La biblioteca GraphQL Transform simplifica la construcción de una API de GraphQL al manejar la creación de esquemas, la interacción con la base de datos y el mapeo de resolutores. Demuestra cómo utilizar transformaciones de GraphQL para construir una API de GraphQL con características como reglas de autorización, relaciones y simulación local. También se discuten las consideraciones para el uso de servicios administrados y el futuro de la infraestructura como código con Amplify y otras herramientas.

Available in English

1. Introducción a la Transformación de GraphQL

Short description:

Esta charla trata sobre cómo construir aplicaciones en la nube de pila completa como desarrollador front-end. Se divide en cuatro partes. Cubriremos el modelado de datos utilizando GraphQL y la biblioteca de transformación de GraphQL, haremos una demostración en vivo de prototipado rápido y mostraremos una aplicación real construida con transformaciones de GraphQL.

Bueno. Hola a todos. Bienvenidos a mi charla. Esto es la transformación de GraphQL, infraestructura de pila completa como código. Y esta charla trata sobre cómo construir aplicaciones en la nube de pila completa como desarrollador front-end. Se divide en cuatro partes. Vamos a hacer una introducción a algunos de los contenidos sobre los que voy a hablar. Vamos a recorrer cómo hacer el modelado de datos utilizando GraphQL y la biblioteca de transformación de GraphQL. Luego haremos una demostración en vivo de prototipado rápido. Y luego les mostraré un ejemplo en vivo de una de las aplicaciones que he construido utilizando estas transformaciones de GraphQL.

2. Introducción a AWS Amplify y Full Stack Cloud

Short description:

Esta parte presenta al ponente, Nader David, quien es un ingeniero de software y autor. Trabaja como defensor del desarrollador en el equipo de AWS Amplify, enfocado en construir herramientas y SDK de nube de pila completa. La charla cubrirá las tres partes principales de Amplify: hosting, CLI y bibliotecas de cliente. El flujo de trabajo de la CLI implica inicializar un proyecto, agregar o actualizar características y implementar actualizaciones. Amplify proporciona infraestructura en la nube e infraestructura local como código.

Entonces mi nombre es Nader David. Soy un ingeniero de software. También soy autor y he hecho muchas cosas de código abierto y otras cosas. Y ahora mismo trabajo como defensor del desarrollador en el equipo de AWS Amplify. El último libro que he publicado se llama Full Stack Serverless. Y está muy relacionado con algunas de las cosas de las que estamos hablando hoy. Está disponible en O'Reilly. Así que si estás interesado en algunas de las cosas de las que estoy hablando, definitivamente recomendaría echar un vistazo a ese libro.

El equipo en el que trabajo, mencioné antes, es el equipo de AWS Amplify. Estamos enfocados en construir herramientas y SDK de nube de pila completa. Y uno de nuestros principales enfoques es atraer a nuevos desarrolladores al ecosistema de la nube, desarrolladores front-end y también mejorar la experiencia de desarrollo de muchas de las cosas que AWS tradicionalmente había hecho de manera diferente. Algunas de las diferentes infraestructuras que a la gente le gustaría usar son las mismas cosas que están utilizando estas grandes empresas a gran escala. Netflix, Airbnb e incluso Amazon están utilizando muchos de los servicios en los que nuestro equipo está tratando de construir abstracciones más fáciles de usar. Y eso es lo que está en el núcleo de algunas de las cosas de las que voy a hablar con la biblioteca de transformación de GraphQL.

Cuando digo herramientas y SDK de nube de pila completa, ¿a qué me refiero exactamente? Bueno, me gustaría comenzar desglosando Amplify y hablando de qué es Amplify. Amplify está compuesto principalmente por tres partes. Tenemos el hosting que tiene un hosting de sitio estático con una CDN global, muy fácil de configurar y ejecutar, y despliegues basados en Git y CI/CD basados en proyectos de Git. También tenemos una CLI que te permite, desde tu aplicación front-end, crear, actualizar y modificar servicios en la nube utilizando un enfoque basado en categorías que veremos en un momento. Y luego, después de crear los servicios a través de la CLI, tenemos un cliente que es, en realidad tenemos diferentes clientes para iOS, Web, React Native, y también tenemos componentes específicos del framework dentro de estas bibliotecas de cliente que te permiten interactuar con esos servicios después de haberlos creado.

Entonces, ¿cómo es el flujo de trabajo de la CLI? Es algo así. Inicializas un nuevo proyecto ejecutando Amplify Init. Agregas una nueva característica o actualizas una característica ejecutando Amplify add o Amplify update. Y cuando estás listo para implementar cualquier actualización, simplemente ejecutas Amplify push. Y luego, después de eso, puedes hacer actualizaciones adicionales ejecutando Amplify update. Y luego, después de haber creado estos servicios, importas los componentes o las diferentes bibliotecas de AWS Amplify. Así que en este ejemplo, tenemos storage, y luego puedes hacer llamadas a tu servicio de almacenamiento o tu servicio de API o cualquier servicio con el que estés trabajando. Entonces, realmente de lo que estamos hablando aquí cuando hablamos de nube de pila completa es que estás utilizando esta CLI y obtienes dos tipos diferentes de, supongo, artefactos de eso. Obtienes la infraestructura en la nube y luego obtienes la infraestructura local como código. Y también obtienes otro código local para cosas como flujos de autenticación y diferentes componentes de interfaz de usuario que también incluimos en nuestras bibliotecas de cliente. Pero realmente la parte principal de la que estamos hablando hoy es la infraestructura en la nube y la parte de infraestructura como código.

3. Introducción a la biblioteca de transformación de GraphQL

Short description:

Nos centraremos principalmente en GraphQL. La biblioteca de transformación de GraphQL simplifica la creación de una API de GraphQL desde cero. Maneja la creación de esquemas, la interacción con la base de datos y el mapeo de resolutores. Servicios como AWS AppSync facilitan la creación de APIs. La biblioteca de transformación de GraphQL utiliza directivas para agregar configuración y características. Nos adentraremos en las directivas @model, @auth y @connection, que generan bases de datos, resolutores, operaciones CRUD y suscripciones.

Entonces, ¿cuáles son algunas de las categorías que habilitamos en este momento? Bueno, dentro de cada una de estas categorías, generalmente hay un par de servicios diferentes. Por ejemplo, para API, puedes crear una API REST, un par de tipos diferentes de esas, o una API de GraphQL. Así que admitimos todas estas características diferentes, pero hoy nos centraremos principalmente en GraphQL.

La biblioteca de transformación de GraphQL es parte de algunas de las herramientas que te brinda la CLI. ¿Y qué es exactamente la biblioteca de transformación de GraphQL? Primero echemos un vistazo a eso antes de adentrarnos en una comprensión más profunda de lo que hace exactamente esta biblioteca. Así que hablemos de cómo construir una API de GraphQL desde cero. ¿Qué necesitarías para que esto suceda? Digamos que necesitas una aplicación de tareas y necesitas una forma de crear, actualizar y eliminar tareas. Primero comenzarías con tu esquema de GraphQL y el esquema podría tener un tipo de tarea. Luego crearías, actualizarías y eliminarías mutaciones. También podrías tener una consulta para obtener una tarea y listar todas las tareas. Y luego podrías tener suscripciones que crearías para cuando se cree, actualice y elimine una tarea. Así que necesitarías crear todo ese esquema. Luego necesitarías tener algún tipo de base de datos o fuente de datos que interactúe con tu API de GraphQL. Y luego necesitarías crear los resolutores que mapean entre el esquema con las operaciones de GraphQL y las fuentes de datos.

Poner todo esto junto es bastante trabajo, pero además de eso, debes pensar en cosas como autorización, autenticación, seguridad, cualquier cosa que pueda ser vulnerable en cuanto a una API de GraphQL se refiere, cosas como consultas anidadas y cosas así. Entonces, cuando estás construyendo una API, no solo estás pensando en tu infraestructura, sino que también estás pensando en el mantenimiento y todo este código adicional con el que estás lidiando. Servicios como AWS AppSync, que es un servicio de GraphQL administrado, facilitan esto. Y eso es esencialmente lo que impulsa la biblioteca de transformación de GraphQL en el fondo. Así que usando estas directivas, podemos tomar el servicio de GraphQL administrado que es AppSync, usar nuestro esquema de GraphQL local con Amplify y agregar una variedad de nuevas piezas de configuración, así como diferentes características, simplemente usando estas directivas.

Entonces, aquí hay algunas de las que habilitamos en este momento, y las que vamos a explorar en esta charla son @model, @auth y @connection. Vamos a ver exactamente qué hacen. Cuando trabajas con la biblioteca de transformación de GraphQL, ¿cómo funciona realmente? Bueno, solo piensa en un esquema de GraphQL típico. Simplemente escribes toda la definición del esquema que necesitarías. Con la biblioteca de transformación de GraphQL, luego decoras tus tipos base con estas diferentes directivas. Luego ejecutas una compilación. Y luego, después de ejecutar esa compilación, generamos infraestructura como código. Y cuando ejecutas la implementación, implementamos esa infraestructura para ti basada en esas directivas.

Echemos un vistazo un poco más en profundidad a algunas de estas directivas. @model es realmente una de las más poderosas. Y esta directiva genera bases de datos, resolutores, operaciones CRUD y suscripciones para cualquier tipo base.

4. Construcción de API con Transformaciones de GraphQL

Short description:

En esta parte, exploramos cómo utilizar las transformaciones de GraphQL para simplificar el proceso de construcción de una API de GraphQL. Discutimos la directiva @model para generar una tabla DynamoDB y las operaciones CRUD y suscripciones asociadas. También cubrimos la directiva @auth para implementar diferentes reglas de autorización, incluyendo acceso público y privado. Además, presentamos la directiva @key para configurar patrones adicionales de acceso a datos. El desafío de esta charla es construir una API utilizando las transformaciones de GraphQL en solo unos minutos, incluyendo el esquema, las bases de datos, los resolutores, las relaciones, las reglas de autorización y la simulación local.

Entonces, por ejemplo, necesitamos una aplicación de comercio electrónico. Todo lo que necesitamos hacer es crear este tipo base de producto y la directiva @model generará una tabla DynamoDB. Generará operaciones de creación, lectura, actualización y eliminación para el producto. También crearemos suscripciones para propietario, creación, propietario, actualización y propietario, eliminación, y luego generaremos todos los resolutores que mapean entre las operaciones de GraphQL y esa fuente de datos. Ejecutas una compilación y esto es más o menos lo que obtienes, esas tres cosas que acabo de mencionar.

También ofrecemos una forma de modelar diferentes reglas de autorización para un tipo. Por ejemplo, digamos que tenemos este tipo de publicación y podrías pensar en un blog o algo así, y usando la directiva @auth y pasando la propiedad allow owner, básicamente estamos diciendo, ok, solo el propietario de esta publicación puede actualizar, eliminar o incluso leer esta publicación, pero lo más probable es que tengas una combinación de diferentes roles. Por ejemplo, si piensas en un blog o incluso en algo como Instagram o Twitter, normalmente tienes una combinación de un par de tipos diferentes de autorización. Esos dos tipos suelen ser una combinación de público y privado. Usando esta combinación de reglas aquí, permitimos a los propietarios crear, actualizar y eliminar, y luego después de que la operación haya sido exitosa y hayas creado, actualizado o eliminado una publicación, entonces cualquiera puede leer la publicación. Tenemos ese acceso público para la lectura, acceso privado para la actualización y eliminación. Y luego también puedes agregar reglas adicionales allí, como privilegios de administrador y cosas así. Y luego también tenemos la directiva @key que te permite configurar patrones adicionales de acceso a datos en tus diferentes tipos. Así que piensa en una aplicación nuevamente, tal vez algo como una aplicación de comercio electrónico donde tienes un tipo de inventario. Por defecto, puedes obtener una pieza de inventario por ID, puedes listar todo el inventario, pero eso es todo lo que creamos por defecto. Usando la directiva @key, podemos agregar patrones adicionales de acceso a datos. Podemos hacer cosas como obtener por ID de almacén, obtener dentro de un rango de cantidad de inventario, podemos obtener dentro de un rango de precios. Y al hacerlo, para configurarlo, todo lo que necesitamos hacer es especificar el campo que nos gustaría consultar y luego el campo de consulta, que es la consulta de GraphQL que vamos a crear y darte de forma predeterminada. Entonces, ¿cuál es el desafío que me gustaría hacer para esta charla? Bueno, me gustaría seguir adelante y tomar estas transformaciones de GraphQL y construir una API en solo un par de minutos. Y lo que me gustaría hacer es construir esta API en unos cinco minutos. Necesita tener un esquema completamente mapeado basado en un par de tipos base. Quiero tener las bases de datos para cada tipo, quiero tener los resolutores, también quiero mapear las relaciones entre los diferentes tipos, y quiero definir reglas de autorización, y quiero simular esto localmente. Así que vamos a intentar hacer eso. Voy a ir a mi terminal. Aquí en nuestra terminal, estamos comenzando con un proyecto básico de Amplify que tiene la autenticación habilitada a través de Amazon Cognito User Pools, que es un servicio de autenticación administrado, algo así como Auth0. Y lo que vamos a hacer ahora es agregar una API de GraphQL. Para hacer eso, voy a ejecutar amplify-add-api. Esto nos guiará a través de todos los pasos.

5. Elección de GraphQL y Tipo de Autenticación

Short description:

Elegimos GraphQL, especificamos el nombre de la API y seleccionamos un tipo de autenticación predeterminado, Cognito User Pool. Agregamos un tipo de autenticación adicional para acceso público. Las configuraciones avanzadas nos permiten agregar más tipos de autenticación y elegimos API key para acceso público. Establecemos una expiración y seleccionamos no para la detección de conflictos. El soporte sin conexión se puede habilitar y podemos hacer referencia a un esquema local existente si está disponible.

Entonces, vamos a elegir GraphQL, vamos a darle el nombre de la API y vamos a elegir un tipo de autenticación predeterminado. Para el tipo de autenticación o autorización, voy a elegir Cognito User Pool, que es un servicio de autenticación administrado, pero vamos a agregar un tipo de autenticación adicional para acceso público en un momento. Para las configuraciones avanzadas, voy a elegir sí para poder agregar ese tipo de autenticación adicional. Y voy a elegir API key para acceso público. Le daremos una expiración. Seleccionaremos no para la detección de conflictos. Si quisiéramos soporte sin conexión, elegiríamos sí. Si tuviéramos un esquema con el que quisiéramos comenzar y ya lo tuviéramos creado localmente, podríamos hacer referencia a eso.

6. Creación de Esquema y Reglas de Autorización

Short description:

Elegimos una creación de esquema guiada y comenzamos con una plantilla de Amplify para una aplicación de comercio electrónico con tipos de productos y reseñas. Usando la biblioteca de transformación de GraphQL, creamos operaciones CRUD, suscripciones, resolvers y tablas para productos y reseñas. Los administradores tienen acceso completo para crear, actualizar y eliminar productos, mientras que se permite acceso público y privado para la lectura. Establecemos una relación de uno a muchos entre productos y reseñas, lo que permite consultas por producto y consultas combinadas de producto y reseña. Para las reseñas, se permite acceso de administrador y propietario, junto con acceso público y privado para la lectura. Después de guardar y compilar el esquema, podemos simular y generar los recursos necesarios localmente.

Pero no lo haremos. En su lugar, vamos a elegir una creación de esquema guiada y comenzar con una de las plantillas que ofrece Amplify. Voy a pegar el esquema con el que estamos comenzando, que será como una aplicación de comercio electrónico donde tenemos un tipo de producto y reseñas. Los administradores pueden crear productos y los usuarios pueden dejar reseñas.

Para hacer que esto funcione, vamos a utilizar la biblioteca de transformación de GraphQL para crear operaciones CRUD, suscripciones, resolvers y tablas para cada uno de estos dos tipos. De esta manera, podremos crear, leer, actualizar y eliminar productos y reseñas, y también podremos asignar suscripciones a ellos. También utilizamos el tipo de autenticación para definir algunas reglas de autorización. Para el tipo de producto, permitimos que los administradores tengan acceso completo para crear, actualizar y eliminar productos, pero no permitimos modificaciones por parte de otros usuarios. Sin embargo, permitimos acceso público y privado para la lectura, lo que significa que los usuarios pueden leer productos si están registrados o si solo están visitando el sitio.

Lo siguiente que tenemos es la directiva de conexión en el tipo de reseña, que establece una relación de uno a muchos entre un producto y muchas reseñas. De esta manera, cuando creamos una reseña, podemos especificar a qué producto pertenece. Luego, podemos realizar consultas de reseñas por producto y también consultar tanto el producto como las reseñas en una sola operación.

A continuación, veremos el tipo de reseña. Aquí tenemos reglas similares, pero hay un poco más de cosas sucediendo. Permitimos acceso de administrador para todo, y también permitimos acceso de propietario para que cualquier persona pueda crear una reseña y también actualizar o eliminar sus propias reseñas si lo desean. Permitimos acceso público para leer reseñas y también acceso privado para leer reseñas, lo que significa que si estás registrado o no, aún puedes leer reseñas. Luego podemos guardar esto y volver a la línea de comandos, porque eso es todo lo que necesitamos hacer. Esto va a inspeccionar nuestro esquema y asegurarse de que sea válido. Si lo es, nos dará un mensaje diciendo que se ha compilado correctamente.

Ahora podemos simular esto localmente antes de implementarlo simplemente ejecutando 'amplify mock'. Esto va a inspeccionar nuestro esquema nuevamente y va a simular la tabla de productos o la tabla de reseñas. Generará todos los diferentes resolvers y esquemas y cosas adicionales que necesitaremos. También podemos hacer una cogeneración local si estamos interactuando con esta API desde un proyecto de JavaScript. Voy a elegir sí para todas esas preguntas. Ahora tenemos un servidor gráfico local en ejecución en localhost. El servidor gráfico está funcionando y ahora podemos comenzar a realizar operaciones.

7. Creación de Productos, Reseñas y Consultas

Short description:

Actualizo la autenticación para ser yo mismo y creo una mutación para crear un producto. Obtenemos un error de no autorizado porque no hemos iniciado sesión como administrador. Nos simulamos como un administrador y probamos la operación de creación de productos. A continuación, creamos un comentario o reseña con un comentario, una calificación y un ID de producto. Actualizamos nuestra autenticación para ser un usuario diferente y probamos crear la reseña. Por último, consultamos todos los productos y sus reseñas como usuario registrado y lo probamos como usuario público.

Quiero actualizar la autenticación para ser yo mismo. Así que voy a iniciar sesión como debit tres y generar un token. Y lo que nos gustaría hacer es crear una mutación para crear un producto. El producto tendrá una descripción y un nombre. Vamos a crear esto. Y boom, obtenemos un error de no autorizado porque no hemos iniciado sesión como administrador. Así que nuestras reglas de autorización están funcionando hasta ahora. Vamos a simulamos como un administrador y probar esto. Ahora que somos un administrador, deberíamos poder realizar esta operación. Así que la creación del producto es exitosa.

A continuación, vamos a crear un comentario o una reseña. Para la creación de la reseña, vamos a decir, que queremos tener un comentario, una calificación y vamos a necesitar especificar el ID del producto. Así que dejaremos ese ID de producto ahí. El comentario es: zapatos increíbles. Y vamos a actualizar nuestra autenticación y decir que ahora somos un usuario diferente. Y parece que tengo algo sucediendo aquí. Parece que no necesito algunos de estos campos que se están autocompletando. Bien, genial. Así que tenemos los campos que queremos que son Comentario, Reseñas del Producto, ID y Calificación. Así que debería poder probar esto. Podemos hacer esto ya que solo somos un usuario registrado. Así que hemos creado nuestra reseña.

Y finalmente, quiero, supongo, por ahora, mantengámonos iniciados como este usuario. Y queremos consultar todos los productos. Y vamos a devolver todos los productos. Pero ahora tenemos esta relación entre productos y reseñas. Así que en realidad podemos obtener las reseñas de un producto. Así que vamos a obtener todo eso y ejecutar esta consulta. Y ahí puedes ver que nosotros, como usuario registrado, podemos consultar productos y reseñas. También queremos probar esto como usuario público.

8. Construyendo una Aplicación de Votación Escalable

Short description:

Hemos creado una aplicación básica con reglas de autorización y la hemos implementado localmente en solo unos minutos. Si queremos implementarla en nuestros servicios de backend, podemos ejecutar Amplify Push. Les mostraré un ejemplo de una aplicación de votación llamada this-or-that.dev, que es altamente escalable. La he probado con millones de operaciones y funcionó perfectamente. Sin embargo, puede ser costoso, así que tengan eso en cuenta. El esquema incluye tipos de encuesta y candidato, reglas de autorización y directivas at-key para patrones adicionales de acceso a datos. Pueden crear una encuesta, agregar candidatos y permitir votar. Pueden probarlo en vivo en this-or-that.cloud.

Entonces, ahora estaremos conectados o desconectados. Y estamos simulando el acceso público. Vemos que eso aún funciona. Así que hemos creado esta aplicación básica con reglas de autorización, todo implementado en solo unos minutos localmente. Y podemos volver atrás. Y si queremos implementar esto en nuestros servicios de backend, podemos ejecutar Amplify Push.

Entonces eso es todo en esa parte. Volvamos a mis diapositivas. Y tengo un par de ejemplos. Pero solo voy a mostrar uno ahora. Esta es una aplicación de votación que construí. Y esta es una aplicación de votación muy, muy escalable. Se llama this-or-that.dev. De hecho, la he probado con unos pocos millones de operaciones en el transcurso de un minuto. Y todo se escaló y funcionó perfectamente. Diría que no recomendaría hacer eso, porque te costará alrededor de $0.25 o algo así por cada millón de operaciones. Así que piénsalo. Pero simplemente pruébalo y se escalará. Llegará a ese punto. Solo voy a mostrarte el esquema con el que trabajé. Así que tengo un tipo de encuesta. Y tengo un tipo de candidato. Tengo algunas reglas de autorización. Y tengo algunas directivas at-key que permiten patrones adicionales de acceso a datos. Pero básicamente creas una encuesta. Luego creas un candidato para esa encuesta. Y luego permites votar en esa encuesta. Para probar esto, voy a abrir mi navegador y voy a this-or-that.cloud. Y esto está funcionando en vivo. Y pueden probarlo.

9. Creando una Encuesta y Conclusión

Short description:

Me gustaría crear una nueva encuesta llamada Tejas o Natter, donde las personas puedan votar sobre quién tuvo la mejor charla. Visita this-or-that.cloud/Tejas o Natter para votar y ver actualizaciones en tiempo real. Comparte la encuesta con otros. Gracias por asistir a mi charla. Encuéntrame en Twitter en Davit3 para cualquier pregunta o ayuda.

Y lo que me gustaría hacer es crear una nueva encuesta. Y quiero que todos aquí en esta charla prueben esto. Así que voy a decir que esto va a ser llamado Tejas o Natter. Y voy a decir Tejas o Natter. Y esto va a ser tal vez quién tuvo la mejor charla o algo así en este evento, ¿verdad? Porque Tejas es mi amigo. Esto es más una cosa amistosa.

Lo que me gustaría que hagas es ir a this-or-that.cloud slash Tejas o Natter y votar. Y lo que deberías ver es si abrimos un par de pestañas a la vez, deberías poder ver las actualizaciones en tiempo real que están sucediendo aquí. Así que si voto Tejas un par de veces, vuelvo aquí y voto Natter. Verás que se refleja en tiempo real. Y si quieres compartir esto, puedes copiarlo en tu portapapeles y compartirlo y seguir adelante.

Así que sí, esto será divertido. Estoy deseando ver los votos en esto cuando la gente empiece a participar. Y eso es todo para esta charla. Así que gracias por ver mi charla. Puedes encontrarme en Twitter en Davit3. Si tienes alguna pregunta, me encantaría responderlas en la sesión de preguntas y respuestas aquí, o después si tienes alguna pregunta dentro de una semana, un mes después, contáctame en Twitter. Estaré encantado de ayudar. Y eso es todo. Así que muchas gracias por venir a mi charla.

QnA

Consideraciones para los Servicios Gestionados

Short description:

Es importante considerar los compromisos, el alcance del proyecto, el tiempo de desarrollo, los costos de mantenimiento y los precios al decidir entre utilizar un servicio gestionado o construir desde cero. Los servicios gestionados ofrecen la ventaja de que otra persona se encargue del código y la seguridad, pero pueden tener un costo adicional. Evalúa tu experiencia en el dominio, tu equipo y el costo total de propiedad antes de tomar una decisión.

Wow, Natter. Esa fue una charla muy buena. Muchas gracias por iluminarnos a todos. Tenemos algunas preguntas que han llegado. Así que cambiemos a las preguntas, ¿de acuerdo? Hagámoslo. ¡Salud! Sí, hagámoslo. ¿Puedes acompañarme al escenario? Sí. Genial. Voy a empezar leyendo la primera pregunta para ti. De Iradir, ¿la combinación de precios difíciles de predecir versus, digamos, una tarifa mensual para el alojamiento normal, además del problema de la dependencia del proveedor, es algo que me aleja de ello. ¿Cómo puedo asegurarme de que dentro de seis meses, no estaré pagando varios dólares al mes, o tendré que desactivar mi aplicación? Sí, esa es una pregunta muy popular. Es una muy buena pregunta, realmente. Creo que es una de esas cosas que debes tener en cuenta todos los compromisos, el alcance completo del proyecto cuando se trata de cuánto tiempo estás invirtiendo en desarrollar algunas de estas características, los costos de mantenimiento y los precios reales. Así que digamos que estás aprovechando un servicio gestionado, no solo de AWS, sino realmente de cualquier proveedor de la nube, o cualquier proveedor de servicios gestionados, puedes pensar en cosas como Auth0 o Cloudinary, AWS, GCP. Todos tenemos nuestras propias versiones de estas cosas. Digamos que quisieras crear tu propia autenticación desde cero en lugar de tal vez usar el servicio de autenticación de AWS o algún servicio de autenticación. ¿Cuánto tiempo vas a pasar construyendo eso desde cero? ¿Cuánta experiencia tienes en ese dominio? Todas estas cosas entran en juego. Y cuando comienzas a pensar en el costo total de propiedad, construyendo todo esto, asegurándote de que sea seguro, asegurándote de que cuando tu aplicación se expanda, siga siendo segura. Las horas que podrías pasar haciendo eso o incluso contratando a otras personas para que construyan esas cosas por ti, ahí es donde está el verdadero compromiso. Por lo general, pagarás extra por algún tipo de servicio gestionado o incluso un servicio de la nube. Pero lo que obtienes a cambio es que alguien más se haga cargo de todo ese código, se haga cargo de las preocupaciones de seguridad. Y al final del día, muchas veces, tiene más sentido utilizar uno de estos servicios de la nube. Pero otras veces, tiene más sentido construirlo tú mismo. Así que diría que no siempre diría que vayas con el servicio de la nube. Diría, mira tu experiencia en el dominio, mira a tu equipo, mira el costo total de propiedad, y luego toma esa decisión.

Amplify, Infrastructure as Code, and Key Takeaway

Short description:

Amplify es estrictamente para AWS, pero parte del código front-end se puede utilizar de forma agnóstica a cualquier proveedor de la nube. El futuro de la infraestructura como código se dirige hacia abstracciones mejores y más concisas. Abstracciones como Amplify y el framework serverless facilitan a los desarrolladores front-end la construcción de sistemas escalables sin un profundo conocimiento de la infraestructura de bajo nivel. Para obtener más información, consulta la documentación de Amplify y explora Serverless Framework y Terraform. La idea principal de esta charla es que estas herramientas permiten a los desarrolladores tener un único conjunto de habilidades principales.

Sí, esa es una excelente respuesta. Muchas gracias. Otra pregunta fue si Amplify es estrictamente para AWS. Sí, Amplify es estrictamente para AWS. Es un proyecto de código abierto. Teóricamente, también se puede utilizar para otras cosas. Y parte del código front-end, parte del React y JavaScript y cosas del lado del cliente se pueden utilizar de forma agnóstica a cualquier proveedor de la nube. Por lo tanto, hay algunas características que están ahí, pero en su mayoría el framework está construido para soportar AWS.

Sí, absolutamente. Quiero recordarles a todos que Discord sigue abierto. Todavía estoy revisando. Así que si tienes alguna pregunta para ninguno de los dos, avísame o avísale a todos nosotros, en realidad. Tengo algunas preguntas propias. Me encantaría saber cuál es tu opinión sobre el futuro de la infraestructura como código, hacia dónde nos dirigimos. Creo que nos dirigimos hacia abstracciones mejores y más comprensibles, más limpias y más concisas sobre la infraestructura como código. Si miras cualquier sistema distribuido que la gente está construyendo en este momento en la naturaleza de todos modos, la mayoría de ellos están construidos sobre la infraestructura como código, pero entender cómo implementar un sistema complejo y cómo entender cómo unir todas las piezas requiere mucho conocimiento del dominio y lleva mucho tiempo adquirir ese conocimiento. Y creo que lo que estás viendo son estas abstracciones como Amplify, pero también hay otras cosas, donde la gente te permite usar un lenguaje más conciso, mejores cosas como el framework serverless, es un buen ejemplo, donde construyeron una versión más concisa de la infraestructura como código, donde aún estás escribiendo infraestructura como código, pero es menos código y tienes que saber menos sobre los servicios subyacentes. Y luego Amplify es aún un nivel más alto en ese sentido, donde solo estás ejecutando comandos que tienen que ver con categorías en lugar de los nombres reales de los servicios y cómo todo funciona junto. Creo que verás cada vez más cosas en ese sentido. Creo que mucha gente está reconociendo el poder de la infraestructura como código, pero también se dan cuenta de lo complicado que es realmente construir a un nivel muy bajo. Por lo tanto, lo están haciendo más fácil para personas como yo, que tradicionalmente soy un desarrollador front-end, poder construir estos sistemas escalables en estas plataformas realmente potentes sin tener que pasar cinco años entendiendo cómo funciona todo a nivel de bajo nivel simplemente proporcionando estas mejores abstracciones.

Sí, maravilloso. Y si hay personas que quieren aprender más sobre esto, ¿dónde recomendarías que comiencen? Quiero decir, si estás buscando aprender más sobre Amplify en general, definitivamente deberías consultar la documentación. Así que sería docs.awsamplify, creo, .com. Tenemos una nueva sección de guías que se lanzará a fin de mes que profundiza y proporciona muchos tutoriales detallados. Pero por ahora, toda la documentación está allí para todas las diferentes APIs que admitimos y cosas así. Si estás buscando aprender más sobre la infraestructura como código en general, definitivamente también deberías consultar Serverless Framework. Deberías consultar Terraform, que te permite escribir código en todos los proveedores de nube, no solo en AWS. Y esas tres serían prácticamente las cosas que definitivamente deberías consultar si estás interesado.

Súper genial, de acuerdo. Y luego, ¿cuál es, si hay una cosa que las personas deberían recordar de tu charla, qué te gustaría que fuera? Creo que, sabes, estás viendo mucho trabajo por ahí que facilita a las personas tener un único conjunto principal de habilidades.

JavaScript y Desarrollo Front-end con Amplify

Short description:

Los desarrolladores de JavaScript y front-end ahora pueden construir aplicaciones full-stack más poderosas utilizando abstracciones como Amplify. Estas abstracciones permiten a los desarrolladores front-end escribir el backend sin un profundo conocimiento de las tecnologías backend. Las API proporcionadas por estas abstracciones pueden ser consumidas y controladas utilizando el conocimiento del dominio existente. El ponente también menciona sus habilidades culinarias y el apoyo a su esposa, quien es una cocinera increíble.

Para mí, eso es como JavaScript y el desarrollo front-end y poder comenzar a usarlo para crear aplicaciones mucho más poderosas o construir aplicaciones más poderosas y más como aplicaciones full-stack que típicamente solo podíamos hacer en el pasado. Como desarrollador front-end, estaba realmente limitado a construir solo el lado del cliente de la aplicación. Y luego otras personas construían los servicios y yo me encargaba de conectar estos servicios.

Ahora, lo que estamos viendo son todas estas diferentes abstracciones como Amplify y otras cosas que están disponibles, ya sabes, Firebase, Netlify, todos estos actores están haciendo cosas similares. Ahora puedes usar tus habilidades de front-end pero también puedes escribir la parte del backend sin entender todos los detalles que intervienen en la construcción de todo esto. Simplemente estamos obteniendo estas API que podemos consumir y que podemos controlar utilizando el conocimiento del dominio que ya tenemos.

Sí. Muy bien. Gracias por eso. Como hoy tenemos un pequeño equipo de cocina, me encantaría preguntarte, ¿eres un buen cocinero, verdad? Puedo cocinar una cosa y es a la parrilla, cualquier cosa a la parrilla, puedo cocinar eso. Aparte de eso, mi esposa es una cocinera increíble. Así que la apoyo en la cocina, voy al supermercado, compro cosas y limpio y hago todas las tareas de apoyo. Ella es la experta y tengo mucha suerte. Soy como el sous chef, sí.

Genial, y entonces, ¿cuál es tu comida reconfortante favorita? Diría que cualquier cosa con carbohidratos porque realmente no como muchos carbohidratos. Así que cuando tengo la oportunidad, como 10 veces más de lo que probablemente debería. Wow, okay, bueno, eso está bien. Gracias por compartir eso con nosotros. Y muchas gracias de nuevo por tu charla. Creo que vamos a hacer un pequeño descanso, pero primero quiero asegurarme de que todos sepan que aún pueden seguir hablando con Nader en la sala de ponentes. Así que muchas gracias por unirte a nosotros. Gracias por tenerme, sí. Absolutamente, fue un placer.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Remix Conf Europe 2022Remix Conf Europe 2022
37 min
Full Stack Components
Top Content
Remix is a web framework that gives you the simple mental model of a Multi-Page App (MPA) but the power and capabilities of a Single-Page App (SPA). One of the big challenges of SPAs is network management resulting in a great deal of indirection and buggy code. This is especially noticeable in application state which Remix completely eliminates, but it's also an issue in individual components that communicate with a single-purpose backend endpoint (like a combobox search for example).
In this talk, Kent will demonstrate how Remix enables you to build complex UI components that are connected to a backend in the simplest and most powerful way you've ever seen. Leaving you time to chill with your family or whatever else you do for fun.
React Summit Remote Edition 2021React Summit Remote Edition 2021
43 min
RedwoodJS: The Full-Stack React App Framework of Your Dreams
Top Content
Tired of rebuilding your React-based web framework from scratch for every new project? You're in luck! RedwoodJS is a full-stack web application framework (think Rails but for JS/TS devs) based on React, Apollo GraphQL, and Prisma 2. We do the heavy integration work so you don't have to. We also beautifully integrate Jest and Storybook, and offer built-in solutions for declarative data fetching, authentication, pre-rendering, logging, a11y, and tons more. Deploy to Netlify, Vercel, or go oldschool on AWS or bare metal. In this talk you'll learn about the RedwoodJS architecture, see core features in action, and walk away with a sense of wonder and awe in your heart.
Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Remix Architecture Patterns
Top Content
Remix provides amazing flexibility and can be deployed anywhere where JavaScript is running. But how does Remix fit into the bigger application landscape of an organization? Remix provides great utility, but how to best take advantage of it? What things should be handled inside of Remix, and what things are better off done elsewhere? Should we use the express adapter to add a WebSocket server or should that be a standalone microservice? How will enterprise organizations integrate Remix into their current stacks? Let’s talk architecture patterns! In this talk, I want to share my thoughts about how to best integrate Remix into a greater (enterprise) stack.
DevOps.js Conf 2024DevOps.js Conf 2024
30 min
Demystify the DX for Lambda functions
In this session, I share with you how AWS CDK and AWS Toolkit can simplify the developer experience to run serverless workloads in the cloudA session with no slides, just an IDE and a CLI for deploying an API in the cloud, update it quickly, and retrieve logs without leaving your favourite IDE!
Remix Conf Europe 2022Remix Conf Europe 2022
22 min
Remixing Your Stack in a Monorepo Workspace
Remix entered the stage with a unique and refreshing take on how to develop on the web. But how do you integrate it into your existing ecosystem of applications? Do you want to test-drive Remix on a small project, or do you want to go full-in, but it is tricky to do a big-bang migration from your existing React app? In this talk, we're going to explore how a monorepo-based code organization can help integrate Remix with your existing React and TypeScript infrastructure, facilitating high code reuse and a migration path to Remix.

Workshops on related topic

JSNation 2023JSNation 2023
174 min
Developing Dynamic Blogs with SvelteKit & Storyblok: A Hands-on Workshop
Featured WorkshopFree
This SvelteKit workshop explores the integration of 3rd party services, such as Storyblok, in a SvelteKit project. Participants will learn how to create a SvelteKit project, leverage Svelte components, and connect to external APIs. The workshop covers important concepts including SSR, CSR, static site generation, and deploying the application using adapters. By the end of the workshop, attendees will have a solid understanding of building SvelteKit applications with API integrations and be prepared for deployment.
JSNation 2023JSNation 2023
104 min
Build and Deploy a Backend With Fastify & Platformatic
WorkshopFree
Platformatic allows you to rapidly develop GraphQL and REST APIs with minimal effort. The best part is that it also allows you to unleash the full potential of Node.js and Fastify whenever you need to. You can fully customise a Platformatic application by writing your own additional features and plugins. In the workshop, we’ll cover both our Open Source modules and our Cloud offering:- Platformatic OSS (open-source software) — Tools and libraries for rapidly building robust applications with Node.js (https://oss.platformatic.dev/).- Platformatic Cloud (currently in beta) — Our hosting platform that includes features such as preview apps, built-in metrics and integration with your Git flow (https://platformatic.dev/). 
In this workshop you'll learn how to develop APIs with Fastify and deploy them to the Platformatic Cloud.
GraphQL Galaxy 2021GraphQL Galaxy 2021
161 min
Full Stack GraphQL In The Cloud With Neo4j Aura, Next.js, & Vercel
WorkshopFree
In this workshop we will build and deploy a full stack GraphQL application using Next.js, Neo4j, and Vercel. Using a knowledge graph of news articles we will first build a GraphQL API using Next.js API routes and the Neo4j GraphQL Library. Next, we focus on the front-end, exploring how to use GraphQL for data fetching with a Next.js application. Lastly, we explore how to add personalization and content recommendation in our GraphQL API to serve relevant articles to our users, then deploy our application to the cloud using Vercel and Neo4j Aura.

Table of contents:
- Next.js overview and getting started with Next.js
- API Routes with Next.js & building a GraphQL API
- Using the Neo4j GraphQL Library
- Working with Apollo Client and GraphQL data fetching in Next.js
- Deploying with Vercel and Neo4j Aura
React Summit 2023React Summit 2023
88 min
Deploying React Native Apps in the Cloud
WorkshopFree
Deploying React Native apps manually on a local machine can be complex. The differences between Android and iOS require developers to use specific tools and processes for each platform, including hardware requirements for iOS. Manual deployments also make it difficult to manage signing credentials, environment configurations, track releases, and to collaborate as a team.
Appflow is the cloud mobile DevOps platform built by Ionic. Using a service like Appflow to build React Native apps not only provides access to powerful computing resources, it can simplify the deployment process by providing a centralized environment for managing and distributing your app to multiple platforms. This can save time and resources, enable collaboration, as well as improve the overall reliability and scalability of an app.
In this workshop, you’ll deploy a React Native application for delivery to Android and iOS test devices using Appflow. You’ll also learn the steps for publishing to Google Play and Apple App Stores. No previous experience with deploying native applications is required, and you’ll come away with a deeper understanding of the mobile deployment process and best practices for how to use a cloud mobile DevOps platform to ship quickly at scale.
Node Congress 2021Node Congress 2021
245 min
Building Serverless Applications on AWS with TypeScript
Workshop
This workshop teaches you the basics of serverless application development with TypeScript. We'll start with a simple Lambda function, set up the project and the infrastructure-as-a-code (AWS CDK), and learn how to organize, test, and debug a more complex serverless application.
Table of contents:        - How to set up a serverless project with TypeScript and CDK        - How to write a testable Lambda function with hexagonal architecture        - How to connect a function to a DynamoDB table        - How to create a serverless API        - How to debug and test a serverless function        - How to organize and grow a serverless application


Materials referred to in the workshop:
https://excalidraw.com/#room=57b84e0df9bdb7ea5675,HYgVepLIpfxrK4EQNclQ9w
DynamoDB blog Alex DeBrie: https://www.dynamodbguide.com/
Excellent book for the DynamoDB: https://www.dynamodbbook.com/
https://slobodan.me/workshops/nodecongress/prerequisites.html
Vue.js London Live 2021Vue.js London Live 2021
116 min
Building full-stack GraphQL applications with Hasura and Vue 3
Workshop
The frontend ecosystem moves at a breakneck pace. This workshop is intended to equip participants with an understanding of the state of the Vue 3 + GraphQL ecosystem, exploring that ecosystem – hands on, and through the lens of full-stack application development.

Table of contents
- Participants will use Hasura to build out a realtime GraphQL API backed Postgres. Together we'll walk through consuming it from a frontend and making the front-end reactive, subscribed to data changes.
- Additionally, we will look at commonly-used tools in the Vue GraphQL stack (such as Apollo Client and Urql), discuss some lesser-known alternatives, and touch on problems frequently encountered when starting out.
- Multiple patterns for managing stateful data and their tradeoffs will be outlined during the workshop, and a basic implementation for each pattern discussed will be shown.
Workshop level

NOTE: No prior experience with GraphQL is necessary, but may be helpful to aid understanding. The fundamentals will be covered.