¿Cómo soluciono los problemas de operaciones por lotes de Amazon S3?

10 minutos de lectura
0

Cuando creo un trabajo de operaciones por lotes de Amazon Simple Storage Service (Amazon S3) para los objetos de mi bucket, Amazon S3 devuelve un error o el trabajo por lotes falla.

Breve descripción

Si se produce un problema en un trabajo de operaciones por lotes de Amazon S3 que impide que se ejecute correctamente, el trabajo falla. Un trabajo que falla genera uno o más códigos de error y motivos. Para ver los códigos de error y los motivos de una operación por lotes de Amazon S3, solicite los detalles del trabajo. También puede revisar los códigos de error y los motivos en el informe de finalización del trabajo.

Para evitar que los trabajos ejecuten un gran número de operaciones fallidas, Amazon S3 impone un umbral de fallo de tareas en cada trabajo de operaciones por lotes. Amazon S3 supervisa la tasa de errores de las tareas después de ejecutar al menos 1000 tareas. Si un trabajo supera la tasa de errores del 50 %, el trabajo falla. Para resolver este fallo, revise las causas de los errores y corríjalas antes de volver a enviar el trabajo.

Solución

El formato del archivo de manifiesto (.csv o JSON) es incorrecto

Las operaciones por lotes de Amazon S3 admiten archivos de manifiesto .csv y JSON (informe de Amazon S3 Inventory). Si el archivo de manifiesto no es correcto, debe crear un nuevo trabajo por lotes en Amazon S3 y especificar el formato correcto.

  • Para el informe de inventario de Amazon S3, utilice un informe con formato CSV y especifique el archivo manifest.json asociado al informe de inventario.

  • En el caso de los archivos.csv, incluya el nombre del bucket y la clave de objeto en cada fila del archivo de manifiesto. Si lo desea, incluya la versión del objeto. Si incluye los ID de versión en el manifiesto, debe especificar los ID de todos los objetos. De lo contrario, no incluya ningún ID de versión. Las claves de objeto deben estar codificadas en URL.

    Nota: Si los objetos del manifiesto están en un bucket con control de versiones, debe especificar los ID de versión de los objetos. De lo contrario, el trabajo por lotes fallará o Amazon S3 podría aplicar el trabajo por lotes a la versión incorrecta del objeto.

Para obtener más información, consulte Especificar un manifiesto.

El archivo de manifiesto especifica varios nombres de bucket o contiene varias filas de encabezado

Con las operaciones por lotes de S3, todos los objetos que se enumeran en el archivo de manifiesto deben estar en el mismo bucket. De lo contrario, recibirá el siguiente error:

«Reasons for failure: Cannot have more than 1 bucket per Job. JOB_ID»

En los trabajos de operaciones por lotes de S3, asegúrese de que el archivo de manifiesto especifique solo un nombre de bucket y no contenga ninguna fila de encabezado. En este ejemplo, Amazon S3 devuelve un error porque el archivo de manifiesto contiene varias filas de encabezado.

bucket,key
my-batch-bucket,object001.txt
my-batch-bucket,object002.txt
my-batch-bucket,object003.txt
my-batch-bucket,object004.txt

El rol de IAM no tiene todos los permisos para leer el archivo de manifiesto

El rol de AWS Identity and Access Management (IAM) que crea el trabajo de operaciones por lotes de S3 debe tener permisos de lectura de GetObject para el archivo de manifiesto. Compruebe los metadatos del objeto para ver si el acceso no coincide con la propiedad del objeto de S3. Además, busque claves de AWS Key Management Service (AWS KMS) no compatibles que cifren el archivo de manifiesto.

Si el rol de IAM no tiene los permisos correctos, recibirá estos errores al crear un trabajo de operaciones por lotes de S3:

Ejemplo de error de la AWS CLI

«Reason for failure Reading the manifest is forbidden: AccessDenied»

Nota: Si recibe errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Errores de solución de problemas de la AWS CLI. Además, asegúrese de utilizar la versión más reciente.

Ejemplo de error en la consola de Amazon S3

«Warning: Unable to get the manifest object's ETag. Specify a different object to continue»

Nota: Las operaciones por lotes de S3 admiten informes de inventario de CSV cifrados por AWS KMS. Las operaciones por lotes de S3 no admiten archivos de manifiesto .csv cifrados por AWS KMS. Para obtener más información, consulte Configuración del inventario mediante la consola de S3.

El trabajo por lotes se encuentra en una región diferente

Los trabajos de copia de las operaciones por lotes de S3 deben estar en la misma región de AWS que el bucket de destino en el que se copian los objetos. Cuando cree un trabajo por lotes, seleccione la misma región que su bucket de destino. Por ejemplo, si el bucket de destino se encuentra en la región us-west-2, seleccione us-west-2 como región para el trabajo por lotes.

Falta el bucket de destino de su informe de inventario de S3

Debe haber un bucket de destino para el manifiesto que genera las operaciones por lotes de S3. La política de bucket de Amazon S3 también debe permitir la acción s3:PutObject. Si el informe se envía a otra cuenta de AWS, confirme que el bucket de destino permite que el rol de IAM realice la acción s3:PutObject.

Falta la política de confianza del rol de IAM

Nota: Asegúrese de especificar un rol de IAM y no un usuario de IAM.

La política de confianza de un rol de IAM define las condiciones que deben cumplirse para que otras entidades principales lo asuman. Para permitir que la entidad principal de servicio de las operaciones por lotes de S3 asuma el rol de IAM, asocie una política de confianza al rol.

