Full Stack AI AWS Bedrock en la práctica: el código y los comandos que realmente importan

Full Stack AI AWS Bedrock : lo esencial en un artículo — código real, diagramas y pasos concretos, extractos de un curso de 41 lecciones.

Full Stack AI AWS Bedrock en la práctica: el código y los comandos que realmente importan

Ni teoría interminable aquí: abrimos la terminal y practicamos. Aquí tienes lo esencial de Full Stack AI AWS Bedrock, extraído directamente de un curso completo de 41 lecciones —con código real que puedes copiar y pegar ahora mismo.

tl;dr
  • Crear una cuenta AWS y descubrir Bedrock
  • Introducción a la IA generativa y AWS Bedrock
  • API Bedrock y SDK Python Boto3
  • Prompt Engineering para Bedrock
  • Backend FastAPI con Bedrock
~$ cat ./parcours.md # Full Stack AI AWS Bedrock — 11 capítulos
01
Crear una cuenta AWS y descubrir Bedrock
→ Crear un compte AWS Free Tier→ Configurer IAM et la sécurité+ 1 más lecciones
02
Introducción a la IA generativa y AWS Bedrock
→ ¿Qué es la IA generativa?→ Panorama de los modelos fundación+ 1 más lecciones
03
API Bedrock y SDK Python Boto3
→ Installer Boto3 et configurer les credentials→ Invoquer des modèles avec Python+ 1 más lecciones
04
Prompt Engineering para Bedrock
→ Principes du Prompt Engineering→ Techniques zero-shot et few-shot+ 1 más leçons
05
Backend FastAPI con Bedrock
→ Architecture d'un backend IA→ Créer une API FastAPI + Bedrock+ 1 más leçons
06
Frontend Streamlit para la IA
→ Interface de chat avec Streamlit→ Historique de conversation et mémoire+ 1 más leçons
07
RAG Retrieval Augmented Génération
→ ¿Qué es el RAG?→ Embeddings y base vectorial+ 1 más leçons
08
Knowledge Bases y Agents Bedrock
→ Knowledge Bases Bedrock→ Agents Bedrock et actions+ 2 más leçons
🏁
Proyecto final (+ 3 capítulos en camino)
→ Tu repars avec un projet concret et démontrable

Instalar Boto3 y configurar las credenciales

NOTEObjetivo de esta lección: Al final de esta parte, serás capaz de instalar el SDK Python Boto3, configurar tus credenciales AWS y verificar que tu conexión a AWS Bedrock funciona correctamente desde un script Python.
TIPRequisitos previos: Debes disponer de una cuenta AWS con el acceso a Amazon Bedrock activado (ver Capítulo 01). No se necesita conocimiento previo de Boto3.

Objetivos pedagógicos

¿Qué es Boto3?

Boto3 es el SDK oficial de Amazon Web Services para Python. Permite interactuar con todos los servicios AWS (S3, DynamoDB, Lambda, Bedrock, etc.) directamente desde código Python.

NOTEAnalogía: Imagina que AWS es un restaurante enorme con cientos de platos. Boto3 es el camarero que toma tus pedidos (llamadas API) y te trae los resultados. Sin Boto3, tendrías que gritar tus pedidos a través de la ventana de la cocina (peticiones HTTP en bruto) —es posible, pero mucho menos práctico.

Boto3 – Cliente de bajo nivel

Acceso directo a las API de AWS. Cada método corresponde exactamente a una operación de la API REST. Manipulas diccionarios Python.

Boto3 – Resource de alto nivel

Abstracción orientada a objetos. Más intuitiva para ciertos servicios (S3, DynamoDB). Para Bedrock se utiliza principalmente el cliente.

Paso 1 – Instalar Python 3.8+

Boto3 requiere Python 3.8 o superior. Verifica primero si Python ya está instalado:

bash
python --version

Si la versión mostrada es 3.8+, pasa al siguiente paso. En caso contrario, instala Python según tu sistema:

Windows

Descarga el instalador oficial desde https://www.python.org/downloads/. Marca obligatoriamente la casilla « Add Python to PATH » durante la instalación.

bash
# Verificación después de la instalación
python --version
pip --version

macOS

bash
# Via Homebrew (recomendado)
brew install python@3.11

# Verificación
python3 --version
pip3 --version

Linux (Ubuntu / Debian)

bash
sudo apt update
sudo apt install python3 python3-pip python3-venv -y

# Verificación
python3 --version
pip3 --version
WARNINGAtención: En macOS y Linux, utiliza python3 y pip3 en lugar de python y pip, ya que python puede apuntar a Python 2.x en algunos sistemas.

Paso 2 – Crear un entorno virtual

Un entorno virtual aísla las dependencias de tu proyecto. Evita conflictos entre distintos proyectos Python en tu máquina.

