Comment résoudre les problèmes liés aux opérations par lot Amazon S3 ?

Lecture de 10 minute(s)
0

Lorsque je crée une tâche d'opérations par lot Amazon Simple Storage Service (Amazon S3) pour les objets de mon compartiment, Amazon S3 renvoie une erreur. ou la tâche par lot échoue.

Brève description

Lorsqu’une tâche d’opérations par lot Amazon S3 rencontre un problème qui l'empêche de s'exécuter correctement, elle échoue. Son échec génère alors un ou plusieurs codes et motifs d'échec. Pour connaître les codes et les motifs de l’échec d'une opération par lot Amazon S3, vous pouvez demander des informations sur la tâche. Vous pouvez également consulter les codes et motifs d'échec dans le rapport de fin de tâche.

Pour éviter que les tâches n'exécutent un grand nombre d'opérations défaillantes, Amazon S3 impose un seuil d'échec à chaque tâche d'opérations par lot. Amazon S3 surveille le taux d'échec des tâches après l'exécution d'au moins 1 000 tâches. Si le taux d'échec va au-delà de 50 %, la tâche échoue. Pour résoudre ce problème, vous devez examiner et éliminer les causes des échecs. Soumettez ensuite à nouveau le travail.

Résolution

Le format du fichier manifeste est incorrect (.csv ou JSON)

Les opérations par lot Amazon S3 prennent en charge les fichiers manifestes .csv et JSON (rapport d'inventaire Amazon S3). Si le fichier manifeste n'est pas correct, vous devez créer un nouvelle tâche par lot dans Amazon S3 et spécifier le format approprié.

  • Pour le rapport d'inventaire Amazon S3, utilisez un rapport au format CSV et spécifiez le fichier manifest.json associé au rapport d'inventaire.

  • Pour les fichiers .csv, vous devez inclure le nom du compartiment et la clé d'objet dans chaque ligne du fichier manifeste. Vous pouvez éventuellement inclure la version de l'objet. Si vous incluez des ID de version dans le manifeste, vous devez spécifier des ID pour tous les objets. Dans le cas contraire, n'incluez aucun ID de version. Les clés d'objet doivent être codées en URL.

    Remarque : Si les objets de votre manifeste se trouvent dans un compartiment versionné, vous devez spécifier les ID de version des objets. Dans le cas contraire, la tâche par lot échouera. Amazon S3 risque également d’appliquer la tâche par lot à la mauvaise version de l'objet.

Pour en savoir plus, consultez la section Spécification d'un manifeste.

Le fichier manifeste spécifie plusieurs noms de compartiments ou contient plusieurs lignes d'en-tête

Dans le cadre des opérations par lot S3, tous les objets répertoriés dans le fichier manifeste doivent se trouver dans le même compartiment. Dans le cas contraire, le message d'erreur suivant s'affiche :

« Raisons de l'échec : Il ne peut pas y avoir plus d'un compartiment par tâche. JOB_ID »

Pour les tâches d’opérations par lot S3, vérifiez que votre fichier manifeste ne spécifie qu'un seul nom de compartiment et ne contient aucune ligne d'en-tête. Dans l'exemple suivant, Amazon S3 renvoie une erreur car le fichier manifeste contient plusieurs lignes d'en-tête.

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

Le rôle IAM ne dispose pas des autorisations nécessaires pour lire le fichier manifeste

Le rôle AWS Identity and Access Management (IAM) qui crée la tâche d’opérations par lot S3 doit posséder les autorisations GetObject lui permettant de lire le fichier manifeste. Examinez les métadonnées de l'objet pour détecter d’éventuelles incompatibilités d'accès avec la propriété de l'objet S3. Recherchez également tout problème de prise en charge au niveau des clés AWS Key Management Service (AWS KMS) utilisées pour chiffrer le fichier manifeste.

Si le rôle IAM ne dispose pas des autorisations appropriées, vous recevrez les erreurs suivantes au moment de créer une tâche d’opérations par lot S3 :

Exemple d'erreur pour AWS CLI :

« Motif de l'échec La lecture du manifeste est interdite : Accès refusé »

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résolution des erreurs liées à l'interface AWS CLI. Vérifiez également que vous utilisez la version la plus récente de l'interface.

Exemple d'erreur pour la console Amazon S3 :

« Avertissement : Impossible d'obtenir l'ETag de l'objet manifeste. Vous devez spécifier un autre objet pour continuer »

Remarque : Les opérations par lot S3 prennent en charge les rapports d’inventaire CSV chiffrés par AWS KMS. Les opérations par lot S3 ne prennent pas en charge les fichiers manifestes .csv chiffrés par AWS KMS. Pour en savoir plus, consultez la section Configuration de l'inventaire à l'aide de la console S3.

La tâche par lots appartient à une autre région

Les tâches de copie des opérations par lot S3 doivent se trouver dans la même région AWS que le compartiment de destination vers lequel les objets seront copiés. Lorsque vous créez une tâche par lot, vous devez donc sélectionner la même région que celle de votre compartiment de destination. Par exemple, si le compartiment de destination se trouve dans la région us-west-2, sélectionnez us-west-2 comme région pour la tâche par lot.

Le compartiment cible pour votre rapport d'inventaire S3 est manquant

Le manifeste généré par les opérations par lot S3 doit disposer d’un compartiment cible. La politique du compartiment Amazon S3 doit également autoriser l'action s3:PutObject. Si le rapport est envoyé à un autre compte AWS, vérifiez que le compartiment cible autorise le rôle IAM à exécuter l'action s3:PutObject..

La politique de confiance du rôle IAM est manquante

Remarque : Assurez-vous de spécifier un rôle IAM et non un utilisateur IAM.

La politique de confiance pour un rôle IAM définit les conditions qui doivent être remplies pour que les autres principaux puissent l'assumer. Pour permettre au principal du service d’opérations par lot S3 d'assumer le rôle IAM, vous devez attacher une politique de confiance au rôle.

L’exemple de politique de confiance suivant accorde l'accès à Amazon S3. Cette méthode réduit les risques associés à l’escalade de privilèges :

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

Les autorisations IAM pour créer une tâche par lots sont manquantes

Avant de créer et d'exécuter des tâches d’opérations par lot S3, vous devez accorder au rôle IAM les autorisations requises. Si votre rôle IAM ne dispose pas des autorisations requises pour exécuter la tâche d’opérations par lot S3, celle-ci échouera.

Vous devez accorder au rôle IAM les autorisations S3:CreateJob pour pouvoir créer une tâche d’opérations par lot s3. La même entité qui crée la tâche doit également disposer des autorisations IAM:PassRole. Elle peut ainsi transmettre le rôle IAM que vous avez spécifié pour la tâche par lot. Pour en savoir plus, consultez la section Éléments de politique JSON IAM : « Resource ».

L'accès au compartiment source, au rapport d'inventaire S3 ou au compartiment de destination est manquant

Vérifiez que le rôle IAM que vous utilisez pour les opérations par lot S3 possède les autorisations requises pour effectuer la tâche par lot.

Voici un exemple de politique IAM pour l'opération de copie :

{
  "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}}/*"
      ]
    }
  ]
}

