Conceptos básicos de boto3
10 ejemplos para empezar con los SDK en la nube: 7 básicos y 3 intermedios.
Busca en todas las páginas de la documentación
10 ejemplos para empezar con los SDK en la nube: 7 básicos y 3 intermedios.
uv venv && source .venv/bin/activate
uv pip install "boto3>=1.35"
aws configure --profile dev # o export AWS_PROFILE=dev~/.aws/credentials, variables de entorno o rol de IAM de instancia/tarea.boto3.Session es el punto de entrada para la resolución de región, perfil y credenciales.
import boto3
session = boto3.Session(profile_name="dev", region_name="us-east-1")
print(session.region_name)profile_name se mapea a las secciones de ~/.aws/credentials.region_name explícito: los clientes globales aún necesitan una región de firma.Relacionado: Patrones de credenciales y sesiones - configuraciones de mínimo privilegio
Los clientes exponen la API bruta de AWS: un método por acción de API.
import boto3
s3 = boto3.client("s3")
resp = s3.list_buckets()
print([b["Name"] for b in resp.get("Buckets", [])])Relacionado: S3 - cargas, descargas, URLs pre-firmadas
Los recursos proporcionan una capa orientada a objetos sobre los clientes.
import boto3
s3 = boto3.resource("s3")
for bucket in s3.buckets.all():
print(bucket.name)Bucket, Object, Table envuelven flujos de trabajo comunes.Relacionado: S3 - operaciones de transmisión y objetos
Fija la región para evitar latencias interregionales sorprendentes o un comportamiento incorrecto de la partición.
import boto3
session = boto3.Session(region_name="eu-west-1")
dynamodb = session.client("dynamodb")
print(dynamodb.meta.region_name)meta.region_name confirma dónde se firman las solicitudes.endpoint_url solo para LocalStack, puntos de conexión de VPC o pasarelas personalizadas.Relacionado: Reintentos, paginación y limitación - llamadas robustas a escala
boto3 resuelve las credenciales automáticamente cuando no pasas claves en el código.
import boto3
session = boto3.Session()
creds = session.get_credentials()
print(creds.method if creds else "no credentials")AWS_PROFILE selecciona un perfil con nombre sin codificarlo en el código fuente.Relacionado: Secrets Manager y SSM - obtención de secretos en tiempo de ejecución
Los errores de AWS llegan como botocore.exceptions.ClientError con códigos estructurados.
import boto3
from botocore.exceptions import ClientError
s3 = boto3.client("s3")
try:
s3.head_bucket(Bucket="definitely-missing-bucket-xyz")
except ClientError as exc:
code = exc.response["Error"]["Code"]
print(code)Error.Code (404, NoSuchBucket, AccessDenied), no según cadenas de mensajes.response refleja las cargas útiles de error XML/JSON de AWS.ResponseMetadata para tickets de soporte de AWS.Relacionado: Mejores prácticas de SDK en la nube - reglas seguras de manejo de errores
Crea clientes una vez por proceso, no por solicitud en bucles intensivos.
import boto3
_SESSION = boto3.Session()
_SQS = _SESSION.client("sqs")
def send_message(queue_url: str, body: str) -> None:
_SQS.send_message(QueueUrl=queue_url, MessageBody=body)Relacionado: SQS y SNS - patrones de colas y temas
Deja de crear bucles NextToken manualmente: usa los paginadores integrados.
import boto3
s3 = boto3.client("s3")
paginator = s3.get_paginator("list_objects_v2")
for page in paginator.paginate(Bucket="my-bucket", Prefix="logs/"):
for obj in page.get("Contents", []):
print(obj["Key"], obj["Size"])PaginationConfig={"MaxItems": 100} para limitar los scripts de desarrollo.Relacionado: DynamoDB - paginación de consultas
Espera hasta que AWS finalice la creación asíncrona antes de los pasos dependientes.
import boto3
ec2 = boto3.client("ec2")
waiter = ec2.get_waiter("instance_running")
instance_id = "i-0123456789abcdef0"
waiter.wait(InstanceIds=[instance_id])time.sleep en scripts de aprovisionamiento.WaiterConfig={"Delay": 5, "MaxAttempts": 40} para recursos de larga duración.Relacionado: Aprovisionamiento de recursos en la nube - flujos de trabajo de arranque
Ajusta los reintentos y los tiempos de espera para los patrones de tráfico de producción.
import boto3
from botocore.config import Config
config = Config(
retries={"max_attempts": 10, "mode": "standard"},
connect_timeout=5,
read_timeout=60,
)
s3 = boto3.client("s3", config=config)mode: adaptive ayuda bajo limitación sostenida; standard es un valor predeterminado predecible.Config a cada cliente de una clase de servicio.Relacionado: Reintentos, paginación y limitación - estrategias de limitación
Versiones de la pila: Esta página se escribió para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ y uv 0.6+.
Revisado por Chris St. John·Última actualización: 19 jul 2026