¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Fundamentos de los servicios en la nube

Aquí está la lección completa para leer. Crea una cuenta gratuita para practicarla en un laboratorio en vivo.

Laboratorio de contenedores14 min de lectura14 comandos

¿Adónde va una foto cuando la subes?

Una aplicación de fotos no guarda tu imagen en un solo teléfono. La envía a un servicio de almacenamiento en la nube, deja una nota en una cola para que otro programa la reduzca y la anota en una tabla. Esos tres trabajos son los de S3, SQS y DynamoDB.

Al final de esta lección

Nota

Puedo usar la línea de comandos de AWS para guardar, poner en cola y consultar datos en una nube de práctica.

Palabras clave

  • Bucket (cubo): un contenedor con nombre para archivos en S3.
  • Objeto: un archivo guardado, que se encuentra por su clave.
  • Cola: mensajes que esperan, en orden, a ser atendidos.
  • Tabla: elementos guardados bajo una clave, en DynamoDB.
  • Emulador: una copia que se comporta como un servicio sin ser el real.

Para empezar: lo que ya sabes

Nota

Responde mentalmente. 1. ¿Para qué sirve el nombre de un archivo? 2. ¿Para qué sirve una cola en una parada de autobús? 3. ¿Qué es una fila de una tabla de una base de datos? Respuestas: el nombre con el que encuentras el archivo; para atender a la gente por orden; un registro.

Antes de empezar

Nota

Pulsa Iniciar el laboratorio en la barra de arriba de la lección y espera a que diga que está en marcha. La pila es un servicio llamado cloud, y el terminal llega a él por ese nombre. Aquí solo están activados S3, SQS y DynamoDB: pide cualquier otro servicio, Lambda por ejemplo, y recibes un error. Lo que creas se conserva cuando el laboratorio se detiene y se inicia de nuevo. Cada botón Ejecutar de abajo escribe su orden en el terminal de tu laboratorio, una detrás de otra en la misma sesión. Para verlas o escribir las tuyas, pulsa Abrir el terminal (pestaña nueva) en la barra.

1. Un bucket guarda objetos

El primer comando da al comando aws una clave inventada, porque la pila no comprueba ninguna, la región us-east-1 y la dirección de tu propia pila, y no imprime nada. mb crea un bucket e imprime make_bucket: lab-bucket. El siguiente le envía el texto hello cloud con la clave hello.txt y no imprime nada. Copiar a - imprime el objeto: hello cloud. El último pide una clave que nunca se guardó. La respuesta es un error que dice NoSuchKey y The specified key does not exist., igual que en AWS de verdad.

Comando
export AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test AWS_DEFAULT_REGION=us-east-1 AWS_ENDPOINT_URL=http://cloud:4566

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
aws s3 mb s3://lab-bucket

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
echo "hello cloud" | aws s3 cp - s3://lab-bucket/hello.txt

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
aws s3 cp s3://lab-bucket/hello.txt -

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
aws s3api get-object --bucket lab-bucket --key nothing.txt /dev/null

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

2. Una cola guarda mensajes hasta que se borran

El primer comando crea una cola y guarda su dirección en Q, para que nunca la escribas. El segundo envía un mensaje e imprime un MD5OfBody y un MessageId. El tercero lo recibe, lo imprime bajo Messages con su Body, first message, y guarda la respuesta en reply.json. El cuarto saca su ReceiptHandle, la prueba de que lo recibiste, y lo guarda en H. delete-message no imprime nada. Mucha gente piensa que recibir saca el mensaje de la cola. Solo lo oculta un rato, y vuelve y se atiende dos veces si no lo borras.

Comando
Q=$(aws sqs create-queue --queue-name lab-queue --query QueueUrl --output text)

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
aws sqs send-message --queue-url $Q --message-body "first message"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
aws sqs receive-message --queue-url $Q | tee reply.json

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
H=$(grep -o '"ReceiptHandle": "[^"]*"' reply.json | cut -d'"' -f4)

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
aws sqs delete-message --queue-url $Q --receipt-handle "$H"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

