Enseñar AWS sin cuenta: S3, DynamoDB y SQS para cada alumno

Los servicios en la nube son la parte del software moderno que normalmente no se puede enseñar en clase. Leer sobre almacenamiento de objetos no es lo mismo que subir tú mismo un archivo a un bucket, y el camino habitual pasa por una cuenta de AWS, una tarjeta y una factura que nadie quiere explicar al departamento de administración. La mayoría de los centros nunca pasan del diagrama en la pizarra.

Aquí, el alumno pulsa «Iniciar» en la pestaña «Nube» y tiene tres servicios: un almacenamiento de objetos, una tabla NoSQL y una cola de mensajes, compatibles con las API de Amazon S3, DynamoDB y SQS. Así, boto3, el SDK de AWS para JavaScript, Java o Go y la AWS CLI funcionan con él sin cambios, y el código que un alumno escribe aquí es el mismo que escribiría para una cuenta real.

Es privado, desaparece cuando el alumno termina y es gratuito. No tenemos ninguna relación con Amazon Web Services y no es una cuenta de AWS: funciona con MiniStack, un emulador de código abierto, en la misma máquina que su aplicación. AWS, Amazon S3, DynamoDB y Amazon SQS son marcas comerciales de Amazon.com, Inc. o de sus filiales, y se citan aquí solo para indicar qué API implementa el entorno.

Lo que recibe un alumno

Un entorno para cada uno, en la misma red privada que su aplicación, su base de datos y su terminal. Todo lo que se ejecuta en la sesión accede a él con el nombre `cloud`, así que la configuración de un tutorial funciona sin cambios y no hay ninguna URL que copiar.

Al iniciarlo se definen las variables que cualquier SDK de AWS ya lee: `AWS_ENDPOINT_URL`, una clave de acceso y un secreto creados para él, y `AWS_REGION`. Por eso `boto3.client("s3")` sin argumentos encuentra el entorno, sin nada que configurar ni ninguna URL que copiar.

El entorno empieza vacío, como una cuenta nueva: el alumno crea sus propios buckets, tablas y colas, desde su código o en la pestaña «Nube», y llamar a `create_bucket` antes de `put_object` forma parte de lo que enseña el ejercicio.

Las credenciales se generan, nunca se eligen, y se muestran en la página para que el alumno pueda ver qué significan las variables.

  1. Abrir la pestaña «Nube». En «Despliegues», junto a «Aplicación» y «Base de datos». Un entorno por alumno.
  2. Pulsar «Iniciar». El entorno está listo en unos segundos, vacío, como una cuenta nueva.
  3. Leer las variables. El punto de conexión, el par de claves y la región aparecen en la página. Cualquier SDK de AWS los lee por sí solo del entorno.
  4. Escribir el código. En su aplicación o en el terminal: `aws s3 ls`, `boto3.client("s3")`, o el SDK de JavaScript, Java o Go. Nada que configurar.
  5. Ver lo que ha creado. La consola, en la misma página, muestra los buckets, las claves, las tablas, los elementos y los mensajes en cola a medida que su código los escribe.
La pestaña «Nube» de un alumno, con su sesión formada por una aplicación, una base de datos, un entorno en la nube y un terminal, y un botón para crear un entorno
Un entorno para cada uno, junto a su aplicación y su base de datos, en la misma red privada.

Una consola en el navegador, en lugar de la consola de AWS

Un entorno en marcha tiene una consola en la página, con tres pestañas: «Almacén de objetos (S3)», «Base de datos NoSQL (DynamoDB)» y «Cola (SQS)». Cada una muestra todo lo que hay de ese tipo en el entorno, buckets, tablas o colas, con un botón «Eliminar» al lado de cada uno y un campo para añadir otro; elige uno y se abre debajo. «Almacén de objetos» muestra todo lo que hay en el bucket elegido por su clave completa, con una descarga al lado de cada objeto, admite subir un archivo con una clave que escribe el alumno, y crea y elimina buckets. «Base de datos NoSQL» muestra las tablas, analiza una (Scan) y edita los elementos de uno en uno. «Cola» indica cuántos mensajes tiene cada cola y permite enviar un mensaje, ver lo que está esperando, eliminar uno o vaciarla entera.

El almacenamiento de objetos muestra claves, no carpetas. Las carpetas no existen en él: lo que parece una carpeta es el conjunto de claves que empiezan igual, y photos/2026/cat.png es un único nombre que contiene barras. Eso es lo que devolverá su propio list_objects_v2, así que eso es lo que muestra la página. Tampoco hay nada ahí que edite o elimine un archivo: cambiar el contenido de un bucket es precisamente para lo que sirve la aplicación que está escribiendo. Eso sí, eliminar un bucket se lleva todo lo que contiene, y antes se pide confirmación, indicando lo que se pierde.

Mirar una cola no saca nada de ella. Los mensajes vuelven a la cola al instante, así que un alumno puede observar su cola mientras su propio programa la lee. Eso es justo lo que una consola suele hacer mal, y lo que hace que un programa que funciona parezca roto.