Pour en savoir plus, consultez la section Octroi d'autorisations pour les opérations par lot Amazon S3.

La politique de contrôle des services (SCP) d'AWS Organizations est restrictive

Si vous utilisez AWS Organizations, vous devez vérifier qu'aucune instruction de type Deny ne refuse l'accès à Amazon S3. Supposons par exemple que votre politique de contrôle des services (SCP) refuse explicitement toutes les actions S3. Vous risquez alors d’obtenir le message d'erreur Accès refusé lorsque vous créez une tâche par lot.

Vous trouverez ci-dessous un exemple de politique qui refuse explicitement toutes les actions S3 :

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

Pour appliquer une politique restrictive, ajoutez le rôle IAM utilisé par les opérations de lot S3 à la liste des rôles autorisés. Cet exemple ajoute une exception à la politique :

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

L'ID de version d'un objet est absent du manifeste

Si une tâche d’opérations par lot rencontre un objet dans le manifeste dont le champ d'ID de version est vide, vous recevrez l'erreur suivante :

« Erreur : BUCKET_NAME,prefix/file_name, échec, 400, demande non valide, échec de la tâche en raison d'un ID de version manquant »

Si le format du manifeste utilise les ID de version au cours de l'opération, le champ d'ID de version ne peut pas être une chaîne vide. À la place, le champ d'ID de version doit être une chaîne « null ». Cette erreur ne survient pas dans le cadre de tâches non versionnées. Celles-ci utilisent en effet la version la plus récente de chaque objet plutôt que les ID de version figurant dans le manifeste. Pour résoudre ce problème, vous devez convertir les ID de version vides en chaînes « null ».

Remarque : Les opérations par lot échoueront pour cet objet en particulier, mais pas pour l'ensemble de la tâche.

Le rapport de tâche n'est pas envoyé lorsque le mode de rétention Amazon S3 Object Lock est activé

Lorsque vous configurez le mode de rétention Object Lock sur un compartiment de destination en mode gouvernance ou en mode conformité, vous pouvez recevoir l'erreur suivante :

« Erreur : Motifs de l'échec. Impossible d’écrire le rapport de tâche dans votre compartiment. Veuillez vérifier vos autorisations. »

Amazon S3 ne prend pas en charge Object Lock dans le cadre de compartiments de destination configurés en mode de rétention. Lorsque le mode de rétention est configuré, le compartiment bénéficie d’une protection WORM (Write-Once-Read-Many). Pour résoudre ce problème, vous devez choisir un compartiment de destination pour vos rapports de fin de tâche pour lequel le mode de rétention Object Lock n'est pas configuré.

**Remarque :**Ce n’est pas la tâche qui échoue, mais le rapport de fin de tâche. La tâche a donc été effectuée correctement et tous les objets ont été traités.

Les versions de l'eTag ne sont pas identiques

Lorsque vous spécifiez le manifeste dans la tâche d'opérations par lots, vous pouvez spécifier la clé de l'objet du manifeste, l'ETag, ainsi qu’un ID de version facultatif. Au moment de spécifier le fichier manifeste, vous devez vérifier que la valeur de l'ETag correspond à l'ETag de la dernière version de l'objet manifeste dans le compartiment S3. Dans l'onglet Opérations par lots de la console Amazon S3, examinez l’ETag de l’objet manifeste dans les propriétés du fichier manifeste. Dans l'interface AWS CLI, vérifiez la valeur de l'Etag transmise par la spécification du manifeste.

Si la valeur ETag renseignée dans la console ou dans l'interface AWS CLI ne correspond pas à celle du compartiment S3, l'erreur suivante se produit :

« Erreur lors de la lecture du manifeste. Causé par : ETag incompatible. ETag attendu : 69f52a4e9f797e987155d9c8f5880897 »

Notez l'ETag attendu qui apparaît dans cette erreur et assurez-vous que les deux versions d’ETag correspondent. Pour en savoir plus, consultez la section Spécification d'un manifeste.

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 6 mois