NOTEAnalogía: Un entorno virtual es como una caja de herramientas dedicada a una obra. Cada obra (proyecto) tiene su propia caja con sus propias herramientas (bibliotecas). Sin mezclar entre obras.

Crear y activar el venv

Primera llamada a Bedrock mediante la consola

NOTEObjetivo de esta lección: Navegar por la consola AWS Bedrock, activar el acceso a los modelos, enviar tu primer prompt en el Playground y comprender los parámetros de generación (temperatura, max tokens, top-p).

Objetivos pedagógicos

1 – Acceder a Amazon Bedrock

Paso 1: Conectarse a la consola AWS

Abre tu navegador y ve a:

bash
https://console.aws.amazon.com

Inicia sesión con tus credenciales AWS. Si aún no tienes cuenta, créala (el Free Tier de AWS te da acceso a muchos servicios de forma gratuita).

Paso 2: Elegir la región correcta

WARNINGAtención a la región: Bedrock no está disponible en todas las regiones. Asegúrate de estar en una región compatible. Recomendamos US East (N. Virginia) – us-east-1 para tener acceso a todos los modelos.

Verifica la región en la parte superior derecha de la consola:

output
+----------------------------------------------------------+
|  AWS Console                          [N. Virginia v]    |
|                                        ^^^^^^^^^^^^      |
|  Barra de búsqueda : [ Amazon Bedrock         ]         |
|                                                          |
+----------------------------------------------------------+

Si ves otra región, haz clic en el menú
desplegable y selecciona « US East (N. Virginia) ».

Paso 3: Encontrar Amazon Bedrock

En la barra de búsqueda superior de la consola, escribe « Bedrock » y haz clic en Amazon Bedrock en los resultados:

output
+----------------------------------------------------------+
|  Búsqueda : [ Bedrock                          ]        |
|                                                          |
|  Resultados :                                              |
|  +------------------------------------------------------+|
|  |  Amazon Bedrock                                      ||
|  |  Build with foundation models                        ||
|  +------------------------------------------------------+|
+----------------------------------------------------------+

Llegas al panel de control de Bedrock (Bedrock Dashboard).

2 – Activar el acceso a los modelos

Por defecto, ningún modelo está activado. Debes solicitar explícitamente el acceso antes de poder utilizarlos.

Paso 1: Ir a Model Access

En el menú lateral izquierdo de Bedrock, haz clic en « Model access » (al final):

output
+----------------------------+------------------------------+
|  Amazon Bedrock            |                              |
|                            |  Bedrock Dashboard           |
|  Playgrounds               |                              |
|    Chat                    |                              |
|    Text                    |  Bienvenido a Amazon         |
|    Image                   |  Bedrock. Accede a modelos   |
|                            |  fundacionales de vanguardia |
|                            |  mediante una API única.     |
|  Orchestration             |                              |
|    Agents                  |                              |
|    Knowledge bases         |                              |
|                            |                              |
|  Foundation models         |                              |
|    Base models             |                              |
|    Custom models           |                              |
|                            |                              |
|  Bedrock configurations    |                              |
|  > Model access    <--    |                              |
+----------------------------+------------------------------+

Paso 2: Solicitar el acceso

Haz clic en el botón « Manage model access » (arriba a la derecha).

Verás la lista de todos los modelos disponibles. Marca los siguientes modelos para este curso:

output
+----------------------------------------------------------+
|  Manage model access                                     |
|                                                          |
|  Provider        Model                   Access Status   |
|  -------------------------------------------------------+|
|  [x] Anthropic   Claude 3 Haiku          Available      ||
|  [x] Anthropic   Claude 3.5 Sonnet       Available      ||
|  [ ] Anthropic   Claude 3 Opus           Available      ||
|  [x] Amazon      Titan Text Express      Available      ||
|  [x] Meta        Llama 3 8B Instruct     Available      ||
|  [x] Mistral AI  Mistral 7B Instruct     Available      ||
|  [x] Mistral AI  Mixtral 8x7B Instruct   Available      ||
|                                                          |
|                        [ Save changes ]                  |
+----------------------------------------------------------+

Haz clic en « Save changes ». El acceso suele activarse en unos segundos.

TIPConsejo: Puedes activar todos los modelos de una vez sin riesgo. No pagas nada hasta que realices llamadas. La activación es gratuita.

Crear una API FastAPI + Bedrock

Full Stack AI con AWS Bedrock • Backend FastAPI con Bedrock

NOTEObjetivo: Construir paso a paso una API FastAPI completa que reciba un mensaje del usuario y devuelva la respuesta generada por AWS Bedrock (Claude). Al final de esta lección tendrás un endpoint /chat funcional, testable mediante Swagger UI, curl y PowerShell.

Lo que aprenderás

1. Instalación de las dependencias

