Cómo comenzar a trabajar con AWS Graviton: La pregunta del Millón
Tags: aws, awsgraviton
Published: 2023-09-27 00:25:04

El sabado pasado (Septiembre 23, 2023) **[tuve el placer en el AWS User Group Peru Conf 2023](https://www.linkedin.com/posts/activity-7111654057601048576-d3Kz/?utm_source=share&utm_medium=member_desktop)**, y tengo que decir que el evento quedó increíble. 

El evento demostró que la comunidad de AWS en Perú (y en Latinoamerica en general) está más viva que nunca. 

Pero algo que entendí en el evento es que habían varias personas que conocían **[AWS Graviton](https://aws.amazon.com/ec2/graviton/)**, pero no lo usaban en producción; y otras personas no lo conocían en todo sentido. 

Esto me dejó un pequeño sinsabor en la boca, pero también me dio a entender de que realmente debemos trabajar más para que más personas de habla hispana conozcan la tecnología y le saquen provecho en sus respectivas organizaciones. 

Dos de las preguntas más recurrentes que me encontré cuando conversaba con personas en el evento fueron las mismas: 

- _¿Qué es AWS Graviton?_
- _¿Cómo comienzo a trabajar con Graviton hoy?_

En este post lo que pretendo es tratar de responder ambas preguntas de la forma más concisa y simple posible 

## ¿Qué es AWS Graviton?
[AWS Graviton](https://aws.amazon.com/ec2/graviton/) es simplemente una familia de procesadores diseñados y desarrollados por Annapurna Labs (que es parte de Amazon Web Services) los cuales están enfocado en brindar la mejor combinación de **precio y rendimiento** para tus workloads en la nube que deben correr sobre Amazon EC2. 

Los procesadores Graviton están basados en la arquitectura de Arm llamadas [Neoverse N1](https://developer.arm.com/documentation/100616/0301) en el caso de Graviton 2, y [Neoverse V1](https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/neoverse-v1-platform-a-new-performance-tier-for-arm) en el caso de Graviton3.

Y si nos preguntamos por qué deberías usar estos procesadores, la respuesta es bastante simple:
- Las instancias de EC2 basadas en Graviton pueden costar hasta un **20% menos** que sus homólogas que usan la arquitectura x86; incluso pueden llegar hasta un **60% menos en costos** en el caso de las [C7g que usan Graviton3](https://aws.amazon.com/blogs/aws/new-amazon-ec2-c7g-instances-powered-by-aws-graviton3-processors/) y un **60% menos en uso de energia** en el caso de las nuevas instancias llamadas [C7gd, M7gd y R7gd](https://aws.amazon.com/blogs/aws/new-amazon-ec2-instances-c7gd-m7gd-and-r7gd-powered-by-aws-graviton3-processor-with-local-nvme-based-ssd-storage/)
- Lo otro es que hay muchos servicios dentro de Amazon Web Services que hoy soportan el uso de procesadores Graviton, y al final para el usuario, no habría mucha diferencia en funcionalidades; pero si se podría ver reflejado en los costos de los mismos. 

Para brindar un ejemplo concreto: si usamos [AWS OpenSearch Service](https://aws.amazon.com/opensearch-service/) y le decimos use instancias con procesadores Graviton 2 para su [nodos master](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/managedomains-dedicatedmasternodes.html) y además usamos los nuevos tipos de volumenes llamados [General Purpose SSD 3(gp3) de AWS EBS](https://aws.amazon.com/blogs/storage/migrate-your-amazon-ebs-volumes-from-gp2-to-gp3-and-save-up-to-20-on-costs/), los costos podrías verse reducidos dramáticamente. 

De hecho, en este [post del blog de AWS Cloud Financial Management](https://aws.amazon.com/blogs/aws-cloud-financial-management/better-together-graviton-2-and-gp3-with-amazon-opensearch-service/), Ryan Doty, Dan Alvarez, y Mukesh Kumar demuestran precisamente esta combinación y los resultados fueron sencillamente espectaculares:

![Figure 1. Cost Comparison Non-Graviton Vs Graviton2 based Amazon EC2 for OpenSearch](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e8vks9gemoks1uum4s46.jpg)

## Instancias basadas en AWS Graviton 

Hoy existen varios tipos de instancias EC2 basados en Graviton2, Graviton3 y Graviton3E (que es la última generación de esta familia de procesadores):

- [T4g](https://aws.amazon.com/ec2/instance-types/t4/): Estas instancias son a mi entender las ideales para realizar pruebas con Graviton. De hecho, hay una excelente oferta para ellas, debido a que hasta el 31 de diciembre del 2023, AWS te brindará hasta [750 horas gratis por mes](https://aws.amazon.com/ec2/faqs/#t4g-instances).

- [M7g/M7gd](https://aws.amazon.com/ec2/instance-types/m7g/): Estas son usadas para propósitos generales con un balance entre networking, CPU y memoria. Están basadas en Graviton3
- [C7g, C7gd y C7gn](https://aws.amazon.com/ec2/instance-types/c7g/): optimizadas para workloads con el CPU como HPC, decodificacion de video, y aceleracion de inferencia de Machine Learning. Estas instancias usan Graviton3 y Graviton3E
- [R7g, R7gd](https://aws.amazon.com/ec2/instance-types/r7g/): Estas instacias están optimizadas para workloads donde la memoria es más importante. Un buen ejemplo de ello es el uso del servicio [AWS ElastiCache para Redis](https://aws.amazon.com/about-aws/whats-new/2023/08/amazon-elasticache-m7g-r7g-graviton-3-nodes/) con este nuevo tipo de instancia 


## ¿Cómo comienzo a trabajar con Graviton hoy?
Entonces la pregunta del millón: **¿Cómo podemos comenzar a trabajar con Graviton hoy?** 

Si fuera a compatirle algunos tips, serían éstos:

1. Revisa primero la [guia de cómo comenzar con AWS Graviton disponible en Github](https://github.com/aws/aws-graviton-getting-started). El equipo de AWS ha hecho un increíble en recopilar en un solo lugar muy buenos recursos, así que sería prudente revisarla antes de comenzar a trabajar con ello

2. Indaga en tu empresa cuáles son los servicios que están usando hoy, y verifica si alguno de ellos ya tiene soporte para Graviton en el programa llamado [Graviton Fast Start](https://aws.amazon.com/ec2/graviton/fast-start/). 

3. Usa el servicio llamado [Porting Advisor for Graviton](https://github.com/aws/porting-advisor-for-graviton) para verificar algunas librerías que no son compatibles si vas a migrar tu codigo a Arm. Es muy fácil de usar y te aseguro que te podría ahorrar muchos dolores de cabeza

4. OJO: **no hagas una migración en caliente**. Primero prueba tu código en una pequeña instancia y ve de a poco 

5. Si usas Docker, una buena práctica es usar el Docker manifest para [crear imágenes que sean multi-arquitectura](https://dev.to/aws-builders/using-docker-manifest-to-create-multi-arch-images-on-aws-graviton-processors-1320) para que soporte tanto x86 como arm64 

Y por último quisiera dejarlo algunos de mis recursos favoritos relacionados con Graviton y servicios gestionados por AWS:
- [Consideraciones claves si quieres usar Graviton con Amazon RDS y Aurora](https://aws.amazon.com/blogs/database/key-considerations-in-moving-to-graviton2-for-amazon-rds-and-amazon-aurora-databases/)
- [Optimiza el TCO de Amazon ElastiCache para Redis usando Graviton](https://aws.amazon.com/blogs/database/optimize-the-cost-of-your-amazon-elasticache-for-redis-workloads/)
- [Consideraciones para trabajar con AWS EKS y Graviton](https://aws.amazon.com/blogs/containers/eks-on-graviton-generally-available/)
- [Ejecuta tus funciones de AWS Lambda sobre Arm y ten un ahorro de hasta 34% en términos de precio y rendimiento](https://aws.amazon.com/blogs/aws/aws-lambda-functions-powered-by-aws-graviton2-processor-run-your-functions-on-arm-and-get-up-to-34-better-price-performance/)
- [Multi-Architecture Container Builds with CodeCatalyst](https://aws.amazon.com/blogs/devops/multi-architecture-container-builds-with-codecatalyst/) 

## Conclusiones
Comenzar a trabajar con AWS Graviton pudiera ser más simple de lo que parece. Sólo es cuestión de comenzar a realizar las pruebas correspondientes, aprender en el proceso y no sólo ahorrar plata sino también tener workloads más eficientes en la nube de Amazon. 
Si tienen algún comentario, pregunta, no duden en escribirme a [marcos at awsgravitonweekly.com](mailto: marcos@awsgravitonweekly.com)