Buscar (Don't Edit)

sábado, 9 de mayo de 2020

AWS Cloud Watch


Es un servicio que permite monitorear nuestros recursos de AWS así como nuestras aplicaciones en tiempo real. La forma en que trabaja esta basada en la definición de métricas, básicamente existen métricas para cualquier servicio de AWS. Si bien podemos revisarlas en cualquier momento la idea es automatizar el monitoreo creando alarmas y enviando notificaciones basadas en las alarmas. 

Hablando un poco más sobre las métricas estas pertenecen a un namespace y tienen un timestamp asociado a ellas. Ademas las métricas cuentan con atributos específicos llamados dimensiones, cada métrica puede tener hasta 10 dimensiones. También podemos crear nuestras propias métricas para monitorear nuestro servicios como lo puede ser información especifica del sistema operativo. Los datos de nuestras métricas son conservados por 2 semanas y en caso de que quisiéramos conservarlos por más tiempo podemos exportarlos a S3.

Las ofertas de monitoreo son basic y detailed. El monitoreo básico envía datos a CloudWatch cada 5 minutos para un limitado número de métricas previamente seleccionadas sin cargo. Esta opción es la que se usa por default. El monitoreo detallado envía datos cada minuto y permite agregar más datos por un costo adicional. Usando esta opción podemos tener mejores tiempos de respuesta frente a algunas eventualidades que puedan presentar nuestros servicios.

Adicionalmente los CloudWatch Dashboards nos permite visualizar de manera simple y práctica nuestras métricas. Estos Dashboards son globales y permiten personalizar valores como husos horarios o periodos de tiempo de visualización. Es la forma más rápida de ver comportamientos de nuestras métricas.

Amazon CloudWatch Logs

Nuestras aplicaciones, instancias u otros servicios pueden enviar logs a CloudWatch usando el SDK, pero los más comunes son los siguientes:
  • Elastic Beanstalk
  • EC2
  • AWS Lambda
  • VPC Flow Logs
  • API Gateway
  • CloudTrail
  • CloudWatch Log agents
  • Route 53

Los logs generalmente son exportados a S3 para archivarlos o enviados a clusters de ElasticSearch para ser analizados.

Existen la posibilidad de definir filtros para nuestros logs usando filter expressions, así como el uso de consultas definidas para exploraciones más concretas usando Insights.

CloudWatch usa log streams para almacenar lo log events de una sola fuente. Y estos son agrupados en log groups.Todo log stream debe estar asociado a un grupo y el periodo de retención de los log groups determina el tipo que se conservaran esos streams. Es posible eliminar log streams, pero no entradas individuales.

Es importante otorgar los permisos pertinentes para el IAM que utilizaremos para el correcto envió de logs a CloudWatch Logs.

Para nuestras instancias es posible instalar un agente que se encargue de enviar los datos directamente a CloudWatch Logs. Usando Amazon Linux es muy simple solo hay que acceder a nuestra instancia usando ssh y con una cuenta con los permisos suficientes instalar awslogs, posteriormente habrá que revisar que la información sobre la región de nuestra instancia es correcta revisando el archivo “/etc/awslogs/awscli.conf”. Una vez instalado y revisado que la configuración es correcta es necesario iniciar el servicio awslogsd.

AWS CloudWatch Alarms

Son usadas para provocar notificaciones en base a nuestras métricas definidas. Generalmente los receptores de estas notificaciones son ASC, EC2 Actions o SNS.

Existen tres tipos de alarmas: OK, INSUFFICIENT_DATA y ALARM.

AWS CloudWatch Events

Crea JSON con información relevante sobre los cambios ocurridos. Hay 2 tipos de Eventos:

  • Scehdule
  • Event pattern







viernes, 8 de mayo de 2020

AWS Cloud Trail

Registra todas las llamadas que se realizan a las API de AWS en tu cuenta ya sea desde la consola, SDK,CLI u otros servicios AWS. Por default esta habilitado.



El registro de las llamadas varia pero según la documentación oficial el periodo de registro oscila los 15 minutos después de realizarse la llamada. En verdad que es útil ver el el historial de llamadas y la información que registran los eventos es muy amplia. Este es el servicio que nos permite de la manera más sencilla saber cuando se modifico una función lambda o cuando se elimino algún recurso.

Los logs que genera CloudTrail puede ser puestos en CloudWatch Logs y por default se cifran usando Amason S3 SSE. Es importante decir que CloudTrail no transmite eventos superiores a 256 KB de tamaño.

Un trail es una configuración que nos permite enviar logs de actividad de las llamadas a las API de AWS. Existe 2 tipos de trail para todas las regiones (default) o para una sola región. La recomendación es tenerlos siempre habilitados y asociados a todas las regiones. Aunque la configuración default registra eventos para todas las regiones, solo se pueden ver los eventos para la región particular en la que estamos en ese momento.

lunes, 6 de abril de 2020

Amazon Elastic Compute Cloud EC2


Web Service que provee capacidad de computo en la nube.

Las instancias son la base de EC2. Estas son servidores virtuales que pueden ser adquiridos mediante múltiples opciones disponibles. La estrategia asociada al cobro esta directamente relacionada a las hora de uso de dicha instancia.

Cuando una instancia es lanzada hay que tomar en cuenta 2 factores muy relevantes: El hardware virtual asociado a la instancia así como el software que será cargado en ella.

Se clasifican y diferencian mediante los siguientes factores:

  • CPUs virtuales.
  • Memoria.
  • Almacenamiento(tipo y tamaño).
  • Rendimiento de red.

Las instancias son agrupadas en familias que se definen en base a los criterios antes mencionados. Para cada familia hay múltiples opciones que pueden ser seleccionadas y que son escaladas linealmente. Por ejemplo para la familia m4 podemos considerar una instancia tipo m4.large definida por 2 vCPUs siendo así la siguiente instancia m4.xlarge escala a 4 vCPus y para m4.2xlarge contaremos con 8 vCPUs. Este comportamiento es consistente en todas las familias.

Existe una gran variedad de familias. A continuación mencionaremos algunas de las más populares.

ROptimizadas en memoria RAM.Caches en memoria.
COptimizadas en computo .Computo y Base de Datos.
MBalanceadas.Uso general y aplicaciones web.
IOptimizadas para almacenamiento, I/O.Base de Datos, almacenamiento
GBasadas en GPU.Machine Learning, render de videos.



El rendimiento de red es muy relevante al momento de seleccionar nuestra instancia, este rendimiento se ve incrementado con forme las instancias crecen dentro de una familia. En caso de requerir un desempeño mayor para algunas instancias existe la posibilidad de utilizar el concepto de “enchanced networking”. Su uso reduce el impacto de la virtualización en el rendimiento de red permitiendo la transferencia de un mayor número de paquetes por segundo (PPS) y bajar la latencia. Sin embargo ademas de que la instancia permita el uso de “enchanced networking” estas instancias deberán estar contenidas dentro de una VPC.

Amazon Machine Images AMI

Es el encargado de definir el software que va a estar presente en la instancia al momento de ser iniciada, como es el Sistema Operativo, aplicaciones o software de sistema.

Al momento existe 4 tipos de orígenes para las AMIs

Publicadas por AWSMúltiples distribuciones de Linux,Windows 2008 y Windows 2012.
AWS MarketplaceTienda en línea con instancias que pueden contener software especializado que a su vez puede generar cargos extras.
Generadas desde instancias existentesGeneradas basadas en instancias existentes que ya cumplen con algún tipo de requisito.
Servidores virtuales subidosUtiliza el servicio de AWS VM para importar o exportar imágenes a partir de varios formatos.

Abordar una instancias

Public Domain Name System (DNS) name

Al momento de iniciar la instancia AWS crea un nombre DNS automáticamente que puede ser usado para acceder a la instancia. Este nombre no puede ser especificado por el usuario y persiste solo mientras la instancia este corriendo, así mismo no puede ser transferido a otra instancia.

IP pública

Opcionalmente una instancia puede ser asociada a una dirección IP pública. Esta IP es asignada por AWS de una reserva de IP que administra y no puede ser especificada por el usuario. Persiste mientras la instancia este corriendo y no puede ser transferida a otra instancia.

Elastic IP

Es una clase especial de dirección IP pública que puede ser asociada a nuestra instancias. Estas son persistentes para un mismo usuario hasta que el usuario decida. Está si puede ser transferida entre múltiples instancias (una a la vez) y generalmente es usada en casos de fallas de instancias.

Acceso inicial

EC2 usa criptografía de llave pública para cifrar y descifrar la información de login. Particularmente usa la llave pública para cifrar y la privada para descifrar. Este par de llaves es conocido como key pair la llave pública es conservada por AWS y la privada por el cliente. Al momento de crear nuestra instancia la consola nos pregunta si requerimos generar un key pair nuevo o si vamos a usar un par de llaves ya existente. Es importante administrar correctamente este archivo.

El usuario inicial para instancias con Sistema Operativo Linux es ec2-user, y para hacer este primer acceso es necesario conectarse mediante SSH dando como parámetro nuestro key pair.

Es importante ubicar el archivo *.pem y otorgarle los permisos necesario de lectura.

> chmod 400 {nombre}.pem

Una vez otorgado el permiso de lectura, ya podemos ejecutar SSH.

> ssh -i {nombre}.pem ec2-user@{ip-pública asociada}

Francamente no he generado ninguna instancia Windows así es que no detallo los pasos. :p

lunes, 16 de marzo de 2020

Amazon Simple Storage Service (S3)

Función principal: Almacenamiento seguro, durable y altamente escalable en la nube.

Ejemplos de casos de uso populares:

  • Backups.
  • Almacenamiento y distribución de contenido (software, media).
  • Big data.
  • Web hosting estático.
  • Recuperación de desastres.

Storage classes: General purpose, infrequent access y archive.

Servicios similares: Amazon Glacier

Detalles:

S3 utiliza un sistema de almacenamiento llamado cloud object storage, el almacenamiento es independiente de un servidor y se accede a tráves de Internet. Todos los datos almacenados se consideran objetos y estos son administrados usando una API basada en verbos HTTP. Los objetos están compuestos por datos y metadatos. Los metadatos pueden ser de tipo system creados por Amazon o user que son opcionales. Cada objeto es identificado por una llave que nosotros proporcionamos, esta llave hace a su vez la función de nombre del archivo. Los objetos son automáticamente replicados en múltiples instalaciones y dispositivos dentro de una misma región. El tamaño de los objetos puede variar entre 0 bytes y 5TB.Cada objeto puede ser dirigido por una única URL formada por el endpoint del webservice + el nombre del bucket + el la llave del objeto.

Ejemplo:

http://nombreBucket.s3.amazonaws.com/llave

Los objetos mencionados son almacenados en una estructura llamada bucket. Los buckets son simplemente carpetas planas que no tiene ningún tipo de estructura jerárquica. Virtualmente cada bucket puede almacenar la cantidad de objetos que queramos. Los nombres de los bucktes son globales, así es que los nombres tienen que ser únicos y pueden contener hasta 63 caracteres incluyendo números, guiones y puntos. La sugerencia es basarse en un sistema similar a las reglas de los DNS. Cada bucket se crea en una región especificada seleccionada por nosotros.

S3 esta altamente optimizado para lecturas y sus características minimalistas son intencionales con el fin de brindar mayor escalabilidad y durabilidad. Ahora mencionamos las operaciones permitidas.

  • Crear y eliminar buckets.
  • Escribir objetos.
  • Leer objetos.
  • Borrar objetos.
  • Listar llaves en un bucket.

Durabilidad : 99.999999999%
Disponibilidad: 99.99%

Consistencia de datos:

Se basa en un sistema eventual de consistencia debido a la replicación en múltiples servidores y localidades los cambios realizados pueden tardar un poco en propagarse. Para PUTs nuevos no existe ninguna consideración ya que se garantiza consistencia de lectura después de escritura. Sin embargo cuando utilizamos PUT o DELETE para un objeto ya existente se aplica la estrategia de consistencia eventual. Esto quiere decir que podríamos recibir la información no actualizada pero nunca una mezcla inconsistente de datos.

Control de acceso:

Por default cuando creamos un bucket solo el creador tiene acceso a el. Después de eso es nuestra responsabilidad utilizar alguno de los mecanismos que se ofrecen para dar acceso a terceros. Podemos hacer uso de ACLs para dar acceso a nivel de bucket ó podemos hacer uso de la recomendación de Amazon y usar políticas especificas para cada bucket. 

Web hosting estático:

Rápido, muy escalable y mucho más seguro que un sitio web dinámico.

Prefijos y delimitadores:

Debido a la estructura plana la utilización de prefijos y delimitadores permite organizar y navegar simulando una estructura jerárquica. Es común utilizar “/” y ”\”. Utilizando IAM o políticas aplicadas a los buckets podemos filtrar accesos a distintos usuario.

Ejemplos:

Nombre del objeto: 2008/septiembre/foto1.jpg

Es importante recalcar que es una simple emulación ya que S3 no es un sistema de archivos.

Storage classes:

General purpose, infrequent access y archive.

S3 Standard – Para la mayoría de los casos de uso general.

S3 Standard Infrequent Access – Para archivos que persisten por un tiempo más largo (más de 30 días) y que su acceso no es tan frecuente. Su costo depende de uso en GB que se haga.

S3 Reduced Redundancy Storage – Ideal para datos que puedes ser calculados o recuperados fácilmente.

 Utilizar el API SDK de AWS para Java es realmente muy sencillo, imagino que debe de ser igual de sencillo para otro lenguaje soportado.

Particularmente  realice el ejemplo que viene en la documentación y adicionalmente realice un PUT usando un InputStream, en ese caso la firma requiere de un ObjectMetada en cual agregue la información de tamaño del contenido.

https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/examples-s3-objects.html 
 

martes, 26 de septiembre de 2017

Ready Player One

Una avalancha de referencias culturales adecuadas a una buena historia da como resultado “Ready Player One”. Nunca he visto una laptop llena de calcomanías que no se vea culera por más chidas que estén y en este caso este libro logra llenarse de calcomanías y verse genial. Las referencias culturales son inmensas, pero en ningún momento están de más, si bien algunas pueden no ser completamente de tu agrado o son desconocidas seguramente alguna de ellas si marco tú vida.
Otro aspecto a destacar es el contraste que marca entre la vida real y la virtual, me pareció muy adecuado como logra mezclar y sacar provecho de sus características particulares. Me logro recordar un poco los cambios que ocurrían en la historia sin fin. El libro está separado por niveles y luego por capítulos iniciando con una breve introducción de la situación que vive el protagonista. Para el final del primer nivel yo ya estaba completamente enganchado en la historia y solo quería leer el siguiente capítulo. Si bien sentí un ligero bajón en la historia después de esa primera explosión de emociones posteriormente en los capítulos intermedios y finales todo va para arriba, la emoción se mantiene viva en todo momento.
Los personajes son otro acierto de la novela los protagonistas son muy agradables, el muy fácil sentir empatía con el personaje principal obviamente supero mis expectativas generadas al principio de la novela Art3mis es lo mejor, es la nerd que todos los nerds hemos deseado alguna vez, trae todo. Ache cumple también con creces en su rol como gran compañero en la aventura. Incluso los villanos están muy bien logrados y a las pocas páginas ya empiezas a aborrecer a los Sixers. El sabor que me dejo al final fue muy agradable, el desenlace está bien logrado incorporando un mensaje moral y de reflexión, es como debía ser. Solo me queda recomendarlo y esperar a ver la película que se viene en 2018. El tráiler luce genial y solo puedo esperar que sea una gran película.

sábado, 14 de enero de 2017

Compañeros


Esos compañeros de los cuales unos días o semanas después puedes llamar amigos y que les puedes decir que no traen nada o que son bien putos y simplemente te la regresan o se mueren de risa.


Para mi todo comenzó con mi primer trabajo que fue para una pequeña empresa de software fundada por un grupo de amigos. El equipo estaba conformado aproximadamente por 8 desarrolladores, 2 diseñadores, una persona encargada de temas administrativos y 2 personas de ventas. El ambiente laboral era fantástico y entre los desarrolladores era aún más cercano gracias a que la mayoría nos habíamos conocido previamente. Hacíamos muchas actividades en conjunto tanto dentro como fuera de la oficina, pero claro que la mayoría de estas pasaban dentro de la oficina. Las platicas de sobremesa eran fascinantes y siempre divertidas, cualquier tema era valido. Solo un par de ocaciones hubo algunos roces y claro que había mejores relaciones entre algunos, pero sinceramente puedo asegurar que todos nos convertimos en amigos. Había una particularidad en la oficina, la chica de administración junto con los de ventas salían temprano siempre y los diseñadores a las 6 en punto aplicaban el famoso "Yaba daba doooo"! A partir de ese momento todo era permitido, las 6 marcaba la línea en la que no había reglas nos expresábamos como queríamos nos convertíamos en una bola de patanes que no teníamos limites. Las bromas eran muy pesadas, los apodos y burlas eran cosa de todos los días que en lugar de desgastar nuestra relación solo hacia más grande nuestro lazo afectivo, claro algunas veces si era necesario quedarse a trabajar, pero gran parte de las veces nos quedábamos simplemente para cotorrear. Otras veces había retas de PES obviamente estaba instalado en el server XD, pero se ponía mejor cuando se armaba la reta 3 vs 3. Toda la noche dejábamos bajando “material” que ese día entre la mayoría habíamos decidido bajar y solo puedo decir que al poco tiempo llenamos el disco duro. Así fue poco más de un año, con grandes sonrisas y buenos momentos.




Mi carrera ha sido larga y diversa y en todos siempre he podido encontrar grandes amigos sin embargo hay 2 trabajos que merecen una mención honorífica. Mi primer trabajo en Guadalajara marco mi primera vez fuera de casa, afortunadamente así también lo fue para varios compañeros que pronto nos acoplamos y apoyamos para esa nueva aventura. Hoy en día gran parte de mis relaciones personales están basadas en ese trabajo. Las condiciones laborales se prestaban para salir a desayunar diario y hacer múltiples visitas al OXXO. La empresa era muy grande y se daba pie para formar muchos grupos y conocer gente nueva con cada ingreso. En total fueron casi 3 años de una experiencia social muy grata y que como mencione anteriormente que gran parte de esas personas siguen afortunadamente cerca de mi hasta la fecha.


Mi regreso a Guadalajara marco el ultimo trabajo en el que se genero un grupo realmente especial y aunque seguimos en contacto por medio de un chat lamentablemente el tiempo de convivencia personal fue muy breve. En el papel las condiciones sonaban un poco adversas, no existe ningún parecido entre nosotros, somos de distintas edades y distintas ciudades, ahora cuanto a gustos a algunos nos gustan Los Simpsons a otro no, a unos nos gusta el fut a otro no, ellos son putos yo no. El chiste es que entramos a la empresa el mismo día y eso fue suficiente para crear ese gran grupo en el que me siento privilegiado de estar.



Debo decir que he sido demasiado afortunado en cuanto compañeros se refiere y no ha habido un trabajo en el que no saliera ganando un buen amigo. Espero que ustedes tengan la misma fortuna que yo.  



martes, 10 de junio de 2014

Lo que nos dejó el #WWDC2014


     El día lunes de la semana pasada en San Francisco se llevó a cabo la Conferencia Mundial de Desarrolladores, que se realiza anualmente por Apple Inc o como muchos conocen "WWDC".

     Como cada año los Apple FanBoys , siempre están al pendiente de lo que depara en esta edición por eso en MoztroDev nos pusimos a seguir la transmisión para poder hacer este post mas detalladamente.