Full Stack AI AWS Bedrock na prática: o código e os comandos que realmente importam

Full Stack AI AWS Bedrock : o essencial em um artigo — código real, diagramas e etapas concretas, extratos de um curso de 41 lições.

Full Stack AI AWS Bedrock na prática: o código e os comandos que realmente importam

Sem teoria interminável aqui: abra o terminal e pratique. Aqui está o essencial de Full Stack AI AWS Bedrock, extraído diretamente de um curso completo de 41 lições — com código real que você pode copiar e colar agora.

tl;dr
  • Criar uma conta AWS e descobrir o Bedrock
  • Introdução à IA generativa e AWS Bedrock
  • API Bedrock e SDK Python Boto3
  • Engenharia de Prompt para Bedrock
  • Backend FastAPI com Bedrock
~$ cat ./parcours.md # Full Stack AI AWS Bedrock — 11 capítulos
01
Criar uma conta AWS e descobrir o Bedrock
→ Criar uma conta AWS Free Tier→ Configurar IAM e a segurança+ 1 mais lições
02
Introdução à IA generativa e AWS Bedrock
→ O que é a IA generativa?→ Panorama dos modelos de fundação+ 1 mais lições
03
API Bedrock e SDK Python Boto3
→ Instalar Boto3 e configurar as credenciais→ Invocar modelos com Python+ 1 mais lições
04
Prompt Engineering para Bedrock
→ Princípios do Prompt Engineering→ Técnicas zero-shot e few-shot+ 1 mais lições
05
Backend FastAPI com Bedrock
→ Arquitetura de um backend IA→ Criar uma API FastAPI + Bedrock+ 1 mais lições
06
Frontend Streamlit para a IA
→ Interface de chat com Streamlit→ Histórico de conversa e memória+ 1 mais lições
07
RAG Retrieval Augmented Geração
→ O que é o RAG?→ Embeddings e base vetorial+ 1 mais lições
08
Knowledge Bases e Agents Bedrock
→ Knowledge Bases Bedrock→ Agents Bedrock e ações+ 2 mais lições
🏁
Projeto final (+ 3 capítulos no caminho)
→ Você sai com um projeto concreto e demonstrável

Instalar Boto3 e configurar as credenciais

NOTEObjetivo desta lição: Ao final desta parte, você será capaz de instalar o SDK Python Boto3, configurar suas credenciais AWS e verificar se sua conexão com o AWS Bedrock funciona corretamente a partir de um script Python.
TIPPré-requisitos: Você deve ter uma conta AWS com acesso ao Amazon Bedrock ativado (veja Capítulo 01). Nenhum conhecimento prévio de Boto3 é necessário.

Objetivos pedagógicos

O que é Boto3?

Boto3 é o SDK oficial da Amazon Web Services para Python. Ele permite interagir com todos os serviços AWS (S3, DynamoDB, Lambda, Bedrock, etc.) diretamente a partir de código Python.

NOTEAnalogia: Imagine que a AWS é um restaurante imenso com centenas de pratos. Boto3 é o garçom que recebe seus pedidos (chamadas de API) e traz os resultados. Sem Boto3, você teria que gritar seus pedidos pela janela da cozinha (requisições HTTP brutas) — é possível, mas muito menos prático.

Boto3 – Cliente de baixo nível

Acesso direto às APIs AWS. Cada método corresponde exatamente a uma operação da API REST. Você manipula dicionários Python.

Boto3 – Resource de alto nível

Abstração orientada a objetos. Mais intuitiva para alguns serviços (S3, DynamoDB). Para o Bedrock, usamos principalmente o cliente.

Etapa 1 – Instalar Python 3.8+

O Boto3 requer Python 3.8 ou superior. Verifique primeiro se o Python já está instalado:

bash
python --version

Se a versão exibida for 3.8+, passe para a próxima etapa. Caso contrário, instale o Python conforme seu sistema:

Windows

Baixe o instalador oficial em https://www.python.org/downloads/. Marque obrigatoriamente a opção « Add Python to PATH » durante a instalação.

bash
# Verificação após a instalação
python --version
pip --version

macOS

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

# Verificação
python3 --version
pip3 --version

Linux (Ubuntu / Debian)

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

# Verificação
python3 --version
pip3 --version
WARNINGAtenção: No macOS e Linux, use python3 e pip3 em vez de python e pip, pois python pode apontar para Python 2.x em alguns sistemas.

Etapa 2 – Criar um ambiente virtual

Um ambiente virtual isola as dependências do seu projeto. Isso evita conflitos entre diferentes projetos Python na sua máquina.

NOTEAnalogia: Um ambiente virtual é como uma caixa de ferramentas dedicada a uma obra. Cada obra (projeto) tem sua própria caixa com suas próprias ferramentas (bibliotecas). Sem misturar entre obras.

Criar e ativar o venv

Primeira chamada ao Bedrock via console

NOTEObjetivo desta lição: Navegar no console AWS Bedrock, ativar o acesso aos modelos, enviar seu primeiro prompt no Playground e entender os parâmetros de geração (temperatura, max tokens, top-p).

