Configuración Inicial del Entorno de Desarrollo con Python y AWS Bedrock
Aprende a crear, asegurar y optimizar tu entorno Python para interactuar con los modelos de IA de AWS Bedrock de forma profesional.
1. Requisitos previos
- Cuenta activa en AWS con acceso a AWS Bedrock.
- Python ≥ 3.9 (recomendado 3.11).
- AWS CLI 2.x.
- Git y un editor/IDE (VS Code, PyCharm, etc.).
2. Creación del proyecto y gestión de dependencias
Utiliza venv o conda para aislar las dependencias. En este ejemplo usamos venv:
# Crear carpeta del proyecto
mkdir bedrock-demo && cd bedrock-demo
# Crear entorno virtual
python -m venv .venv
# Activar (Linux/macOS)
source .venv/bin/activate
# Activar (Windows PowerShell)
.\\venv\\Scripts\\Activate.ps1
# Actualizar pip y instalar paquetes básicos
pip install --upgrade pip
pip install boto3 python-dotenv
Guarda las variables de entorno en .env (no versionar en Git):
AWS_ACCESS_KEY_ID=TU_ACCESS_KEY
AWS_SECRET_ACCESS_KEY=TU_SECRET_KEY
AWS_DEFAULT_REGION=us-east-1
3. Configuración segura de credenciales
Preferiblemente usa IAM Roles en lugar de claves estáticas. En entornos locales puedes crear un perfil llamado bedrock-dev:
aws configure --profile bedrock-dev
# Introduce Access Key, Secret Key y región
Luego, en tu código, indica el perfil:
import boto3, os
session = boto3.Session(profile_name='bedrock-dev')
bedrock = session.client('bedrock-runtime')
Esto permite aplicar la política de least‑privilege:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": [
"bedrock:*",
"bedrock-runtime:InvokeModel"
],
"Resource": "*"
}]
}
4. Primer llamado a un modelo de Bedrock
Ejemplo con el modelo anthropic.claude-v2 (texto generativo):
import json, os
from dotenv import load_dotenv
load_dotenv()
import boto3
client = boto3.client('bedrock-runtime', region_name=os.getenv('AWS_DEFAULT_REGION'))
prompt = "Escribe un poema de 4 versos sobre la inteligencia artificial y la nieve."
payload = {
"prompt": prompt,
"max_tokens_to_sample": 256,
"temperature": 0.7,
"top_p": 0.9,
"stop_sequences": []
}
response = client.invoke_model(
modelId='anthropic.claude-v2',
body=json.dumps(payload)
)
result = json.loads(response['body'].read())
print(result['completion'])
El bloque anterior muestra cómo cargar variables de entorno, crear el cliente y procesar la respuesta.
5. Comparativa rápida con otras plataformas LLM
AWS Bedrock
- Integración nativa con servicios AWS (S3, Lambda, SageMaker).
- Modelo bajo demanda, sin necesidad de gestionar infraestructura.
- Facturación por token, sin cargos de GPU.
- Política de IAM para control granular.
OpenAI / Azure OpenAI
- Amplia comunidad y documentación.
- Acceso a modelos GPT‑4, DALL·E, Whisper.
- Requiere manejo de claves API separadas.
- Costos por token + posible cargo por infraestructura (Azure).
6. Buenas prácticas, rendimiento y escalabilidad
- Batching de peticiones: agrupa varios prompts en una sola llamada cuando el modelo lo permite para reducir latencia.
- Cache de respuestas: usa
redisomemcachedpara almacenar resultados frecuentes. - Timeouts y reintentos: configura
boto3conconfig=Config(retries={'max_attempts': 5}). - Monitoreo: habilita CloudWatch Metrics (Invocations, Latency, Throttles) y crea alarmas.
- Versionado de modelos: apunta siempre a un
modelIdcon versión explícita (p.ej.,anthropic.claude-v2:1) para evitar rupturas inesperadas.
7. Dockerizando tu aplicación Python con Bedrock
Un Dockerfile mínimo:
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
# La variable de entorno se pasa en tiempo de ejecución
CMD ["python", "main.py"]
Ejemplo de docker-compose.yml que incluye redis para cache:
version: '3.8'
services:
app:
build: .
environment:
- AWS_DEFAULT_REGION=us-east-1
env_file: .env
depends_on:
- redis
redis:
image: redis:7-alpine
ports:
- "6379:6379"
Con esto puedes lanzar docker compose up --build y tu código tendrá acceso a Bedrock mediante las credenciales del host o mediante IAM Roles for Tasks si usas ECS.
8. Solución de problemas frecuente
| Problema | Causa típica | Solución |
|---|---|---|
| 403 Forbidden | Política IAM insuficiente | Agregar bedrock-runtime:InvokeModel a la política. |
| 429 Too Many Requests | Límites de tasa (throttling) | Implementar back‑off exponencial y solicitar aumento de cuota. |
| ModelNotFoundException | ModelId incorrecto o versión no disponible | Verificar la lista con aws bedrock list-foundation-models. |
| InvalidSignatureException | Credenciales caducadas o región equivocada | Renovar claves o usar AWS_DEFAULT_REGION correcta. |
9. Integración continua (CI) y despliegue continuo (CD)
Ejemplo de pipeline GitHub Actions que ejecuta pruebas y construye la imagen Docker:
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install deps
run: |
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
- name: Run tests
run: |
source .venv/bin/activate
pytest
build:
needs: test
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v3
- name: Log in to Amazon ECR
uses: aws-actions/amazon-ecr-login@v2
- name: Build & push Docker image
run: |
IMAGE_URI=$\{AWS_ACCOUNT_ID}.dkr.ecr.$\{AWS_REGION}.amazonaws.com/bedrock-demo:latest
docker build -t $IMAGE_URI .
docker push $IMAGE_URI
10. Conclusión
Configurar un entorno de desarrollo sólido con Python y AWS Bedrock no solo implica instalar paquetes, sino también adoptar prácticas de seguridad, monitoreo y automatización. Siguiendo esta guía tendrás una base preparada para escalar tus aplicaciones generativas, integrarlas con pipelines CI/CD y mantener la operatividad en producción.
2 Configuración Inicial del Entorno de Desarrollo con Python y AWS Bedrock