BKT en Producción: AWS y Otros Servicios Usados

En este segundo artículo de la nueva serie que estaré publicando presentaré una serie de servicios y herramientas que se usaron para dejar el software del que esta serie trata funcionando en producción.

Toda la infraestructura se montó en AWS. Fue una combinación de servicios estándar y uno que era relativamente nuevo y en ese entonces aún se actualizaba constantemente.

Los servicios en cuestión son:

  • EC2: Elastic Cloud Computing
  • S3: Simple Storage Service
  • SES: Simple Email Service
  • SNS: Simple Notification Service
  • Code Deploy
  • Lambda
  • AMI: Application Machine Images
  • IAM: Identity and Authorization Management
  • ELB: Elastic Load Balancer
  • RDS: Relational Database Service
  • Cloudfront
  • Auto Scaling

Entre los servicios y herramientas usados por fuera de AWS están:

  • Sentry
  • Papertrail
  • Logentries
  • Slack: para notificaciones de despliegues
  • Jenkins
  • Terraform
  • Packer
  • Skylight
  • New Relic

AWS, siglas para lo que te imagines

Antes de iniciar en este proyecto, la primera vez que vi la consola de AWS me dio pánico. Eran demasiadas opciones y no sabía por donde empezar. Una semana antes de empezar este nuevo software tuve la oportunidad de hacer un curso de AWS(en Platzi, gracias, Yohan Graterol) en el cual pude aprender a usar los servicios básicos de esta plataforma: EC2(con todo lo que tiene) y RDS.

Se podría considerar a EC2 como un mini mounstro dentro de AWS ya que se compone de ELB, Auto Scaling, Elastic IP, Security groups, AMI y todo el tema de instancias en subasta y/o dedicadas.

Leer más “BKT en Producción: AWS y Otros Servicios Usados”

Anuncios

BKT En Producción: Lecciones Aprendidas de un Producto con Todos los Juguetes

Me considero una persona ordenada, no en exceso pero a veces sí lo llevo a puntos que me resultan incómodos a mí mismo. En todo caso, ese orden el cual ejerzo diariamente, me ayuda mucho en diversos aspectos de mi vida personal y/o profesional.

Uno de esos aspectos es coleccionar, de manera ordenada, lecciones/enlaces/textos/conceptos/código que me ayudaron a resolver determinado problema en cierto momento en particular. Y digo que me ayuda porque es una buena costumbre que he tomado desde que inicié a trabajar como desarrollador de software.

En la primera empresa que trabajé al completar una configuración que arrojaba errores nunca, a nadie, se le ocurría guardar el enlace de aquella solución que permitió avanzar. Luego, al pasar el tiempo, volvíamos a hacer una configuración igual o similar, nos encontrábamos el mismo error y nadie sabía donde encontrar la solución ni recordaba cómo resolver el detalle 🙂

Leer más “BKT En Producción: Lecciones Aprendidas de un Producto con Todos los Juguetes”

Cómo listar módulos globales instalados con npm -g

En el mundo del desarrollo web, en lo que a frontend corresponde, npm ha sido el gestor de dependencias de toda la vida hasta que apareció Yarn.

Para usar algunos módulos, en el caso de npm, tocaba instalarlos como dependencia del proyecto y cómo módulo global en el sistema. Al instalarlo global al sistema, se podía ejecutar el comando desde una terminal o consola.

Y sí, es claro que no debería ser necesario una instalación global cuando ya se cuenta con el paquete a nivel del proyecto pero sus razones para eso hay.

Leer más “Cómo listar módulos globales instalados con npm -g”

Backend Handbook para Aplicaciones Ruby on Rails

A lo largo de mis años de trabajo he recopilado conocimientos e información que me ha ayudado a ser un mejor profesional.

Cuando pienso en que qué podría haber sido de mi si esas personas que decidieron escribir un artículo, publicar un libro, responder una pregunta en Stack Overflow, dar una charla o publicar un vídeo no lo hubieran hecho.

Leer más “Backend Handbook para Aplicaciones Ruby on Rails”

Cosas de JavaScript: Seleccionando ID numérico con querySelector