Objetivos pedagógicos

1 – Acessar o Amazon Bedrock

Etapa 1: Conectar-se ao console AWS

Abra seu navegador e acesse:

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

Faça login com suas credenciais AWS. Se ainda não tiver conta, crie uma (o Free Tier AWS dá acesso a muitos serviços gratuitamente).

Etapa 2: Escolher a região correta

WARNINGAtenção à região: O Bedrock não está disponível em todas as regiões. Certifique-se de estar em uma região suportada. Recomendamos US East (N. Virginia) – us-east-1 para ter acesso a todos os modelos.

Verifique a região no canto superior direito do console:

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

Se você vir outra região, clique no menu
suspenso e selecione « US East (N. Virginia) ».

Etapa 3: Encontrar o Amazon Bedrock

Na barra de pesquisa no topo do console, digite « Bedrock » e clique em Amazon Bedrock nos resultados:

output
+----------------------------------------------------------+
|  Pesquisa : [ Bedrock                          ]        |
|                                                          |
|  Resultados :                                              |
|  +------------------------------------------------------+|
|  |  Amazon Bedrock                                      ||
|  |  Build with foundation models                        ||
|  +------------------------------------------------------+|
+----------------------------------------------------------+

Você chega ao painel do Bedrock (Bedrock Dashboard).

2 – Ativar o acesso aos modelos

Por padrão, nenhum modelo está ativado. Você deve solicitar explicitamente o acesso antes de poder usá-los.

Etapa 1: Ir para Model Access

No menu lateral esquerdo do Bedrock, clique em « Model access » (bem embaixo):

output
+----------------------------+------------------------------+
|  Amazon Bedrock            |                              |
|                            |  Bedrock Dashboard           |
|  Playgrounds               |                              |
|    Chat                    |  Bem-vindo ao Amazon        |
|    Text                    |  Bedrock. Acesse modelos     |
|    Image                   |  foundation de ponta         |
|                            |  via uma única API.          |
|  Orchestration             |                              |
|    Agents                  |                              |
|    Knowledge bases         |                              |
|                            |                              |
|  Foundation models         |                              |
|    Base models             |                              |
|    Custom models           |                              |
|                            |                              |
|  Bedrock configurations    |                              |
|  > Model access    <--    |                              |
+----------------------------+------------------------------+

Etapa 2: Solicitar o acesso

Clique no botão « Manage model access » (no canto superior direito).

Você verá a lista de todos os modelos disponíveis. Marque os seguintes 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 ]                  |
+----------------------------------------------------------+

Clique em « Save changes ». O acesso geralmente é ativado em poucos segundos.

TIPDica: Você pode ativar todos os modelos de uma vez sem risco. Você não paga nada enquanto não fizer chamadas. A ativação é gratuita.

Criar uma API FastAPI + Bedrock

Full Stack AI com AWS Bedrock • Backend FastAPI com Bedrock

NOTEObjetivo: Construir passo a passo uma API FastAPI completa que recebe uma mensagem do usuário e retorna a resposta gerada pelo AWS Bedrock (Claude). Ao final desta lição, você terá um endpoint /chat funcional testável via Swagger UI, curl e PowerShell.

O que você vai aprender

1. Instalação das dependências

Certifique-se de que seu ambiente virtual está ativado, então instale as bibliotecas:

bash
# Activer l'environnement virtuel (Windows PowerShell)
.\venv\Scripts\Activate.ps1

# Installer les bibliothèques principales
pip install fastapi uvicorn boto3 pydantic python-dotenv python-multipart

Verifique se tudo foi instalado corretamente:

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

Você deve ver as três bibliotecas com seus números de versão.

TIPAnalogia: Instalar as dependências é como reunir os ingredientes antes de cozinhar. FastAPI é a frigideira, Uvicorn é o fogo e Boto3 é o ingrediente principal que conecta à AWS.

2. Os modelos Pydantic

O Pydantic permite definir a forma exata dos dados que nossa API aceita e retorna. É como um formulário com campos obrigatórios: se os dados não corresponderem, a API recusa automaticamente a requisição com uma mensagem de erro clara.

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


class Message(BaseModel):
    """Représente um message dans la conversation."""
    role: str = Field(
        ...,
        description="Rôle : 'user' ou 'assistant'",
        examples=["user"]
    )
    content: str = Field(
        ...,
        description="Contenu du message",
        examples=["Explique-moi les boucles Python"]
    )


class ChatRequest(BaseModel):
    """Requête envoyée par le frontend pour chatter avec l'IA."""
    message: str = Field(
        ...,
        min_length=1,
        max_length=10000,
        description="Message de l'utilisateur"
    )
    history: Optional[List[Message]] = Field(
        default=[],
        description="Historique de la conversation"
    )
    model_id: Optional[str] = Field(
        default=None,
        description="ID du modèle Bedrock"
    )
    temperature: Optional[float] = Field(
        default=0.7,
        ge=0.0,
        le=1.0,
        description="Créativité du modèle (0 = précis, 1 = créatif)"
    )
    max_tokens: Optional[int] = Field(
        default=4096,
        ge=1,
        le=8192,
        description="Nombre maximum de tokens dans la réponse"
    )


