¿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

Lo que vende la nube: servicios y regiones

Después de esta lección: Puedo decir qué son una región, un servicio y una llamada a la API.

Lección de 50 minSin comandos

Una foto subida es una petición web

Una tienda de Valencia deja que sus clientes suban la foto de un artículo defectuoso. La foto se guarda en un bucket de S3, un espacio para archivos en la nube. Tu código no entra en ninguna máquina para guardarla. Envía una petición por la web y lee la respuesta.

Esta lección explica qué es un servicio en la nube, dónde funciona y quién cuida de qué.

Al final de esta lección

Nota

Puedo decir qué son una región, un servicio y una llamada a la API.

Palabras clave

PalabraQué significaEjemplo
Serviciouna herramienta ya hecha que usas por la web
Llamada a la APIuna petición a un servicio y su respuesta
Regiónla zona del mundo donde funciona un servicioeu-south-2
Bucketun contenedor con nombre para archivos en S3
Responsabilidad compartidael proveedor y el cliente cuidan cada uno una parte del sistema

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Lo que este módulo no es

Nota

No necesitas una cuenta de AWS y no se despliega nada. Nunca escribirás una clave, una contraseña ni un número de cuenta reales. Tampoco es una lección sobre costes ni facturas. Lees, sin conexión, respuestas con la forma de las reales y escribes Python que las trata.

Un servicio es una API que llamas

Un proveedor de nube tiene ordenadores enormes y alquila lo que hacen. Cada herramienta alquilada es un servicio. S3 guarda archivos. SQS guarda mensajes en una cola. DynamoDB guarda elementos en tablas.

Usas un servicio con una llamada a la API: una petición que dice el nombre de la llamada, como list_objects_v2, y los datos que necesita. La respuesta vuelve en forma de datos.

Una llamada y su respuesta

Código: python
call = {"service": "s3", "operation": "list_objects_v2", "Bucket": "tienda-fotos"}
answer = {
    "Name": "tienda-fotos",
    "KeyCount": 2,
    "IsTruncated": False,
    "Contents": [
        {"Key": "defectos/cafetera.png", "Size": 2048, "StorageClass": "STANDARD"},
        {"Key": "defectos/tostadora.png", "Size": 3072, "StorageClass": "STANDARD"},
    ],
}
print("servicio:", call["service"])
print("llamada:", call["operation"])
print("claves:", answer["KeyCount"])
for item in answer["Contents"]:
    print(item["Key"], item["Size"])
# Cambia el Size de la tostadora a 5000 y pulsa Run otra vez.

Una llamada fallida también responde

No todas las llamadas funcionan. Puede faltar una clave o no existir un bucket. Entonces el servicio responde con un error: un Code que nombra el problema y un estado HTTP.

Tu código debe mirar primero si hay error. Una prueba como "Contents" in answer solo vale si la llamada funcionó.

Distinguir una buena respuesta de un error

Código: python
good = {"KeyCount": 1, "Contents": [{"Key": "leeme.txt", "Size": 5}]}
bad = {"error": {"Code": "NoSuchBucket", "HTTPStatusCode": 404}}
for answer in [good, bad]:
    if "error" in answer:
        print("falló:", answer["error"]["Code"], answer["error"]["HTTPStatusCode"])
    else:
        print("funcionó, claves:", answer["KeyCount"])
# Cambia "NoSuchBucket" por "NoSuchKey" y pulsa Run otra vez.

Un error frecuente

Advertencia

Mucha gente cree que una respuesta vacía es un error. No lo es. Si pides a DynamoDB un elemento que no existe, responde {} con un buen estado. Busca una entrada error, con su Code. Una respuesta vacía significa «no encontré nada».

Una región es donde funciona un servicio

Un proveedor tiene centros de datos en muchos lugares. Una región es una de esas zonas, como eu-south-2, que está en España. Eliges la región al crear un bucket y los archivos se quedan allí.

Elige una región cercana a tus usuarios para que las respuestas lleguen rápido. Las respuestas también dicen en qué región está el bucket.

Leer la región de cada bucket

Código: python
answer = {
    "Buckets": [
        {"Name": "tienda-fotos", "BucketRegion": "eu-south-2", "BucketArn": "arn:aws:s3:::tienda-fotos"},
        {"Name": "tienda-copias", "BucketRegion": "us-east-1", "BucketArn": "arn:aws:s3:::tienda-copias"},
    ],
    "Owner": {"DisplayName": "tienda", "ID": "id-propietario"},
}
for bucket in answer["Buckets"]:
    print(bucket["Name"], "está en", bucket["BucketRegion"])
# Muestra solo los buckets de eu-south-2: añade un if dentro del bucle.

Proveedor y cliente se reparten el trabajo

El proveedor cuida los edificios, las máquinas y el programa del servicio. Tú cuidas lo que guardas en él y quién puede usarlo.

Esto es la responsabilidad compartida. Si dejas que cualquiera lea un bucket, esa fue tu decisión. Si un centro de datos se queda sin luz, le toca al proveedor resolverlo.

Quién cuida de qué

CosaLa cuida
El edificio y la electricidadEl proveedor
El programa de S3 en síEl proveedor
Qué archivos subesTú
Quién puede leer un bucketTú
El código que llama al servicioTú

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.