En el artículo anterior a este describo algunos aprendizajes mientras completaba una prueba técnica. Había que implementar una especie de resaltado en textos en una página, mandarlos a una base de datos y poder traerlos de nuevo y mostrarlos donde van.

Pasa que una de las formas de tener precisión sobre dónde volver a mostrar lo que se resaltó era guardando algunos elementos adicionales como el párrafo, un ID que identifique al párrafo y en el caso puntual de la prueba, podía guardar el ID de la página del texto(los textos eran páginas de un “libro” web).
Leer más “Cosas de JavaScript: Seleccionando ID numérico con querySelector”

Cosas de JavaScript: Diferencia entre parentElement y parentNode

Creo que esta es la primera vez que escribo algo sobre JavaScript a nivel del lenguaje. Ya antes había mencionado cosas que había logrado pero no explicaciones al respecto de algo, como sí lo he hecho en Ruby.

JavaScript fue el primer lenguaje de programación web que aprendí(HTML y CSS no son lenguajes de programación). Lo hice a través de un libro gratuito muy popular publicado por Javier Eguiluz: Introducción a JavaScript.

Sin embargo, hay muchas cosas de fondo en JS que desconozco. Tal vez sea la naturaleza multiparadigma del lenguaje o que mi experiencia con el mismo nunca ahondó ya que cuando iba a programar asuntos complejos, pues, generalmente había una librería para ello, ejemplo jQuery para manipulación del DOM. Leer más “Cosas de JavaScript: Diferencia entre parentElement y parentNode”

Servidores: ¿Mascotas o Ganado?

Recuerdo, hace ya varios años, en una empresa pequeña en la cual trabajé un día mi jefe me encargó una tarea que me hizo coger gusto e interés en el mundo de operaciones o lo que suelen llamar DevOps.

Se me acerca un día miércoles o jueves y me dice:

Frank, el servidor dedicado nos cuesta X cantidad de dólares. Si el sábado logras migrar todos los sitios web que están ahí hospedados a servidores en Linode, te doy esa X cantidad a ti. Sino, toca pagar y en todo caso debes hacer la migración.

saitama-unimpressed

Ya venía trabajando algún tiempo con configuraciones en Linode por lo cual no había tanto desconocido pero la tarea pedía completarse en tiempo casi récord. Bueno, al final de la historia lo logré pero el resultado fue 20, aprox, servidores(más direcciones IP, más DNS, etc) que debía gestionar a diario.

Leer más “Servidores: ¿Mascotas o Ganado?”

Sobre las Interfaces en Ruby

Lo primero es que no existe tal cosa como una interfaz en Ruby como sí ocurre en otro lenguaje orientado a objetos, Java.

En todo caso, hay formas de intentar emular ese mecanismo pero antes vamos a definir que es una interfaz para tener un concepto claro.

¿Qué es una Interfaz?

Es una especie de contrato o descripción que una clase se “compromete” a tener al implementar(usar) dicha interfaz. Este contrato está dado por una colección de métodos abstractos(sin definir su funcionalidad) los cuáles deben ser implementados en la clase que se adhiere a la interfaz.

Leer más “Sobre las Interfaces en Ruby”

Sobrecarga de métodos en Ruby

Una de las cosas buenas de presentarse a procesos de selección en el mundo del desarrollo de software es poder medir como está el nivel de conocimientos de uno mismo y además aprender conceptos nuevos.

En un proceso en el cual participé en Baires Dev, una de las preguntas que no pude responder fue acerca de method overloading en Ruby. Ese mismo día investigué e interioricé. Ahora trataré de explicarlo en este espacio.

Según la Wikipedia, la sobrecarga de funciones o métodos es la habilidad de crear varios métodos nombrados igual pero con diferentes implementaciones(entiéndase implementación como cuerpo de la función).

Leer más “Sobrecarga de métodos en Ruby”

Configuración Correcta para Permisos de Archivos en WordPress en Linux

Vengo a traer la solución definitiva a este lío de permisos. Unos sitios dicen que hay que aplicar X permisos, otros dicen que Y. Pues yo digo que Z y esta es la forma que mejor me ha funcionado en tres migraciones seguidas que hice de sitios WordPress desde hospedajes compartidos a servidores en AWS. Veamos. Leer más “Configuración Correcta para Permisos de Archivos en WordPress en Linux”