Opciones de procesamiento en AWS
Tags: aws, español, serverless, beginners
Published: 2020-01-27 15:56:57

---
title: Opciones de procesamiento en AWS
published: true
description: Un post que habla sobre las opciones de procesamiento en AWs en terminos generales
tags: #aws, #español, #serverless, #beginners
---

# Opciones de procesamiento en AWS

En AWS nos esforzamos por proporcionarle a nuestros usuarios una caja de herramientas extensa y flexible. Así los usuarios pueden tomar las decisiones de arquitectura e implementación que mejor se adapten a la fortaleza y experiencia de su equipo. Un lugar donde esto se ve reflejado, es en la diversidad de los (más de 175) servicios disponibles en la consola de AWS.

> Esta es la lista de todos los servicios dentro de la categoría _compute_ de la consola de AWS ![Screenshot de la consola de A
WS](https://thepracticaldev.s3.amazonaws.com/i/kq6lnmlx527qjb5csspe.png)

Elegí escribir sobre las opciones de procesamiento, porque me parece un tema que puede ser de gran ayuda para todos. Ya que, en algún momento, todos los que trabajamos con tecnología, tendremos que tomar una decisión que dependerá de cómo se realiza el procesamiento de nuestra aplicación. Es igual de importante, para alguien migrando una aplicación ya existente, como para alguien comenzando un desarrollo desde cero.

Mi objetivo es cubrir las diferentes opciones disponibles en AWS y definir conceptos generales, con la meta de ayudar a tomar una decisión informada.

--------------

## Las Categorías

Con el fin de darle un marco al contenido, voy a dividir los servicios en tres grandes categorías, aunque vale la pena mencionar que algunos de los servicios podrían estar en más de una categoría:

- Instancias

- Serverless

- Contenedores

### Instancias

Las instancias son entornos informáticos virtuales (*virtual computing environments*) y son el componente fundamental para la operación en Amazon Elastic Compute Cloud (Amazon EC2). Nos permiten agregar o disminuir nuestra capacidad de procesamiento de manera casi inmediata, de manera manual o usando *Auto Scaling* *Groups*.

Antes de lanzar una instancia la debemos personalizar para cumplir con los requerimientos de nuestra aplicación. Esto lo hacemos al elegir cosas como, CPU (arquitectura y capacidad), memoria (tipo y cantidad), software (sistema operativo, librerías), localización (región y zona de disponibilidad).

Para entender más sobre cómo configurar instancias tenemos que definir algunos términos:

- AMI (Amazon Machine Image): Un modelo que define el software
    (incluyendo sistema operativo) para una instancia. El mismo AMI se
    puede utilizar como modelo para desplegar cualquier número de
    instancias, estas compartiran la misma configuracion.

- Tipo de Instancia: Cada tipo representa una combinación de CPU,
    memoria, almacenamiento y red que podemos elegir. Cada familia nos
    da la opción de elegir su tamaño que nos brinda mayor flexibilidad.

- Familias de Instancias: Hemos agrupado las instancias en familias
    que representan casos de uso comunes de nuestros usuarios, para
    hacer la selección de la instancia correcta más sencillo. Las 5
    familias de instancias son, uso general, optimizadas para
    informática, optimizadas para memoria, informática acelerada y
    optimizadas para almacenamiento.
> ![Screenshot de dos tipos de instancia](https://thepracticaldev.s3.amazonaws.com/i/nv6f04ooovx96l26tpb3.png)
> En este screenshot podemos ver dos tipos de instancia, uno de la familia __a1__ y otra de la familia __c4__

### Serverless

El nombre bajo el que agrupamos a estas tecnologías parece indicar que
no usamos ningún servidor, la realidad es que el termino se utiliza para
describir tecnologías o servicios que (a diferencia de una arquitectura
tradicional) comparten los siguientes atributos:

- Computación efímera y sin estado

- Procesamiento basado en eventos

- Infraestructura completamente administrada por AWS

> El servicio de ejecución de código de AWS que tiene estas características es [AWS Lambda](https://docs.aws.amazon.com/es_es/lambda/latest/dg/welcome.html).

Hablemos un poco de las tres características y las decisiones que
deberemos tomar al usar servicios Serverless.

__Computación efímera y sin estado__: Cada ejecución de nuestro código, puede suceder en un ambiente completamente diferente; por lo que no podemos depender de servicios del sistema operativo como la persistencia de archivos. Esto resulta en un ambiente sin estado. Debemos asumir que cada llamada a nuestro código será ejecutada por un servidor diferente, el servidor manejado la ejecución actual no tiene información sobre las ejecuciones anteriores. Es necesario que implementemos un mecanismo para simular estado, para que nuestros usuarios puedan realizar operaciones que requieran múltiples llamadas.

__Procesamiento basado en eventos__: Definir el tipo de evento que disparar la ejecución de nuestro código, es nuestra primera responsabilidad al utilizar procesamiento *serverless*. Algunos ejemplos de posibles eventos: escritura de nuevo objeto en una cubeta de S3, modificación a una base de datos, interacción de un usuario con nuestro *front end,* cambios en una aplicación de software como servicio (SaaS). Esta no es una lista exhaustiva de eventos, pero nos da una idea de lo flexible que puede ser nuestra aplicación dependiendo del evento que elijamos. Una ventaja de poder atar diferentes componentes de código a diferentes eventos es que cada componente puede ser ligero y hacer solo una cosa muy bien.

__Infraestructura administrada__: Podemos enfocarnos en escribir el mejor código posible, ya que no tenemos que dedicar nuestro tiempo en actualizar, asegurar o administrar servidores. AWS Lambda también nos permite tener código con alto escalamiento, sin que tengamos que establecer reglas o administrar *load balancers*.

### Contenedores

Una definición popular de contenedor es "una medida estándar de software", es decir, es la cantidad mínima necesaria para ejecutar una aplicación incluyendo configuraciones, librerías, *runtime* y dependencias. Los contenedores son una evolución sobre la tecnología de virtualización tradicional,una de sus ventajas principales es la portabilidad. los contenedores se ejecutan sobre un motor (como [Docker Engine](https://www.docker.com/products/container-runtime)) que es el encargado de manejar el acceso a los recursos del sistema. Es gracias a esto que podemos virtualizar una aplicación y no necesariamente todo un sistema operativo, y nos permite migrar entre diferentes plataformas.

AWS es una gran opción para ejecutar contenedores (80% de los contenedores en la nube están en AWS), esto es, en gran parte, debido a que hay una serie de servicios diseñados para contenedores que nos permiten elegir como ejecutarlos y orquestarlos. Podemos elegir el servicio correcto de AWS para nuestros contenedores, contestando las siguientes preguntas:

1. ¿Quiero administrar mis propios servidores?
  - No: [AWS Fargate](https://aws.amazon.com/es/fargate/?nc1=h_ls) es el motor computacional para contenedores, completamente administrado (¡*serverless*!).
  - Sí: [Amazon EC2](https://aws.amazon.com/es/ec2/?nc1=h_ls) podemos administrar las instancias, sistema operativo e instalación de los servidores sobre los que ejecutaremos los contenedores.
2.  ¿Mi equipo decidió usar el orquestador de [Kubernetes](https://kubernetes.io/) o ya tengo una aplicación que lo usa?
  - No: [Amazon Elastic Container Service (ECS)](https://aws.amazon.com/es/ecs/) es un servicio de orquestación completamente administrado con integración sencilla a otros servicios de AWS.
  - Sí: [Amazon Elastic Kubernetes Service (EKS)](https://aws.amazon.com/es/eks/?nc1=h_ls) también completamente administrado y nos permite migrar cualquier aplicación de Kubernetes estándar fácilmente.

> Ambos orquestadores son compatibles con AWS Fargate.

## Conclusión

AWS tiene un gran número de servicios de procesamiento, todos creados con la idea de darle a los clientes el mayor número de opciones. Queremos que nuestros clientes elijan la arquitectura, las herramientas de desarrollo y como administrar sus servicios y aplicaciones en base a que los hará mas productivos y le entregara mayo valor a sus clientes.