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 created

Crear 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

  1. Espera a ACTIVE. Consulta DescribeTable y comprueba cada GlobalSecondaryIndexes[].IndexStatus; solo continúa cuando sea ACTIVE.
    aws dynamodb describe-table --table-name <Table> \
      --query "Table.GlobalSecondaryIndexes[].{Name:IndexName,Status:IndexStatus}"
    La descripción del índice también lleva un booleano Backfilling (false = asignación de recursos, true = backfilling), y la métrica de CloudWatch OnlineIndexPercentageProgress sigue la construcción.
  2. Secuencia los cambios de índice — una creación/eliminación por UpdateTable; no añadas un nuevo GSI mientras otro se construye.
  3. En CloudFormation/Terraform, reparte las adiciones de GSI en despliegues separados para que cada backfill se complete antes del siguiente cambio.
  4. 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

Errores relacionados

Referencias

Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.

Trabaja con DynamoDB sin la Consola

Un cliente de escritorio rápido para DynamoDB que ejecuta el SQL real que DynamoDB no puede — JOINs, GROUP BY, agregaciones — con edición visual y un agente de IA con tus propias claves de Bedrock.

Prueba gratuita de 30 días, sin tarjeta — después, el plan Free sin límite de tiempo.