Además de mostrar, crea: un bucket, una tabla con la clave que la organiza y una cola, cada uno creado y eliminado desde las mismas tres pestañas. Así, un alumno puede preparar primero su almacenamiento a mano y escribir el código después, que es el orden que siguen la mayoría de los tutoriales.

Un elemento se muestra en la forma tipada que la tabla almacena de verdad, porque es lo que su propio código leerá.

Los archivos de hasta 1,0 MB se suben a través de la consola y los de hasta 2,0 MB se descargan; un listado muestra los primeros 200 objetos, un análisis los primeros 100 elementos y una vista previa diez mensajes. Su propio programa no tiene ninguno de esos límites, y el terminal está para todo lo que sea más grande.

La AWS CLI, en el terminal del navegador

«Abrir terminal», desde cualquiera de las tres pestañas, da un shell real junto a la sesión con la AWS CLI ya apuntando al entorno: `aws s3 ls`, `aws s3 cp`, `aws dynamodb scan` y `aws sqs send-message` funcionan sin el paso `configure` ni `--endpoint-url`. Todo lo que la consola no ofrece se puede hacer ahí, y un archivo grande está mejor ahí que en el navegador.

La consola sube archivos de hasta 1,0 MB y descarga hasta 2,0 MB. Su propio programa no tiene ese límite: escribe directamente en el entorno.

Qué se conserva y durante cuánto tiempo

Todo el entorno se guarda como un único archivo comprimido al detenerse y se restaura al iniciarse, hasta 25 MB entre todo lo que contiene. La página muestra cuánto ocupa y avisa antes del límite, no después, porque no hay forma de dejar un almacenamiento de objetos en solo lectura y lo honesto es verlo venir.

Usa la misma asignación que una base de datos, con la misma garantía, el mismo límite y la misma regla de inactividad, así que un entorno que se deja en marcha no consume en silencio la jornada de nadie.

Encargarlo como trabajo

Marca el entorno en el formulario de despliegue y se inicia con la aplicación, con las variables ya definidas. Así, un trabajo puede ser «una aplicación Flask que guarda los archivos subidos en un bucket de S3», «un worker que lee una cola de SQS» o «una página que usa una tabla de DynamoDB»: tareas habituales en la industria que antes no se podían encargar sin una cuenta de AWS por alumno.

Quien califica una entrega desplegada recibe el entorno del alumno tal como lo dejó, y no se vuelve a guardar nunca, así que probar la aplicación no cambia nada de lo que se califica.

Preguntas frecuentes

¿Pueden los alumnos aprender AWS sin una cuenta de AWS?
Sí. Cada alumno recibe un almacenamiento de objetos, una tabla NoSQL y una cola de mensajes que implementan las API de Amazon S3, DynamoDB y SQS, así que escribe el mismo código que escribiría para AWS, con boto3 o con los SDK y la CLI de AWS. No hay cuenta de AWS, ni tarjeta de crédito, ni factura. Funciona con MiniStack, un emulador de código abierto, en la misma máquina que su aplicación, y no es una cuenta de AWS: nada de esto está expuesto a Internet.
¿Qué SDK debe instalar un alumno?
El SDK de AWS habitual para su lenguaje: boto3 para Python, el SDK de AWS para JavaScript, Java o Go, o la AWS CLI v2 en el terminal del navegador. Todos leen AWS_ENDPOINT_URL, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY y AWS_REGION del entorno, y el entorno en la nube define las cuatro, así que el código de un tutorial funciona sin cambios y sin nada que configurar.
¿Qué servicios de AWS admite?
Los tres que necesita un primer curso: Amazon S3 para objetos, DynamoDB para una tabla NoSQL y Amazon SQS para una cola, que además son los tres que usa esta misma plataforma. Todo lo demás que emule la imagen de MiniStack viene incluido, pero estos tres son los que muestra la consola y los que admitimos.
¿Tiene relación con Amazon Web Services?
No. MitsuruTech no está afiliada a Amazon Web Services ni cuenta con su respaldo o patrocinio. AWS, Amazon S3, DynamoDB y Amazon SQS son marcas comerciales de Amazon.com, Inc. o de sus filiales, y se citan aquí solo para indicar qué API implementa el entorno, como hace cualquier tutorial o emulador.
¿Puede un alumno ver el entorno de otro?
No. Un entorno está en la red privada de su propietario, sin entrada ni salida, así que nada fuera de su sesión puede acceder a él, ni siquiera el resto de este sitio. La consola funciona pidiendo a su propia sesión que haga la llamada.
¿Un invitado también tiene uno?
Sí. Un invitado puede tener un entorno en la nube y una base de datos a la vez: el entorno no cuenta para el límite de bases de datos, y «Desplegar este ejemplo» en la página «Despliegues» crea los dos. La cuenta de un invitado se conserva 24 horas desde la última vez que se usó y cada uno de sus despliegues se ejecuta como máximo 30 minutos, lo que también acota el entorno. «Conservar esta cuenta» la convierte en una cuenta de verdad.