Buenas Prácticas para SDK en la Nube
Un uso seguro, eficiente y bien delimitado de los SDK de AWS mantiene los servicios de Python rápidos bajo carga y limita el radio de explosión cuando las credenciales se filtran o los scripts apuntan incorrectamente a una cuenta.
Cómo Usar Esta Lista
- Aplica en cada nueva integración de boto3 antes del tráfico de producción.
- Aplica la configuración de IAM y reintentos a través de una biblioteca interna compartida, no copiando y pegando por servicio.
- Revisa después de incidentes relacionados con limitaciones (throttling), acceso a cuentas incorrectas o exposición de credenciales.
- Compara con Patrones de Credenciales y Sesiones para la configuración de identidad.
A - Credenciales e Identidad
- No uses claves de acceso de larga duración en código o imágenes. Usa roles IAM, perfiles SSO o federación OIDC de CI.
- Llama a
sts.get_caller_identity()en CLIs destructivas. Confirma la cuenta antes de las operaciones de eliminación. - Delimita las políticas de IAM a los ARN de recursos y las acciones requeridas. Evita acciones
*en recursos*. - Usa perfiles de AWS separados por cuenta.
AWS_PROFILEdocumentado en runbooks y trabajos de CI. - Rota y audita las claves de acceso si quedan usuarios heredados. Prefiere un plan de migración a roles SSO.
B - Clientes, Sesiones y Rendimiento
- Crea
boto3.Sessionuna vez por contexto de proceso. Reutiliza clientes entre solicitudes en workers y manejadores de Lambda. - Establece
region_nameexplícito en las sesiones. Evita redirecciones entre regiones ambiguas y errores de firma. - Ajusta los reintentos y tiempos de espera de
botocore.config.Config. Adapta a la latencia p99 del servicio y al comportamiento de limitación. - Usa paginadores para todas las operaciones de listado. Nunca asumas que una sola página está completa.
- Incrementa
max_pool_connectionspara cargas paralelas. Previene la inanición del pool de conexiones.
C - Datos y Seguridad
- Obtén secretos de Secrets Manager/SSM con caché TTL. No en cada solicitud HTTP sin límites.
- Nunca registres
SecretString, URLs pre-firmadas o encabezados de autenticación. Registra solo ARN y IDs de solicitud. - Usa SSE y bloquea el acceso público para buckets S3. URLs pre-firmadas con caducidad corta para acceso externo.
- Valida códigos de error, no cadenas de mensajes. Ramifica según
ClientError.response["Error"]["Code"]. - Mantén las cargas útiles por debajo de los límites del servicio. Almacena blobs grandes en S3; pasa referencias en mensajes SQS.
D - Fiabilidad
- Maneja la limitación con backoff y jitter. Combina los reintentos de botocore con límites a nivel de aplicación.
- Haz que los consumidores sean idempotentes. SQS y Lambda pueden entregar duplicados; usa claves de deduplicación.
- Usa DLQs y alarmas en la profundidad de la cola. Los mensajes venenosos no deben girar para siempre.
- Elimina mensajes SQS solo después de un procesamiento exitoso. Ajusta el tiempo de espera de visibilidad al p99 del manejador.
- Prueba con moto/LocalStack en pruebas unitarias. Pruebas de humo en cuentas sandbox para rutas de integración.
E - Operaciones
- Fija las versiones de boto3/botocore en los archivos de bloqueo (lockfiles). Comportamiento reproducible entre portátiles y CI.
- Envuelve las llamadas a la nube con logs estructurados. Incluye servicio, operación, latencia y ID de correlación.
- Expón métricas de CloudWatch para las tasas de error del SDK. Alerta sobre picos de
AccessDenieddespués de cambios en IAM. - Documenta qué roles usa cada servicio. El personal de guardia no debe adivinar el rol de ejecución a las 3 a.m.
- Prefiere IaC para la creación de recursos. Usa boto3 en aplicaciones para operaciones en tiempo de ejecución, no para scripts administrativos únicos sin revisión.
Preguntas Frecuentes
¿Cuál es la primera solución para ThrottlingException?
Backoff con jitter, reduce la concurrencia y verifica la configuración de reintentos adaptativos antes de aumentar los límites.
¿cliente vs recurso?
Clientes para la API completa y las operaciones más recientes; recursos para código de aplicación ergonómico de S3/DynamoDB; elige según el sitio de la llamada.
¿Cómo comparto ayudantes de boto3?
Paquete interno con fábrica de sesiones, configuración de reintentos y decoradores de registro; versiona con el monorepo de la aplicación.
¿Deben las aplicaciones FastAPI llamar a AWS de forma síncrona?
Sí, para llamadas rápidas con pool ajustado; descarga escaneos largos a workers en segundo plano o a un threadpool.
¿Cómo elijo las regiones?
Co-localiza con los datos y los usuarios; documenta la región en la fábrica de sesiones; multi-región requiere un diseño explícito de conmutación por error.
¿Son seguras las URLs pre-firmadas?
Seguras con TTL corto y prefijo de clave de mínimo privilegio; trata una URL filtrada como una fuga de credencial temporal.
¿Cómo pruebo los cambios de IAM?
Simulador de políticas más prueba de integración en sandbox asumiendo el nuevo rol antes de la promoción a producción.
¿Qué pasa con multi-cloud?
Interfaz adaptadora por capacidad (almacén de objetos, cola); mantén los SDK del proveedor en el límite de la infraestructura.
¿Cómo evito sorpresas en los costos?
Pagina con MaxItems en scripts de desarrollo; alarmas sobre la capacidad consumida de DynamoDB y las métricas de solicitudes de S3.
¿Cuándo es boto3 la herramienta incorrecta?
Aprovisionamiento de infraestructura a gran escala: usa Pulumi/Terraform; boto3 para operaciones en tiempo de ejecución y garantías pequeñas e idempotentes.
Relacionado
- Conceptos Básicos de Boto3 - sesiones, clientes, recursos
- Patrones de Credenciales y Sesiones - roles y perfiles
- Reintentos, Paginación y Limitación - llamadas resilientes
- Secrets Manager y SSM - recuperación de secretos
- Buenas Prácticas de Automatización de Infraestructura - complemento de IaC
Versiones de la Pila: Esta página fue escrita 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+.