class ChatResponse(BaseModel):
    """Réponse retournée par l'API après appel à Bedrock."""
    response: str = Field(
        ...,
        description="Réponse générée par l'IA"
    )
    model_id: str = Field(
        ...,
        description="ID du modèle utilisé"
    )
    input_tokens: int = Field(
        default=0,
        description="Tokens consommés par le prompt"
    )
    output_tokens: int = Field(
        default=0,
        description="Tokens générés dans la réponse"
    )


class HealthResponse(BaseModel):
    """Réponse du endpoint de santé."""
    status: str
    message: str
NOTEPor que Pydantic? Sem Pydantic, você precisa verificar manualmente cada campo (é uma string? está vazia? o número está no intervalo?). O Pydantic faz tudo automaticamente e gera mensagens de erro claras para o frontend.

Se o frontend enviar um campo temperature com valor 5.0 (fora do intervalo 0-1), o Pydantic retorna:

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

3. O serviço Bedrock

O serviço Bedrock encapsula toda a lógica de comunicação com a AWS. É aqui que a « magia » acontece: sua mensagem de texto é transformada em requisição AWS, enviada ao Claude e a resposta é retornada.

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():
    """Crée et retourne un client Bedrock Runtime."""
    return boto3.client(
        service_name="bedrock-runtime",
        region_name=AWS_REGION
    )


def build_messages(message: str, history: list = None) -> list:
    """Construit la liste de messages pour l'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:
    """
    Appelle AWS Bedrock avec le message et retourne la réponse.

    Args:
        message: Le message de l'utilisateur
        history: L'historique de la conversation
        model_id: L'identifiant du modèle Bedrock
        temperature: La créativité (0.0 à 1.0)
        max_tokens: Le nombre max de tokens en sortie

    Returns:
        dict avec la réponse, le modèle utilisé et les 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
        ),
    }

Detalhes do parâmetro body

Parâmetro Tipo Descrição
anthropic_version string Versão da API Anthropic usada pelo Bedrock
max_tokens int Limita o tamanho da resposta (1 token ≈ 0.75 palavra)
temperature float 0.0 = respostas precisas, 1.0 = respostas criativas
messages list A conversa completa (histórico + nova mensagem)

4. O arquivo main.py completo

Este é o ponto de entrada da aplicação. Ele reúne todos os componentes: configuração, CORS, rotas e tratamento de erros.

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 interagir com 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():
    """Vérifie que le serveur est opérationnel."""
    return HealthResponse(
        status="ok",
        message="Le serveur fonctionne correctement"
    )


@app.post("/chat", response_model=ChatResponse)
def chat(request: ChatRequest):
    """
    Envoie un message à AWS Bedrock et retourne la réponse de l'IA.

    - **message** : le texte envoyé par l'utilisateur
    - **history** : l'historique de conversation (optionnel)
    - **model_id** : le modèle Bedrock à utiliser (optionnel)
    - **temperature** : la créativité de 0.0 à 1.0 (optionnel)
    - **max_tokens** : nombre max de tokens en sortie (optionnel)
    """
    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"Erreur lors de l'appel à Bedrock : {str(e)}"
        )


@app.get("/models")
def list_models():
    """Retourne la liste des modèles disponibles."""
    return {
        "models": [
            {
                "id": "anthropic.claude-3-sonnet-20240229-v1:0",
                "name": "Claude 3 Sonnet",
                "description": "Bon équilibre performance/coût"
            },
            {
                "id": "anthropic.claude-3-haiku-20240307-v1:0",
                "name": "Claude 3 Haiku",
                "description": "Le plus rapide et économique"
            },
            {
                "id": "anthropic.claude-3-5-sonnet-20240620-v1:0",
                "name": "Claude 3.5 Sonnet",
                "description": "Le plus performant"
            },
        ]
    }
va-plus-loin

Este artigo cobre os trechos mais úteis — o curso completo Full Stack AI AWS Bedrock (12 capítulos, 41 lições, exercícios corrigidos e projeto final) leva você até o fim.

./acceder-au-cours-complet curso gratuito : Maîtriser Claude Code

FAQ

Quanto tempo para aprender Full Stack AI AWS Bedrock?
Com uma progressão estruturada (12 capítulos, 41 lições curtas e práticas), você atinge um nível operacional em algumas semanas dedicando 30 a 60 minutos por dia. O importante é praticar cada conceito imediatamente.
Precisa de pré-requisitos?
Básicos de informática são suficientes. Se você sabe usar um terminal e ler código simples, está pronto.
Por onde começar concretamente?
Reproduza os comandos deste artigo e depois siga o curso completo Full Stack AI AWS Bedrock: ele encadeia as 41 lições em ordem, com exercícios e projeto final.

📬 Quer receber este tipo de guia toda semana? Inscreva-se gratuitamente — código real, zero enrolação.