3. Una tabla guarda elementos bajo una clave

El primer comando crea una tabla Books, cuya clave es un author y un title, e imprime "ACTIVE". El segundo añade dos elementos en una petición e imprime un UnprocessedItems vacío. get-item pide un elemento por su clave completa y lo imprime, con cada valor envuelto en su tipo: S para texto y N para número. query lee todos los elementos de un autor e imprime Count 2 y los dos títulos. Pide a get-item una clave que nunca añadiste: no imprime nada, porque aquí un elemento que falta es una respuesta vacía, no un error.

Comando
aws dynamodb create-table --table-name Books --attribute-definitions AttributeName=author,AttributeType=S AttributeName=title,AttributeType=S --key-schema AttributeName=author,KeyType=HASH AttributeName=title,KeyType=RANGE --billing-mode PAY_PER_REQUEST --query TableDescription.TableStatus

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
aws dynamodb batch-write-item --request-items '{"Books":[{"PutRequest":{"Item":{"author":{"S":"Ada"},"title":{"S":"Notes"},"year":{"N":"1843"}}}},{"PutRequest":{"Item":{"author":{"S":"Ada"},"title":{"S":"Sketch"},"year":{"N":"1842"}}}}]}'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
aws dynamodb get-item --table-name Books --key '{"author":{"S":"Ada"},"title":{"S":"Notes"}}'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
aws dynamodb query --table-name Books --key-condition-expression "author = :a" --expression-attribute-values '{":a":{"S":"Ada"}}' --query '{Count:Count,Titles:Items[].title.S}'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comprobación final

Consejo

Responde sin mirar atrás. 1. ¿Qué encuentra un objeto en un bucket? 2. ¿Qué error da S3 para una clave que no existe? 3. ¿Qué hay que hacer con un mensaje cuando ya se atendió? 4. ¿Es esta pila el AWS de verdad? Respuestas: su clave; NoSuchKey; borrarlo; no, es un emulador, una copia de práctica.

Para docentes

Consejo

Esta lección es un pequeño ejemplo de lección que se hace en un laboratorio: los pasos y los botones Ejecutar son la lección, y el laboratorio es la copia de cada estudiante. El laboratorio es un servicio pequeño y un volumen con nombre, y nada aquí se corrige solo: el estudiante entrega las respuestas de su propia sesión, un bucket con un objeto enviado, listado y leído, una cola con un mensaje enviado, recibido y borrado, una tabla con un elemento añadido, leído y consultado, y el error de una clave que no existe, con una frase sobre lo que MiniStack no es. Puntos clave: 1. S3 guarda objetos bajo claves en un bucket. 2. Una cola guarda mensajes, y un mensaje termina al borrarlo. 3. DynamoDB guarda elementos bajo una clave, y una consulta lee todos los elementos bajo una parte de ella. 4. Una clave de S3 que falta es un error y un elemento de DynamoDB que falta es una respuesta vacía. 5. MiniStack es un emulador, no AWS. Error frecuente: creer que recibir quita el mensaje. Material: el laboratorio y su terminal. Consejo: pide a los estudiantes que predigan cada respuesta antes de pulsar Ejecutar. Lambda está desactivado a propósito, porque sus funciones ejecutarían el código de los estudiantes dentro de la pila. Los identificadores de mensaje, los identificadores de recepción, las horas y la dirección de la cola difieren de los de AWS de verdad y de una ejecución a otra. Cópiala en tu propio módulo y modifícala, o crea una desde cero con el menú Laboratorio del constructor de lecciones.

Sobre este laboratorio y su código: Laboratorio Cloud: practica con buckets S3, colas SQS y tablas DynamoDB desde la línea de comandos de AWS

¿Enseñas a una clase? Asigna estas lecciones a tus estudiantes con calificación y un laboratorio para cada uno.