Asegúrate de que tu entorno virtual esté activado e instala las bibliotecas:

bash
# Activar el entorno virtual (Windows PowerShell)
.\venv\Scripts\Activate.ps1

# Instalar las bibliotecas principales
pip install fastapi uvicorn boto3 pydantic python-dotenv python-multipart

Verifica que todo esté instalado correctamente:

bash
pip list | findstr -i "fastapi uvicorn boto3"

Deberías ver las tres bibliotecas con sus números de versión.

TIPAnalogía: Instalar las dependencias es como reunir los ingredientes antes de cocinar. FastAPI es la sartén, Uvicorn es el fuego y Boto3 es el ingrediente principal que conecta con AWS.

2. Los modelos Pydantic

Pydantic permite definir la forma exacta de los datos que nuestra API acepta y devuelve. Es como un formulario con campos obligatorios: si los datos no coinciden, la API rechaza automáticamente la solicitud con un mensaje de error claro.

output
# backend/models/schemas.py
from pydantic import BaseModel, Field
from typing import Optional, List


class Message(BaseModel):
    """Representa un mensaje en la conversación."""
    role: str = Field(
        ...,
        description="Rol: 'user' o 'assistant'",
        examples=["user"]
    )
    content: str = Field(
        ...,
        description="Contenido del mensaje",
        examples=["Explícame los bucles Python"]
    )


class ChatRequest(BaseModel):
    """Solicitud enviada por el frontend para chatear con la IA."""
    message: str = Field(
        ...,
        min_length=1,
        max_length=10000,
        description="Mensaje del usuario"
    )
    history: Optional[List[Message]] = Field(
        default=[],
        description="Historial de la conversación"
    )
    model_id: Optional[str] = Field(
        default=None,
        description="ID del modelo Bedrock"
    )
    temperature: Optional[float] = Field(
        default=0.7,
        ge=0.0,
        le=1.0,
        description="Creatividad del modelo (0 = preciso, 1 = creativo)"
    )
    max_tokens: Optional[int] = Field(
        default=4096,
        ge=1,
        le=8192,
        description="Número máximo de tokens en la respuesta"
    )


class ChatResponse(BaseModel):
    """Respuesta devuelta por la API tras la llamada a Bedrock."""
    response: str = Field(
        ...,
        description="Respuesta generada por la IA"
    )
    model_id: str = Field(
        ...,
        description="ID del modelo utilizado"
    )
    input_tokens: int = Field(
        default=0,
        description="Tokens consumidos por el prompt"
    )
    output_tokens: int = Field(
        default=0,
        description="Tokens generados en la respuesta"
    )


class HealthResponse(BaseModel):
    """Respuesta del endpoint de salud."""
    status: str
    message: str
NOTE¿Por qué Pydantic? Sin Pydantic debes verificar manualmente cada campo (¿es una cadena? ¿está vacía? ¿el número está dentro del rango?). Pydantic lo hace todo automáticamente y genera mensajes de error claros para el frontend.

Si el frontend envía un campo temperature con valor 5.0 (fuera del rango 0-1), Pydantic devuelve:

output
{
  "detail": [
    {
      "loc": ["body", "temperature"],
      "msg": "Input should be less than or equal to 1",
      "type": "less_than_equal"
    }
  ]
}

3. El servicio Bedrock

El servicio Bedrock encapsula toda la lógica de comunicación con AWS. Aquí es donde ocurre la «magia»: tu mensaje de texto se transforma en una solicitud AWS, se envía a Claude y la respuesta se devuelve.

output
# backend/services/bedrock_service.py
import json
import boto3
from config import AWS_REGION, BEDROCK_MODEL_ID, MAX_TOKENS, TEMPERATURE


def get_bedrock_client():
    """Crea y devuelve un cliente Bedrock Runtime."""
    return boto3.client(
        service_name="bedrock-runtime",
        region_name=AWS_REGION
    )


def build_messages(message: str, history: list = None) -> list:
    """Construye la lista de mensajes para la API Bedrock."""
    messages = []
    if history:
        for msg in history:
            messages.append({
                "role": msg.role,
                "content": [{"type": "text", "text": msg.content}]
            })
    messages.append({
        "role": "user",
        "content": [{"type": "text", "text": message}]
    })
    return messages


