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