SDKs
📘 ¿Qué es un AWS SDK?
El AWS SDK (Software Development Kit) es una colección de bibliotecas que permite interactuar programáticamente con los servicios de AWS desde tu lenguaje de programación favorito.
-
Permite automatizar tareas, crear aplicaciones cloud-native y manejar infraestructura directamente desde el código.
-
Soporta múltiples lenguajes: Python, JavaScript/TypeScript, Java, Go, .NET, Ruby, PHP, etc.
🌐 Lenguajes y SDKs comunes
| Lenguaje | SDK | Instalación |
|---|---|---|
| ✅ Python | Boto3 | pip install boto3 |
| ✅ JavaScript | AWS SDK v3 (modular) | npm install @aws-sdk/client-s3 |
| ✅ Java | AWS SDK for Java v2/v1 | Gradle/Maven |
| Go | AWS SDK for Go v2 | go get github.com/aws/aws-sdk-go-v2 |
| .NET | AWS SDK for .NET | NuGet |
🔐 Autenticación
Todos los SDKs usan credenciales de AWS desde las mismas fuentes que la CLI:
-
Variables de entorno (
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY) -
Archivos
~/.aws/credentials -
Roles asignados a instancias (EC2, Lambda, etc.)
-
AWS SSO o STS (para sesiones temporales)
✅ Puedes usar los mismos perfiles configurados con
aws configure.
🧪 Ejemplos prácticos (por lenguaje)
🐍 Python (Boto3)
import boto3
# Crear cliente de S3
s3 = boto3.client('s3')
# Listar buckets
for bucket in s3.list_buckets()['Buckets']:
print(bucket['Name'])
# Subir archivo
s3.upload_file('local.txt', 'mi-bucket', 'remoto.txt')
🌐 JavaScript (Node.js – AWS SDK v3)
import { S3Client, ListBucketsCommand } from "@aws-sdk/client-s3";
const s3 = new S3Client({ region: "us-east-1" });
const run = async () => {
const data = await s3.send(new ListBucketsCommand({}));
data.Buckets.forEach(bucket => console.log(bucket.Name));
};
run();
☕ Java (AWS SDK for Java v2)
S3Client s3 = S3Client.builder().region(Region.US_EAST_1).build();
ListBucketsResponse buckets = s3.listBuckets();
for (Bucket b : buckets.buckets()) {
System.out.println(b.name());
}
🧠 Ventajas de usar el SDK
| Ventaja | Descripción |
|---|---|
| Integración directa | Usa servicios AWS como parte de tu app (subir archivos, emails, etc.) |
| Automatización completa | Sin depender de scripts externos o consola |
| Alta portabilidad | Funciona en local, contenedores, servidores o funciones Lambda |
| Soporte para IAM | Hereda permisos del entorno o roles asignados |
| Modularidad (SDK v3) | Importa solo los servicios que usas (JavaScript) |
📘 Principales servicios usados con SDK
| Servicio | Uso común desde SDK |
|---|---|
| S3 | Subida/descarga/listado de archivos |
| DynamoDB | Inserciones, lecturas y escaneos |
| EC2 | Lanzar/terminar instancias, consultar estado |
| Lambda | Invocar funciones desde apps |
| SNS/SQS | Publicar mensajes o recibirlos |
| STS | Obtener credenciales temporales |
| SSM | Acceder a parámetros seguros o iniciar sesiones con instancias |
🔧 SDK vs CLI vs CloudFormation
| Herramienta | Ideal para… | Lenguaje |
|---|---|---|
| SDK | Integrar AWS con apps dinámicamente | Código (Python, JavaScript, etc.) |
| CLI | Automatización rápida desde terminal | Bash / Shell |
| CloudFormation | Infraestructura declarativa y reutilizable | YAML / JSON |
🔐 Seguridad y buenas prácticas
-
Nunca expongas tus claves en código. Usa perfiles o IAM roles.
-
Usa
try/excepto control de errores según lenguaje. -
Usa clientes regionales (
region='us-east-1') explícitamente. -
Reutiliza clientes para evitar latencia.
-
En proyectos grandes: abstrae la lógica AWS en módulos reutilizables.
📚 Documentación oficial
🎓 Preguntas tipo certificación
-
¿Qué herramienta permite invocar una función Lambda desde una app?
- ✅ SDK (por ejemplo:
boto3.client('lambda').invoke(...))
- ✅ SDK (por ejemplo:
-
¿Dónde busca el SDK las credenciales?
- ✅ Variables de entorno, archivo
~/.aws/credentials, IAM roles.
- ✅ Variables de entorno, archivo
-
¿Cuál es una ventaja del SDK sobre la CLI?
- ✅ Se puede usar directamente dentro del código fuente de una aplicación.
📄 Cheatsheet (Python - Boto3)
# EC2
ec2 = boto3.resource('ec2')
instances = ec2.instances.filter(Filters=[{'Name': 'instance-state-name', 'Values': ['running']}])
# DynamoDB
dynamo = boto3.resource('dynamodb')
table = dynamo.Table('MiTabla')
response = table.get_item(Key={'id': '123'})
# SQS
sqs = boto3.client('sqs')
sqs.send_message(QueueUrl=URL, MessageBody='Hola desde SDK')