Intentando modificar un GSI que se está creando
TL;DR — Mientras se construye un índice secundario global (IndexStatus = CREATING), DynamoDB rechaza cambios estructurales conflictivos. Durante la fase inicial de asignación de recursos, no puede modificar el nuevo índice, cambiar el rendimiento aprovisionado del índice o de la tabla, agregar o eliminar otros índices, ni eliminar la tabla. Una vez que comienza el reabastecimiento, puede eliminar el índice en tránsito o cambiar el rendimiento de la tabla/GSI nuevamente, pero agregar o eliminar otros índices y eliminar la tabla permanece bloqueado hasta que sea ACTIVE. Realice GSI cambios uno a la vez: uno cree o elimine cada UpdateTable.
Qué significa
ValidationException: Attempting to modify a GSI that is being createdCrear un GSI sobre una tabla poblada dispara un backfill — DynamoDB reproduce los items existentes en el nuevo índice en segundo plano. Durante toda esa fase el IndexStatus del índice es CREATING. Durante el backfill DynamoDB rechaza más cambios estructurales al índice o a la tabla para que la construcción se mantenga consistente. Es un HTTP 400 ValidationException; reintentar de inmediato falla hasta que el índice termine.
Por qué ocurre
- Operaciones de índice solapadas — un
UpdateTable(o un apply de IaC) intenta modificar/eliminar un GSI, o añadir un segundo, mientras el primero sigue construyéndose. - Agrupamiento de CloudFormation/Terraform — la herramienta intenta múltiples cambios de GSI en una sola actualización; DynamoDB solo permite una creación o eliminación de GSI por
UpdateTable. - Cambio de throughput durante la asignación de recursos — mientras el nuevo índice aún está asignando recursos (
Backfilling: false), no puedes modificar el throughput aprovisionado de ese índice ni de la tabla; esos cambios se permiten de nuevo una vez que empieza el backfilling. - Eliminar la tabla demasiado pronto — un desmontaje que compite con el backfill.
Cómo solucionarlo
- Espera a
ACTIVE. ConsultaDescribeTabley comprueba cadaGlobalSecondaryIndexes[].IndexStatus; solo continúa cuando seaACTIVE.La descripción del índice también lleva un booleanoaws dynamodb describe-table --table-name <Table> \ --query "Table.GlobalSecondaryIndexes[].{Name:IndexName,Status:IndexStatus}"Backfilling(false = asignación de recursos, true = backfilling), y la métrica de CloudWatchOnlineIndexPercentageProgresssigue la construcción. - Secuencia los cambios de índice — una creación/eliminación por
UpdateTable; no añadas un nuevo GSI mientras otro se construye. - En CloudFormation/Terraform, reparte las adiciones de GSI en despliegues separados para que cada backfill se complete antes del siguiente cambio.
- Aplaza otros cambios de índice y la eliminación de la tabla hasta que el índice esté
ACTIVE. ¿Necesitas abortar? Una vez que ha empezado el backfilling, puedes cancelar la construcción eliminando el índice que se está creando.
Antes de reintentar en DynoTable
Mientras un GSI está en CREATING, abre la tabla en DynoTable y vigila el estado del índice en los detalles de la tabla antes de encolar otro UpdateTable. La app refresca DescribeTable mientras navegas — cuando el IndexStatus pasa a ACTIVE, el índice aparece en el selector de patrones de consulta y puedes hacerle una Query desde el modo Visual o desde el query builder.
No acumules cambios de GSI de CloudFormation/Terraform en un solo apply mientras DynoTable siga mostrando CREATING. Secuencia los despliegues; usa DynoTable como el panel de estado de referencia entre applies. Si necesitas cancelar una construcción después de que empiece el backfilling, elimina ese índice desde tu IaC/CLI y luego confirma que desaparece de la lista de índices de DynoTable.
Fuentes
- Managing Global Secondary Indexes (verificado 2026-07-13)
- UpdateTable — Amazon DynamoDB API Reference (verificado 2026-07-13)
Errores relacionados
- Local secondary indexes must be specified at table creation — el equivalente de LSI (los LSI no se pueden añadir en absoluto).
- ResourceInUseException — operar sobre una tabla/índice que no está en un estado modificable.
- Requested resource not found / index not found — consultar un índice que no está listo o no existe.
- Aprende: GSI vs LSI · Internos de los GSI
Referencias
- Managing Global Secondary Indexes in DynamoDB — Amazon DynamoDB Developer Guide
- UpdateTable — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.