El siguiente ejemplo de política de confianza concede el acceso a Amazon S3, a la vez que reduce los riesgos asociados a la escalada de privilegios:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "batchoperations.s3.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Faltan los permisos de IAM para crear un trabajo por lotes

Antes de crear y ejecutar trabajos de operaciones por lotes de S3, conceda los permisos necesarios al rol de IAM. Si el rol de IAM no cuenta con los permisos necesarios para realizar el trabajo de operaciones por lotes de S3, el trabajo por lotes fallará.

Para crear un trabajo de operaciones por lotes de S3, conceda los permisos s3:CreateJob al rol de IAM. La misma entidad que crea el trabajo también debe tener los permisos iam:PassRole. Esto permite a la entidad transferir el rol de IAM que especifique para el trabajo por lotes. Para obtener más información, consulte Elementos de política JSON de IAM: Resource.

Falta el acceso al bucket de origen, al informe de inventario de S3 o al bucket de destino

Asegúrese de que el rol de IAM que utiliza para las operaciones por lotes de S3 tiene los permisos necesarios para realizar el trabajo por lotes.

A continuación, se muestra un ejemplo de política de IAM para la operación de copia:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:PutObjectTagging"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::{{DestinationBucket}}/*"
    },
    {
      "Action": [
        "s3:GetObject",
        "s3:GetObjectAcl",
        "s3:GetObjectTagging",
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::{{SourceBucket}}",
        "arn:aws:s3:::{{SourceBucket}}/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:GetObjectVersion"
      ],
      "Resource": [
        "arn:aws:s3:::{{ManifestBucket}}/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::{{ReportBucket}}/*"
      ]
    }
  ]
}

Para obtener más información, consulte Concesión de permisos para operaciones por lotes de S3.

La SCP de Organizations es restrictiva

Si utiliza AWS Organizations, confirme que no haya ninguna instrucción de denegación que deniegue el acceso a Amazon S3. Por ejemplo, si la política de control de servicio (SCP) deniega explícitamente todas las acciones de S3, podría aparecer un error de acceso denegado al crear un trabajo por lotes.

El siguiente ejemplo de política deniega explícitamente todas las acciones de S3:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Principal": "*",
      "Effect": "Deny",
      "Action": "s3:*",
      "Resource": "*"
    }
  ]
}

Si tiene previsto aplicar una política restrictiva, puede incluir el rol de IAM que las operaciones por lotes de S3 utilizarán para realizar la operación en la lista de permitidos. En el siguiente ejemplo se añade una excepción a la política:

{
  "Version": "2012-10-17",
  "Statement": \[
    {
      "Principal": "\*",
      "Effect": "Deny",
      "Action": "s3:\*",
      "Resource": "\*",
      "Condition": {
        "StringNotLike": {
          "aws:userId": \[
            "AROAEXAMPLEID:\*",
            "AIDAEXAMPLEID",
            "111111111111"
          \]
        }
      }
    }
  \]
}

Falta el ID de versión de un objeto en el manifiesto

Si un trabajo de operaciones por lotes encuentra un objeto en el manifiesto con un campo de ID de versión vacío, recibirá este error:

«Error: BUCKET_NAME,prefix/file_name,failed,400,InvalidRequest,Task failed due to missing VersionId»

Si el formato del manifiesto usa ID de versión durante la operación, el campo ID de versión no puede ser una cadena vacía. En su lugar, el campo ID de versión debe ser una cadena «nula». Los trabajos sin control de versiones no encuentran este error. Funcionan en la versión más reciente de cada objeto y no en los ID de versión que se encuentran en el manifiesto. Para corregir este error, convierta los ID de versión vacíos en cadenas nulas.

Nota: Las operaciones por lotes fallan para ese objeto en particular, pero no para todo el trabajo.

El informe del trabajo no se entrega cuando el modo de retención de bloqueo de objetos de Amazon S3 está activado

Al configurar el modo de retención de bloqueo de objetos en un bucket de destino en el modo de control o en el modo de conformidad, podría recibir este error:

«Error: Reasons for failure. The job report could not be written to your bucket. Please check your permissions»

Amazon S3 no admite el bloqueo de objetos para los buckets de destino con configuraciones de modo de retención. Cuando se configura el modo de retención, el bucket está protegido contra escritura única y lectura múltiple (WORM). Para corregir este error, elija un bucket de destino para los informes de finalización del trabajo que no tenga configurado el modo de retención de bloqueo de objetos.

Nota: El error se produce en el informe de finalización, no en el trabajo. El trabajo se completa correctamente y todos los objetos se procesan.

Las versiones de la ETag no coinciden

Al especificar el manifiesto en el trabajo de operaciones por lotes, puede especificar la clave del objeto del manifiesto, la ETag y el ID de versión opcional. Cuando especifique el archivo de manifiesto, compruebe que el valor de la ETag coincide con la ETag de la última versión del objeto del manifiesto en el bucket de S3. En la pestaña Operaciones por lotes de la consola de Amazon S3, compruebe la ETag del objeto del manifiesto en las propiedades del archivo de manifiesto. En la AWS CLI, compruebe el valor de la ETag que supera la especificación del manifiesto.

Si la ETag rellenada que se encuentra en la consola o en la AWS CLI no coincide con la ETag del bucket de S3, se produce el siguiente error:

«Error reading the manifest. Caused by: ETag mismatch. Expected ETag: 69f52a4e9f797e987155d9c8f5880897»

Anote la ETag esperada en este error y asegúrese de que ambas versiones de la ETag coincidan. Para obtener más información, consulte Especificar un manifiesto.

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 7 meses