Resumen
Este documento establece la convención única de nombrado que se aplica a todos los recursos AWS del proyecto Pedido Sugerido. La convención cubre 14 tipos de recurso, especifica el patrón, ejemplos concretos y los límites de longitud aplicables. Se alinea con dos referencias técnicas:
aje-cdk-libs(librería estándar AJE para CDK Python) — define los suffixes abreviados y la lógica deNameBuilder.- Recursos ya desplegados en la cuenta dev
832257724409— los stacksCdkDatalakeIngest*ymlops-*muestran el patrón verbose efectivamente usado en producción.
Decisión clave del proyecto: se adopta el patrón verbose (suffixes legibles como codepipeline, dynamodb, lambda) en lugar del patrón abreviado de aje-cdk-libs (cp, ddb, fn). Razón: el infra ya desplegado por Joseph en AjeDevPsInfraStack usa verbose, y mantener consistencia es más valioso que adoptar un sufijo más corto. La diferencia visual entre aje-dev-ps-config-ddb y aje-dev-ps-configtable-dynamodb no justifica una migración disruptiva.
Patrón general
Todos los recursos del proyecto siguen el patrón:
{enterprise}-{stage}-{project}-{descriptive_name}-{service_suffix}
| Token | Valor en este proyecto | Definición |
|---|---|---|
enterprise |
aje |
Identificador corporativo · constante |
stage |
dev (hoy) · qa / prod (futuro) |
Ambiente de despliegue |
project |
ps |
Abreviación de "pedido sugerido" |
descriptive_name |
varía por recurso | Nombre legible que describe la función (ej. pipeline, triggerfunction, configtable) |
service_suffix |
varía por tipo de recurso | Identificador del servicio AWS (ver tabla por tipo más abajo) |
Restricciones de caracteres aplicables a todos los recursos:
- Solo minúsculas, dígitos y guiones medios (
-) - Sin guiones consecutivos
- Sin guion al inicio ni al final
- Longitud máxima por recurso varía según el tipo (ver tabla)
Tabla por tipo de recurso
| Tipo AWS | service_suffix |
Pattern completo · ejemplo | Límite chars |
|---|---|---|---|
| S3 Bucket (scope-restricted) | s3 |
aje-dev-ps-codepipelinebucket-s3 |
63 |
S3 Bucket (globally unique) — patrón aje-cdk-libs |
s3 |
aje-dev-ps-832257724409-us-east-2-data-s3 (incluye account + region por unicidad global) |
63 |
| ECR Repository | (sin suffix) | aje-dev-ps-processing · aje-dev-ps-spark |
256 |
| IAM Role | iam |
aje-dev-ps-sagemaker-executionrole-iam · aje-dev-ps-buildrole-iam |
64 |
| IAM Policy | iam |
aje-dev-ps-sagemakerdeploypolicy-iam · aje-dev-ps-buildpolicy-iam |
128 |
| Lambda Function | lambda |
aje-dev-ps-triggerfunction-lambda |
64 |
| EventBridge Rule | eventbridge |
aje-dev-ps-schedulerule-EC-eventbridge (scoped por país en el segmento descriptive) |
64 |
| DynamoDB Table | dynamodb |
aje-dev-ps-configtable-dynamodb |
255 |
| CodePipeline | codepipeline |
aje-dev-ps-pipeline-codepipeline |
100 |
| CodeBuild Project | codebuild |
aje-dev-ps-deploystackproject-codebuild · aje-dev-ps-buildproject-codebuild · aje-dev-ps-deployproject-codebuild |
255 |
| SNS Topic | sns |
aje-dev-ps-alert-topic-sns |
256 |
| CloudWatch Alarm | cloudwatch |
aje-dev-ps-executionfailedalarm-cloudwatch · aje-dev-ps-executionstoppedalarm-cloudwatch |
255 |
| CloudWatch Dashboard | cloudwatch |
aje-dev-ps-monitoringdashboard-cloudwatch |
255 |
| SageMaker Pipeline | sagemaker |
aje-dev-ps-pipeline-sagemaker |
256 |
| SageMaker Domain | (sin suffix · convención mlops-)* | aje-dev-ps-domain |
63 |
| SageMaker Studio User Profile | (sin suffix) | aje-dev-ps-<nombre-usuario> |
63 |
| SageMaker Model Package Group (Nivel 2) | sagemaker |
aje-dev-ps-recmodel-<pais>-sagemaker (propuesto) |
63 |
| Feature Group · Feature Store (Nivel 2) | featurestore |
aje-dev-ps-cliente-features-featurestore (propuesto) |
64 |
| Step Functions State Machine (si aplica) | stepfunction |
aje-dev-ps-orchestrator-stepfunction (propuesto) |
80 |
Excepciones documentadas
Tres tipos de recurso no siguen el patrón general por restricciones técnicas:
1. S3 Buckets · unicidad global
S3 bucket names son únicos a nivel global de AWS (no por cuenta, no por región). Si el proyecto necesita un bucket con nombre extremadamente común (ej. data), debe incorporar account_id y region al pattern:
aje-dev-ps-832257724409-us-east-2-data-s3
Aplicado solo cuando el descriptive_name no es suficientemente único. En este proyecto, el bucket de CodePipeline artifacts (aje-dev-ps-codepipelinebucket-s3) usa el patrón compacto porque codepipelinebucket ya es lo bastante específico.
2. CloudFormation Stack names
Los stacks deployados por CDK usan PascalCase porque CDK genera nombres de stack desde el construct_id (PascalCase):
AjeDevPsInfraStack· stack principalaje-dev-ps-sagemaker-domain-stack· stack del Domain (creado por separado, sigue el patrón snake-case)
Aceptamos ambos formatos porque coexisten en la cuenta hoy. Para futuros stacks CDK, mantener PascalCase con el patrón Aje{Stage}Ps{Descriptive}Stack (ej. AjeDevPsMLOpsStack, AjeQaPsInfraStack).
3. EventBridge Rules · scoping por país
Las rules de schedule por país incluyen el código del país en descriptive_name (no como token aparte):
aje-dev-ps-schedulerule-EC-eventbridgeaje-dev-ps-schedulerule-MX-eventbridgeaje-dev-ps-schedulerule-PE-eventbridge
El código del país se mantiene en mayúsculas (EC, MX, PE) por trazabilidad con la columna code_country de DynamoDB y los code_country que el Lambda recibe del event.
Tags estándar
Independientemente del nombre, todos los recursos deben llevar la siguiente tabla de tags. La librería aje-cdk-libs aplica estos tags automáticamente vía ResourceBuilder.tag_resource().
| Tag | Valor en este proyecto | Origen |
|---|---|---|
Enterprise |
aje |
ProjectConfig.enterprise |
Project |
ps |
ProjectConfig.project_name |
Environment |
DEV (uppercase) |
ProjectConfig.environment.value |
Owner |
adrian.ulloa@tuxpas.com (hoy) |
ProjectConfig.author |
Service |
varía por recurso | nombre legible del servicio AWS (ej. AWS SageMaker, AWS S3) |
Name |
mismo valor que el resource name | redundante con el nombre, útil en la consola |
Tags opcionales recomendados (no aplicados automáticamente; sugerencia para producción):
CostCenter· necesario para FinOps a escalaBusinessProcess·pedido_sugerido(útil cuando convivan múltiples proyectos)Country· solo en recursos scoped a un país específicoDeploymentMethod·CDKoManual
Validación contra aje-cdk-libs
aje-cdk-libs (rama main del repo DimAje/aje-cdk-libs) define NameBuilder con suffixes abreviados:
| Service enum | Abreviado (aje-cdk-libs) | Verbose (adoptado) |
|---|---|---|
S3_BUCKET |
s3 |
s3 (coincide) |
LAMBDA_FUNCTION |
fn |
lambda |
STEP_FUNCTION |
sf |
stepfunction |
IAM_ROLE |
role |
iam |
IAM_POLICY |
policy |
iam |
GLUE_JOB |
job |
gluejob |
DYNAMODB_TABLE |
ddb |
dynamodb |
EVENT_BRIDGE |
eb |
eventbridge |
EVENT_BRIDGE_RULE |
rule |
eventbridge |
SNS_TOPIC |
sns |
sns (coincide) |
SQS |
sqs |
sqs (coincide) |
SECRET |
sm |
(no usado en este proyecto) |
Implicación: cuando se incorpore aje-cdk-libs al proyecto en Niveles 2-3, hay dos opciones:
- Opción A (recomendada) — mantener verbose en este proyecto y ajustar la lib internamente con un override del enum
Servicespara el contexto de Pedido Sugerido. Cero cambios a recursos ya desplegados. - Opción B — migrar gradualmente a los suffixes de
aje-cdk-libs. Requiere renombrar los ~20 recursos ya creados (reemplazo + propagación a todos los lugares donde se referencien los ARNs). Costo alto, beneficio mínimo.
Esta decisión queda registrada acá y se confirma con AJE en la Sesión 2.
Validación contra recursos existentes en la cuenta dev
El patrón verbose adoptado se valida contra los recursos aje-dev-ps-* ya desplegados (extraídos de la consola al 15-may-2026):
| Tipo | Recursos verificados | Patrón |
|---|---|---|
| ECR | aje-dev-ps-processing · aje-dev-ps-spark |
✓ sin suffix |
| Lambda | aje-dev-ps-triggerfunction-lambda |
✓ verbose lambda |
| DynamoDB | aje-dev-ps-configtable-dynamodb |
✓ verbose dynamodb |
| CodePipeline | aje-dev-ps-pipeline-codepipeline |
✓ verbose codepipeline |
| CodeBuild × 3 | aje-dev-ps-deploystackproject-codebuild · aje-dev-ps-buildproject-codebuild · aje-dev-ps-deployproject-codebuild |
✓ verbose codebuild |
| SNS | aje-dev-ps-alert-topic-sns |
✓ verbose sns |
| CloudWatch | aje-dev-ps-executionfailedalarm-cloudwatch · aje-dev-ps-monitoringdashboard-cloudwatch |
✓ verbose cloudwatch |
| SageMaker Pipeline | aje-dev-ps-pipeline-sagemaker |
✓ verbose sagemaker |
| SageMaker Domain | aje-dev-ps-domain |
✗ sin suffix · sigue convención mlops-* del resto de la cuenta |
| IAM Roles × 6 | aje-dev-ps-sagemaker-executionrole-iam · aje-dev-ps-buildrole-iam · aje-dev-ps-deployrole-iam · etc. |
✓ verbose iam |
| EventBridge × 7 | aje-dev-ps-schedulerule-{EC|MX|PE|...}-eventbridge |
✓ verbose con país en descriptive |
Conclusión: el patrón verbose adoptado está implementado consistentemente en los recursos productivos del proyecto.
Naming dentro de S3 · prefixes y keys
Los nombres de buckets S3 siguen la convención general. Los prefixes/keys dentro del bucket siguen una convención separada que documentamos acá para evitar ambigüedad.
Bucket aje-dev-analytics-artifacts-s3 (inputs del pipeline)
pedido_sugerido/
└── <pais_lowercase>/ · ej. ecuador/ · cam/ · mexico/ · peru/
├── maestro_productos_<pais>000 *(raw, ;-separated)*
├── visitas_<pais>000 *(raw, ;-separated)*
├── ventas_<pais>000 *(raw, ;-separated)*
├── D_stock_<pais>.csv *(raw, ,-separated)*
└── <PAIS>_maestro_productos.csv *(procesado, output de Limpieza)*
Bucket aje-dev-ps-codepipelinebucket-s3 (artifacts del CodePipeline)
SourceOutput/<execution-id>/ · output del stage Source (GitLab pull)
BuildOutput/<execution-id>/ · output del stage Build (Docker push log)
Generados automáticamente por CodePipeline · no requieren naming manual.
Bucket aje-dev-analytics-artifacts-s3/ps-pipeline/ (outputs del SM Pipeline)
ps-pipeline/<PAIS>/
├── limpieza/ · output del step Limpieza
│ ├── <PAIS>_maestro_productos.csv
│ ├── <pais>_ventas_manana.parquet
│ ├── mapeo_diccionario.json
│ └── rutas/D_<cod_ruta>_ventas.csv *(uno por ruta)*
├── modelado/ · output del step Modelado
│ └── *.csv / *.parquet
└── reglas_negocio/ · output final
└── recomendaciones_<fecha>.csv
Próximos pasos
- Sesión 2 (Mié 20-may) · validar con AJE la decisión de mantener el patrón verbose vs migrar a suffixes abreviados de
aje-cdk-libs(decisión registrada como Opción A en este doc). - Antes de Desarrollo Nivel 2 · al crear los primeros recursos del Nivel 2 (Feature Store, Model Registry), confirmar que sus nombres siguen el patrón propuesto en la tabla (ej.
aje-dev-ps-cliente-features-featurestore,aje-dev-ps-recmodel-EC-sagemaker). - CI guard rail · agregar un check en el CodePipeline
DeployStackstage que falle si algún recurso CDK no matchea el regex^aje-{stage}-ps-[a-z0-9-]+(-[a-z]+)?$. Esto previene drift del estándar a futuro.