Módulo 8: Capstone The Andes Cargo Genai Extractor
1. Introducción al capstone: el extractor completo, cerrado
Descripción
Siete módulos construyeron, cada uno por su cuenta, una capa distinta del extractor de manifiestos de Andes Cargo: la decisión de arquitectura (M1), el modelo de costo (M2), la infraestructura (M3), los guardrails (M4), la seguridad (M5), el presupuesto de tokens (M6) y la observabilidad (M7). Ninguna de esas siete lecciones de cierre integró las siete piezas entre sí — cada una cerró su propio módulo, citando a las anteriores, sin correr el sistema completo de punta a punta. Este módulo hace exactamente eso, y nada más: no agrega ningún concepto nuevo, ningún mecanismo de Bedrock que las lecciones 2 a 7 de este módulo no hayan citado ya, ninguna herramienta que este ecosistema no haya usado antes. Toma el repositorio tal como los siete módulos anteriores lo dejaron y lo recorre, una vez, de principio a fin — con el mismo criterio de honestidad exacto que sostuvo cada lección desde el Módulo 1: qué corrió de verdad, qué es una reconstrucción precisa de lo que correría, y por qué, en cada punto, sin ambigüedad.
Conexión con el módulo
Este es el último módulo de genai-on-aws-production-guide. La lección 2 repasa la arquitectura completa, con los dos caminos superpuestos sobre el sistema heredado. Las lecciones 3 y 4 recorren cada camino de punta a punta —el determinista, ejecutado por completo; el de escalamiento, mixto y declarado así—. La lección 5 reúne, en un solo lugar, cada pieza que quedó representativa en toda la guía, con su razón exacta. La lección 6 cierra, sin ambigüedad, la frontera con AI Engineering que el M1.4 fijó primero. La lección 7 mira hacia adelante: qué necesitaría Andes Cargo si su volumen creciera. La lección 8 —el proyecto final de esta guía completa— entrega el repositorio como pieza de portfolio.
Analogía: la inspección final, no una pieza nueva de la fábrica
Una fábrica que ensambla un producto complejo —un auto, un electrodoméstico— no termina su línea de producción con una estación que agrega una pieza más. Termina con una estación de inspección final: alguien, o algún sistema, recorre el producto completo, componente por componente, confirmando que cada pieza que las estaciones anteriores instalaron está donde debería estar, funciona como debería funcionar, y que el producto completo —no cada pieza por separado— hace lo que promete. Esa estación no suelda nada nuevo. No agrega un componente que faltaba. Su trabajo es, exclusivamente, la integración: ¿el motor que la estación 12 instaló conversa correctamente con la transmisión que instaló la estación 18? Este módulo es esa estación de inspección final. bedrock.tf (M3) ya existe. pre_invoke_checks.py/post_invoke_checks.py (M4) ya existen, probados. bedrock-least-privilege.rego (M5) ya existe, probado contra un plan real. bedrock_cost_estimate.py y bedrock-budget.rego (M2, M6) ya existen. escalation_rate.py y el arnés de smoke test (M7) ya existen. Este módulo no suelda ninguna pieza nueva — recorre el auto completo, lo enciende, y confirma, con la misma disciplina de siempre, qué de lo que ves andar es el motor real y qué es el tablero mostrando una lectura representativa porque el auto nunca salió a la calle.
Qué se entrega: las piezas heredadas, módulo por módulo
| Módulo | Pieza(s) que entrega a este capstone | Estado |
|---|---|---|
| M1 | ADR-001-llm-as-escalation-path.md — la decisión de arquitectura completa; parse_manifest(), el evento ManifestParseFailed | Decisión escrita; código heredado de aws-core-services-guide |
| M2 | GENAI-COST-PROFILE.md — Amazon Nova Lite elegido, dos escenarios de volumen ($0,00 realista, $0,42 estrés) | Documento completo, calculadora corrida de verdad |
| M3 | bedrock.tf + modules/bedrock-guardrail/ + BedrockManifestExtractorRole | Plan: 17 to add, validate/plan reales, sin LocalStack |
| M4 | Guardrail completo (6 mecanismos/5 políticas) + guardrails/pre_invoke_checks.py + guardrails/post_invoke_checks.py + guardrails/defense_in_depth_flow.py | 34 casos de pytest, todos reales |
| M5 | policy/bedrock-least-privilege.rego + functions/extract-shipment-manifest-fields/handler.py firmado con cosign | conftest/cosign reales; security gate extendido, sin job nuevo |
| M6 | cost-policy/bedrock-budget.rego + local.ai_workload_tags (Workload=GenAIExtraction) | Cost gate extendido, sin job nuevo |
| M7 | observability/escalation_rate.py (12,0 %, 6 de 50) + evals/manifest_extraction_smoke_test.py (3/5, 40 % de bloqueo) | SLI literal + arnés estructural, ambos reales |
Siete filas, ninguna vacía. Este capstone no rescata una pieza olvidada ni corrige un error pendiente — cada módulo anterior cerró con su propio proyecto, verificado, antes de que este módulo empezara a escribirse.
El ledger de honestidad de esta guía completa, adelantado
Antes de entrar en el recorrido detallado, vale la pena ver, de una vez, el balance final que las lecciones 3 a 5 de este módulo van a confirmar con evidencia:
EJECUTADO (corre de verdad, en este entorno, sin excepción)
- parse_manifest() contra manifiestos bien formados y de texto libre (M1, M8.3)
- terraform validate / plan sobre bedrock.tf + modules/bedrock-guardrail/ (M3)
- pytest sobre pre_invoke_checks.py / post_invoke_checks.py / defense_in_depth_flow.py (M4)
- conftest sobre bedrock-least-privilege.rego y bedrock-budget.rego (M5, M6)
- cosign sign-blob / verify-blob sobre el .zip del extractor (M5)
- bedrock_cost_estimate.py, escalation_rate.py, el arnes de smoke test (M2, M7)
- la construccion del ManifestParseFailed real y de la solicitud a invoke_model (M8.4)
REPRESENTATIVO (reconstruido con precision, nunca ejecutado)
- CUALQUIER invocacion real a bedrock:InvokeModel, en TODA esta guia, sin excepcion
- el bloqueo real de Bedrock Guardrails ante un ataque o una fuga de PII (M4.7)
- terraform apply / tflocal apply de un recurso Bedrock real (M3.6)
- InvocationLatency / TimeToFirstToken reales (M7.7)
- el numero en dolares que Infracost produciria para bedrock.tf (M2.5, M2.6)
- la calidad semantica de una extraccion real (M1.4, M7.5 -- frontera con AI Engineering)
Este es, con precisión, el mapa completo que la lección 5 de este módulo va a documentar fila por fila, con la razón técnica exacta de cada una — nunca una etiqueta genérica de "no se pudo".
Mapa de las ocho lecciones
M8.1 Introduccion al capstone (esta leccion) -- que se entrega, el
ledger adelantado
M8.2 Repaso de arquitectura: el sistema completo, dos caminos --
diagrama ASCII + mermaid, superpuesto sobre el sistema heredado
M8.3 Recorrido end-to-end: el camino determinista, barato, ejecutado
-- EJECUTADO por completo, sin excepcion
M8.4 Recorrido end-to-end: el camino de escalamiento a IA, mixto y
declarado -- ManifestParseFailed real, invocacion representativa,
guardrails propios reales sobre la respuesta simulada
M8.5 Lo que esta guia dejo representativo -- el ledger final, con la
razon tecnica exacta de cada fila
M8.6 La frontera con AI Engineering, cerrada -- recapitula el M1.4,
sin ambiguedad de cierre
M8.7 Lo que Andes Cargo todavia necesita -- GPU/Provisioned Throughput
a escala, nombrado, no construido; el cierre del ecosistema
M8.8 Proyecto final: el paquete GenAI de Andes Cargo como entregable
Las lecciones 3 y 4 son el corazón ejecutable de este módulo — cada una corre código real, con la misma disciplina de "Qué esperar" literal o representativo que cada lección de esta guía ya aplicó a su propio dominio. Las lecciones 5, 6 y 7 son de cierre: ninguna corre código nuevo, cada una consolida lo que ya se demostró. La lección 8 entrega el repositorio completo.
Errores comunes
Esperar que este módulo agregue una pieza de infraestructura nueva, un mecanismo de Bedrock que las lecciones anteriores no hayan cubierto (de expectativa de contenido nuevo). Qué pasa: alguien llega a este módulo esperando, por ejemplo, la sexta política de guardrail que faltaba, o un servicio de AWS que ninguna guía anterior nombró. Cómo detectarlo: si tu pregunta al abrir esta lección es "¿qué aprendo de nuevo aquí?". Cómo corregirlo: este módulo es, deliberadamente, una estación de inspección final, no una línea de ensamblaje nueva — la analogía de esta misma lección lo explica con precisión. Todo el contenido técnico de este capstone ya existe, construido y probado, en los Módulos 1 a 7; lo que este módulo agrega es la integración y el cierre, no piezas nuevas.
Asumir que, porque este es el último módulo, en algún punto SÍ va a invocarse Bedrock de verdad, "para cerrar con broche de oro" (de expectativa sobre el clímax narrativo). Qué pasa: alguien, acostumbrado a que los últimos capítulos de un curso "suban la apuesta", espera que el M8.4 rompa la regla que sostuvo toda la guía y ejecute una llamada real a bedrock:InvokeModel. Cómo detectarlo: si tu expectativa del M8.4 es "por fin vemos a Bedrock responder de verdad". Cómo corregirlo: relee la advertencia de aprobación al inicio del DISENO.md de esta guía — "es la ÚNICA guía del ecosistema donde NO corre ninguna inferencia real de modelo", una decisión declarada desde el Módulo 1, lección 2, y sostenida sin excepción hasta la última línea de código de este módulo. El "broche de oro" de esta guía no es una invocación real — es la honestidad completa, sin una sola grieta, de principio a fin.
Tratar el ledger adelantado de esta lección como el ledger final, sin leer la lección 5 (de sustituir un resumen por el documento completo). Qué pasa: alguien copia la lista de esta lección directamente a un README o una presentación, sin revisar la versión completa y con fuentes de la lección 5. Cómo detectarlo: si tu cita de "qué quedó representativo en esta guía" no incluye ninguna referencia a una lección específica de un módulo anterior. Cómo corregirlo: la lista de esta lección es, deliberadamente, un adelanto sin las fuentes exactas — la lección 5 de este mismo módulo es la versión completa, con la razón técnica y la lección de origen de cada fila, la que sí sirve como cita defendible frente a un entrevistador técnico.
Ejercicios
Ejercicio 1 — Sin mirar la tabla de esta lección, recita de memoria las siete piezas que cada módulo anterior entrega a este capstone. Verifica tu respuesta contra la tabla "Qué se entrega" de esta lección.
Ver solución
M1 → ADR-001-llm-as-escalation-path.md + parse_manifest()/ManifestParseFailed. M2 → GENAI-COST-PROFILE.md. M3 → bedrock.tf + modules/bedrock-guardrail/ + BedrockManifestExtractorRole. M4 → el guardrail completo + pre_invoke_checks.py/post_invoke_checks.py/defense_in_depth_flow.py. M5 → bedrock-least-privilege.rego + handler.py firmado. M6 → bedrock-budget.rego + ai_workload_tags. M7 → escalation_rate.py + el arnés de smoke test. Si nombraste las siete sin mirar, tienes clara la base completa sobre la que este módulo se construye.
Ejercicio 2 — Explica, con la analogía de esta lección, por qué sería un error de diseño que este módulo agregara una octava política de guardrail nueva. Un compañero pregunta por qué no aprovechar el capstone para "completar" el guardrail con algo que el M4 dejó afuera.
Ver solución
Una respuesta completa suena, más o menos, así: "Porque la estación de inspección final de una fábrica no suelda piezas nuevas — su trabajo es confirmar que las piezas ya instaladas funcionan juntas, no ampliar el producto. Si el M8 agregara una política de guardrail nueva, dejaría de ser un capstone integrador y pasaría a ser, de facto, un noveno módulo de construcción disfrazado de cierre — exactamente la confusión de rol que esta misma lección nombra en sus Errores comunes. Cualquier política adicional que el guardrail necesitara sería, correctamente, trabajo del M4, no de este módulo."
Ejercicio 3 — Predice, antes de leer la lección 5, cuántas filas del ledger final esperarías que queden marcadas "representativo". Basándote en el ledger adelantado de esta lección, cuenta las filas de la sección "REPRESENTATIVO" de arriba.
Ver solución
Seis: cualquier invocación real a bedrock:InvokeModel, el bloqueo real del guardrail gestionado, apply de un recurso Bedrock real, InvocationLatency/TimeToFirstToken reales, el número en dólares de Infracost, y la calidad semántica de una extracción real. La lección 5 de este módulo confirma este mismo conteo, con la lección de origen exacta de cada una — si tu conteo dio seis, ya tienes el balance completo de esta guía antes de llegar a esa lección.
Resumen y siguiente paso
Esta lección mapeó el capstone completo: las siete piezas que cada módulo anterior entrega, sin ninguna faltante, y el ledger de honestidad adelantado que las lecciones 3 a 5 de este módulo confirman con evidencia. Ningún concepto nuevo entra a esta guía a partir de aquí — todo lo que sigue es integración, recorrido y cierre.
Antes de avanzar deberías poder: nombrar las siete piezas heredadas sin mirar la tabla; explicar por qué este módulo no invoca Bedrock de verdad, ni siquiera para "cerrar con broche de oro"; y anticipar, sin ayuda, el conteo aproximado de piezas representativas frente a ejecutadas en el ledger final.
La lección 2 repasa la arquitectura completa del sistema, con los dos caminos —determinista y de escalamiento— superpuestos sobre el sistema heredado de las siete guías anteriores del ecosistema.
Recursos
genai-on-aws-production-guide/DISENO.md— la sección "Módulo 8" y el veredicto completo de aprobación, la fuente de la contabilidad de honestidad de esta guía.- Este mismo curso, Módulo 1, lección 8 (
08-project-andes-cargos-ai-workload-map.md) —ADR-001-llm-as-escalation-path.md, el documento que gobierna cada decisión de este capstone. - Este mismo curso, Módulo 4, lección 8 y Módulo 7, lección 8 — los dos proyectos de cierre de módulo cuyo mismo patrón de ledger de honestidad este capstone reaplica, ahora a escala de la guía completa.
- AWS — Amazon Bedrock — panorama oficial del servicio que esta guía entera opera alrededor, sin invocarlo nunca.