def invoke_bedrock(
    message: str,
    history: list = None,
    model_id: str = None,
    temperature: float = None,
    max_tokens: int = None
) -> dict:
    """
    Llama a AWS Bedrock con el mensaje y devuelve la respuesta.

    Args:
        message: El mensaje del usuario
        history: El historial de la conversación
        model_id: El identificador del modelo Bedrock
        temperature: La creatividad (0.0 a 1.0)
        max_tokens: El número máximo de tokens de salida

    Returns:
        dict con la respuesta, el modelo utilizado y los tokens
    """
    client = get_bedrock_client()
    model = model_id or BEDROCK_MODEL_ID
    temp = temperature if temperature is not None else TEMPERATURE
    tokens = max_tokens or MAX_TOKENS

    messages = build_messages(message, history)

    body = json.dumps({
        "anthropic_version": "bedrock-2023-05-31",
        "max_tokens": tokens,
        "temperature": temp,
        "messages": messages
    })

    response = client.invoke_model(
        modelId=model,
        contentType="application/json",
        accept="application/json",
        body=body
    )

    response_body = json.loads(response["body"].read())

    return {
        "response": response_body["content"][0]["text"],
        "model_id": model,
        "input_tokens": response_body.get("usage", {}).get(
            "input_tokens", 0
        ),
        "output_tokens": response_body.get("usage", {}).get(
            "output_tokens", 0
        ),
    }

Detalles del parámetro body

Parámetro Tipo Descripción
anthropic_version string Versión de la API Anthropic utilizada por Bedrock
max_tokens int Limita la longitud de la respuesta (1 token ≈ 0.75 palabra)
temperature float 0.0 = respuestas precisas, 1.0 = respuestas creativas
messages list La conversación completa (historial + nuevo mensaje)

4. El archivo main.py completo

Es el punto de entrada de la aplicación. Ensambla todos los componentes: configuración, CORS, rutas y gestión de errores.

output
# backend/main.py
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from dotenv import load_dotenv

from config import CORS_ORIGINS
from models.schemas import (
    ChatRequest,
    ChatResponse,
    HealthResponse,
)
from services.bedrock_service import invoke_bedrock

load_dotenv()

app = FastAPI(
    title="Full Stack AI - Backend Bedrock",
    description="API para interactuar con AWS Bedrock (Claude)",
    version="1.0.0",
)

# --- Middleware CORS ---
app.add_middleware(
    CORSMiddleware,
    allow_origins=CORS_ORIGINS,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)


# --- Endpoints ---

@app.get("/health", response_model=HealthResponse)
def health_check():
    """Verifica que el servidor está operativo."""
    return HealthResponse(
        status="ok",
        message="El servidor funciona correctamente"
    )


@app.post("/chat", response_model=ChatResponse)
def chat(request: ChatRequest):
    """
    Envía un mensaje a AWS Bedrock y devuelve la respuesta de la IA.

    - **message** : el texto enviado por el usuario
    - **history** : el historial de conversación (opcional)
    - **model_id** : el modelo Bedrock a utilizar (opcional)
    - **temperature** : la creatividad de 0.0 a 1.0 (opcional)
    - **max_tokens** : número máximo de tokens de salida (opcional)
    """
    try:
        result = invoke_bedrock(
            message=request.message,
            history=request.history,
            model_id=request.model_id,
            temperature=request.temperature,
            max_tokens=request.max_tokens,
        )
        return ChatResponse(**result)

    except Exception as e:
        raise HTTPException(
            status_code=500,
            detail=f"Error al llamar a Bedrock : {str(e)}"
        )


@app.get("/models")
def list_models():
    """Devuelve la lista de modelos disponibles."""
    return {
        "models": [
            {
                "id": "anthropic.claude-3-sonnet-20240229-v1:0",
                "name": "Claude 3 Sonnet",
                "description": "Buen equilibrio rendimiento/coste"
            },
            {
                "id": "anthropic.claude-3-haiku-20240307-v1:0",
                "name": "Claude 3 Haiku",
                "description": "El más rápido y económico"
            },
            {
                "id": "anthropic.claude-3-5-sonnet-20240620-v1:0",
                "name": "Claude 3.5 Sonnet",
                "description": "El más potente"
            },
        ]
    }
va-plus-loin

Este artículo cubre los extractos más útiles —el curso completo Full Stack AI AWS Bedrock (12 capítulos, 41 lecciones, ejercicios corregidos y proyecto final) te lleva hasta el final.

./acceder-al-curso-completo curso gratuito : Dominar Claude Code

FAQ

¿Cuánto tiempo se tarda en aprender Full Stack AI AWS Bedrock?
Con una progresión estructurada (12 capítulos, 41 lecciones cortas y prácticas), se alcanza un nivel operativo en unas semanas dedicando 30 a 60 minutos al día. Lo importante es practicar cada concepto de inmediato.
¿Se necesitan requisitos previos?
Basta con nociones básicas de informática. Si sabes usar un terminal y leer código sencillo, estás listo.
¿Por dónde empezar concretamente?
Reproduce los comandos de este artículo y sigue el curso completo Full Stack AI AWS Bedrock: encadena las 41 lecciones en orden, con ejercicios y proyecto final.

📬 ¿Quieres recibir este tipo de guía cada semana? Suscríbete gratis —código real, cero palabrería.