Résolution des problèmes liés à S3 Batch Operations
Vous pouvez utiliser Amazon S3 Batch Operations pour effectuer des opérations par lot à grande échelle sur des objets Amazon S3. Ce guide vous aide à résoudre les problèmes courants que vous pourriez rencontrer.
Pour résoudre les problèmes liés à la réplication par lot S3, consultez Résolution des problèmes de réplication.
Il existe deux principaux types d’échecs qui entraînent des erreurs :
-
Échec de l’API : l’exécution de l’API demandée (par exemple,
CreateJob) a échoué. -
Échec de la tâche : la demande d’API initiale a abouti, mais la tâche a échoué, par exemple en raison de problèmes liés au manifeste ou aux autorisations d’accès aux objets spécifiés dans le manifeste.
NoSuchJobException
Type : échec de l’API
L’exception NoSuchJobException se produit lorsque S3 Batch Operations ne parvient pas à localiser la tâche spécifiée. Cette erreur peut se produire dans plusieurs scénarios autres que la simple expiration d’une tâche. Les causes sont généralement les suivantes.
Expiration de la tâche : les tâches sont automatiquement supprimées 90 jours après avoir atteint l’état terminal (
Complete,CancelledouFailed).ID de tâche incorrect : l’ID de la tâche utilisé dans
DescribeJobouUpdateJobStatusne correspond pas à l’ID renvoyé parCreateJob.Mauvaise région : tentative d’accès à une tâche dans une autre région que celle où elle a été créée.
Mauvais compte : utilisation d’un ID de tâche provenant d’un autre compte AWS.
Erreurs de format de l’ID de tâche : fautes de frappe, caractères supplémentaires ou mise en forme incorrecte de l’ID de tâche.
Problèmes de synchronisation : vérification du statut de la tâche immédiatement après sa création, avant qu’elle ne soit complètement enregistrée.
Les messages d’erreur associés sont les suivants.
No such jobThe specified job does not exist
Bonnes pratiques pour éviter les échecs de l’API NoSuchJobException
Stocker les ID de tâche immédiatement : enregistrez l’ID de tâche indiqué dans la réponse
CreateJobavant d’effectuer les appels d’API suivants.Implémenter une logique de nouvelle tentative : ajoutez un backoff exponentiel lors de la vérification du statut de la tâche immédiatement après sa création.
Configurer une surveillance : créez des alarmes CloudWatch pour suivre l’achèvement des tâches avant l’expiration des 90 jours. Pour plus de détails, consultez Utilisation des alarmes Amazon CloudWatch dans le Guide de l’utilisateur Amazon CloudWatch.
Faire preuve de cohérence dans l’utilisation des régions : assurez-vous que toutes les opérations utilisent la même région pour la création de tâches.
Valider la saisie : vérifiez le format de l’ID de tâche avant d’effectuer des appels d’API.
Quand les tâches expirent
Les tâches à l’état terminal sont automatiquement supprimées après 90 jours. Pour éviter des perdre des informations sur les tâches, tenez compte des points suivants.
Télécharger les rapports d’achèvement avant l’expiration : pour obtenir des instructions sur la récupération et le stockage des résultats des tâches, consultez .
Archiver les métadonnées des tâches dans vos propres systèmes : stockez les informations critiques des tâches dans vos bases de données ou vos systèmes de surveillance.
Configurer des notifications automatiques avant le délai de 90 jours : utilisez Amazon EventBridge pour créer des règles qui déclenchent des notifications lorsque les tâches sont terminées. Pour plus d’informations, consultez Notifications d’événements Amazon S3.
NoSuchJobExceptionRésolution des problèmes liés à
Utilisez la commande suivante pour vérifier que la tâche existe dans votre compte et dans votre région.
aws s3control list-jobs --account-id111122223333--regionus-east-1Utilisez la commande suivante pour effectuer une recherche parmi tous les statuts de tâche. Les statuts de tâche possibles sont
Active,Cancelled,Cancelling,Complete,Completing,Failed,Failing,New,Paused,Pausing,Preparing,ReadyetSuspended.aws s3control list-jobs --account-id111122223333--job-statusesyour-job-statusUtilisez la commande suivante pour vérifier si la tâche existe dans d’autres régions dans lesquelles vous créez fréquemment des tâches.
aws s3control list-jobs --account-id111122223333--regionjob-region-1aws s3control list-jobs --account-id111122223333--regionjob-region-2-
Validez le format de l’ID de tâche. Les ID de tâche contiennent généralement 36 caractères, par exemple
12345678-1234-1234-1234-123456789012. Vérifiez s’ils ne comportent pas d’espaces supplémentaires, de caractères manquants ou de problèmes de casse, et vérifiez que vous utilisez l’ID de tâche complet renvoyé par la commandeCreateJob. -
Utilisez la commande suivante pour vérifier les événements de création de tâches dans les journaux CloudTrail.
aws logs filter-log-events --log-group-name CloudTrail/S3BatchOperations \ --filter-pattern "{ $.eventName = CreateJob }" \ --start-timetimestamp
AccessDeniedException
Type : échec de l’API
L’exception AccessDeniedException se produit lorsqu’une demande S3 Batch Operations est bloquée en raison d’autorisations insuffisantes, d’opérations non prises en charge ou de restrictions de politiques. Il s’agit de l’une des erreurs les plus courantes de Batch Operations. Les causes sont généralement les suivantes :
Autorisations IAM manquantes : l’identité IAM ne dispose pas des autorisations requises pour les API Batch Operations.
Autorisations S3 insuffisantes : autorisations manquantes pour accéder aux compartiments et aux objets source ou de destination.
Problèmes liés au rôle d’exécution des tâches : le rôle d’exécution des tâches ne dispose pas des autorisations nécessaires pour effectuer l’opération spécifiée.
Opérations non prises en charge : tentative d’utilisation d’opérations non prises en charge dans la région ou le type de compartiment en cours.
Problèmes d’accès intercompte : autorisations manquantes pour les accès intercomptes aux compartiments ou aux objets.
Restrictions des stratégies basées sur les ressources : stratégies de compartiment ou listes ACL d’objets bloquant l’opération.
Restrictions de la politique de contrôle des services (SCP) : politiques au niveau de l’organisation empêchant l’opération.
Messages d’erreur associés :
Access DeniedUser: arn:aws:iam::account:user/username is not authorized to perform: s3:operationCross-account pass role is not allowedThe bucket policy does not allow the specified operation
Bonnes pratiques pour éviter les échecs de l’API AccessDeniedException
Utiliser le principe du moindre privilège : accordez uniquement les autorisations minimales requises pour vos opérations spécifiques.
Tester les autorisations avant des tâches de grande ampleur : exécutez de petites tâches en guise de test pour valider les autorisations avant de traiter des milliers d’objets.
Utiliser le simulateur de politiques IAM : testez les politiques avant leur déploiement à l’aide du simulateur de politiques IAM. Pour plus d’informations, consultez Test des politiques IAM avec le simulateur de politiques IAM dans le Guide de l’utilisateur IAM.
Mettre en œuvre une configuration d’accès intercompte appropriée : vérifiez votre configuration d’accès intercompte pour les configurations de tâches intercomptes. Pour plus d’informations, consultez Didacticiel IAM : Délégation de l’accès entre des comptes AWS à l’aide de rôles IAM dans le Guide de l’utilisateur IAM.
Surveiller les modifications des autorisations : configurez des alertes CloudTrail pour surveiller les modifications de politiques IAM susceptibles d’affecter Batch Operations.
Documenter les exigences des rôles : conservez une documentation claire des autorisations requises pour chaque type de tâche.
Utiliser des modèles d’autorisation courants : utilisez les exemples d’autorisations et les modèles de politiques :
Ressources intercomptes dans IAM dans le Guide de l’utilisateur IAM.
Utilisation des stratégies de point de terminaison pour contrôler l’accès aux points de terminaison d’un VPC dans le Guide AWS PrivateLink.
Résolution des problèmes liés à l’API AccessDeniedException
Suivez systématiquement ces étapes pour identifier et résoudre les problèmes d’autorisation.
Consultez Opérations prises en charge par S3 Batch Operations pour connaître les opérations prises en charge par région. Vérifiez que les opérations sur les compartiments de répertoires ne sont disponibles qu’aux points de terminaison régionaux et zonaux. Vérifiez que l’opération est prise en charge par la classe de stockage de votre compartiment.
Utilisez la commande suivante afin de déterminer si vous pouvez répertorier les tâches.
aws s3control list-jobs --account-id111122223333Utilisez la commande suivante pour vérifier les autorisations IAM de l’identité demandeuse. Le compte exécutant la tâche doit disposer des autorisations suivantes :
s3:CreateJob,s3:DescribeJob,s3:ListJobs-s3:UpdateJobPriority,s3:UpdateJobStatus-iam:PassRole.aws sts get-caller-identity111122223333Utilisez la commande suivante pour vérifier si le rôle existe et peut être endossé.
aws iam get-role --role-namerole-name-
Utilisez la commande suivante pour passer en revue la stratégie d’approbation du rôle. Le rôle exécutant la tâche doit inclure les éléments suivants :
Relation d’approbation permettant à
batchoperations.s3.amazonaws.comd’endosser ce rôle.Opérations effectuées par la fonctionnalité Opération par lot (par exemple,
s3:PutObjectTaggingpour les opérations de balisage).Accès aux compartiments source et de destination.
Autorisation de lire le fichier manifeste.
Autorisation de rédiger des rapports d’achèvement.
aws iam get-role --role-namerole-name--query 'Role.AssumeRolePolicyDocument' Utilisez la commande suivante pour rétablir l’accès au manifeste et aux compartiments source.
aws s3 ls s3://bucket-name-
Testez l’opération effectuée par Batch Operations. Par exemple, si celle-ci effectue un balisage, balisez un exemple d’objet dans le compartiment source.
Passez en revue les stratégies de compartiment pour identifier celles susceptibles de refuser l’opération.
Vérifiez les listes ACL des objets si vous utilisez des contrôles d’accès existants.
Vérifiez qu’aucune politique de contrôle des services (SCP) ne bloque l’opération.
Vérifiez que les politiques de point de terminaison d’un VPC autorisent Batch Operations si vous utilisez des points de terminaison d’un VPC.
Utilisez la commande suivante pour utiliser CloudTrail afin d’identifier les échecs d’autorisation.
aws logs filter-log-events --log-group-name CloudTrail/S3BatchOperations \ --filter-pattern "{ $.errorCode = AccessDenied }" \ --start-timetimestamp
SlowDownError
Type : échec de l’API
L’exception SlowDownError se produit lorsque votre compte a dépassé le taux de demandes limite de S3 Batch Operations. Il s’agit d’un mécanisme de limitation qui empêche le service d’être submergé par un trop grand nombre de demandes. Les causes sont généralement les suivantes :
Fréquence élevée des demandes d’API : trop grand nombre d’appels d’API en peu de temps.
Tâches simultanées : plusieurs applications ou utilisateurs créent/gèrent des tâches simultanément.
Scripts automatisés sans limitation de débit : scripts qui ne mettent pas en œuvre de stratégies de backoff appropriées.
Interrogation trop fréquente du statut des tâches : vérification du statut des tâches plus fréquente que nécessaire.
Modèles de trafic en rafale : pics soudains d’utilisation des API pendant les périodes de traitement de pointe.
Limites de la capacité régionale : dépassement de la capacité de demande allouée pour votre région.
Messages d’erreur associés :
SlowDownPlease reduce your request rateRequest rate exceeded
Bonnes pratiques pour éviter les échecs de l’API SlowDownError
Implémenter une limitation du débit côté client : ajoutez des délais entre les appels d’API dans vos applications.
Utiliser un backoff exponentiel avec de la gigue : répartissez de manière aléatoire les délais de nouvelle tentative pour éviter les problèmes de bousculade.
Configurer une logique de nouvelle tentative appropriée : implémentez des tentatives automatiques avec des délais croissants pour les erreurs transitoires.
Utiliser des architectures basées sur les événements : remplacez les interrogations par des notifications EventBridge pour les changements de statut des tâches.
Répartir la charge dans le temps : échelonnez la création de tâches et les vérifications de statut sur différentes périodes.
Surveiller les limites de débit et recevoir des alertes : configurez des alarmes CloudWatch pour détecter quand vous approchez des limites.
La plupart des kits AWS SDK intègrent une logique de nouvelle tentative pour limiter les erreurs de débit. Configurez-la comme suit :
AWS CLI : utilisez les paramètres
cli-read-timeoutetcli-connect-timeout.Kit AWS SDK pour Python (Boto3) : configurez les modes de nouvelle tentative et le nombre maximal de tentatives dans la configuration de votre client.
Kit AWS SDK pour Java : utilisez les paramètres
RetryPolicyetClientConfiguration.Kit AWS SDK pour JavaScript : configurez
maxRetriesetretryDelayOptions.
Pour plus d’informations sur les modèles de nouvelle tentative et les bonnes pratiques, consultez Nouvelle tentative avec un schéma de backoff dans le Guide Recommandations AWS.
Résolution des problèmes liés à l’API SlowDownError
Dans votre code, implémentez immédiatement un backoff exponentiel.
Exemple de backoff exponentiel dans bash
for attempt in {1..5}; do if aws s3control describe-job --account-id111122223333--job-idjob-id; then break else wait_time=$((2**attempt)) echo "Rate limited, waiting ${wait_time} seconds..." sleep $wait_time fi done-
Utilisez CloudTrail pour identifier la source du volume élevé de demandes.
aws logs filter-log-events \ --log-group-name CloudTrail/S3BatchOperations \ --filter-pattern "{ $.eventName = CreateJob || $.eventName = DescribeJob }" \ --start-timetimestamp\ --query 'events[*].[eventTime,sourceIPAddress,userIdentity.type,eventName]' Vérifiez la fréquence d’interrogation.
Évitez de vérifier le statut des tâches actives plus d’une fois toutes les 30 secondes.
Utilisez les notifications d’achèvement des tâches au lieu d’interroger ces dernières lorsque cela est possible.
Intégrez de la gigue dans vos intervalles d’interrogation pour éviter les demandes synchronisées.
-
Optimisez les modèles d’utilisation de vos API.
Regroupez plusieurs opérations lorsque cela est possible.
Utilisez
ListJobspour obtenir le statut de plusieurs tâches en un seul appel.Mettez en cache les informations relatives aux tâches afin de réduire les appels d’API redondants.
Répartissez la création des tâches dans le temps au lieu d’en créer plusieurs simultanément.
-
Utilisez les métriques CloudWatch pour les appels d’API afin de surveiller vos modèles de demandes.
aws logs put-metric-filter \ --log-group-name CloudTrail/S3BatchOperations \ --filter-name S3BatchOpsAPICallCount \ --filter-pattern "{ $.eventSource = s3.amazonaws.com && $.eventName = CreateJob }" \ --metric-transformations \ metricName=S3BatchOpsAPICalls,metricNamespace=Custom/S3BatchOps,metricValue=1
InvalidManifestContent
Type : échec de la tâche
L’exception InvalidManifestContent se produit lorsque des problèmes de format, de contenu ou de structure du fichier manifeste empêchent S3 Batch Operations de traiter la tâche. Les causes sont généralement les suivantes :
Violations de format : colonnes obligatoires manquantes, délimiteurs incorrects ou mauvaise structure CSV.
Problèmes de codage du contenu : codage des caractères, marqueurs de nomenclature incorrects, ou caractères non UTF-8.
Problèmes liés à la clé d’objet : caractères non valides, codage en URL incorrect ou clés dépassant les limites de longueur maximale.
Limites de taille : le manifeste contient plus d’objets que ce que l’opération prend en charge.
Erreurs de format des ID de version : ID de version mal formés ou non valides pour les objets dont la gestion des versions est active.
Problèmes de format des balises d’entité : format incorrect des balises d’entité ou guillemets manquants pour les opérations nécessitant des balises d’entité.
Données incohérentes : formats mixtes dans le même manifeste ou nombre de colonnes incohérent.
Messages d’erreur associés :
Required fields are missing in the schema: + missingFieldsInvalid Manifest ContentThe S3 Batch Operations job failed because it contains more keys than the maximum allowed in a single jobInvalid object key formatManifest file is not properly formattedInvalid version ID formatETag format is invalid
Bonnes pratiques pour empêcher les échecs des tâches InvalidManifestContent
Valider avant le chargement : testez le format du manifeste avec de petites tâches avant de traiter de grands jeux de données.
Utiliser un codage cohérent : utilisez toujours le codage UTF-8 sans nomenclature pour les fichiers manifestes.
Mettre en œuvre des normes de génération de manifestes : créez des modèles et des procédures de validation pour la création de manifestes.
Gérer correctement les caractères spéciaux : codez en URL les clés d’objet contenant des caractères spéciaux.
Surveiller le nombre d’objets : suivez la taille du manifeste et répartissez les tâches volumineuses de manière proactive.
Valider l’existence des objets : vérifiez que les objets existent avant de les inclure dans des manifestes.
Utiliser des outils AWS pour la génération des manifestes : utilisez AWS CLI
s3api list-objects-v2pour générer des listes d’objets correctement formatées.
Problèmes courants liés aux manifestes et solutions correspondantes :
Colonnes requises manquantes : assurez-vous que votre manifeste inclut toutes les colonnes requises pour votre type d’opération. Les colonnes les plus couramment manquantes sont Compartiment et Clé.
Format CSV incorrect : utilisez des virgules comme délimiteurs, veillez à ce que le nombre de colonnes soit cohérent sur toutes les lignes et évitez les sauts de ligne dans les champs.
Caractères spéciaux dans les clés d’objet : les clés d’objet codées en URL contiennent des espaces, des caractères Unicode ou des caractères spéciaux XML (<, >, &, «, ’).
Fichiers manifestes volumineux : divisez les manifestes dépassant la limite d’opérations en plusieurs manifestes plus petits et créez des tâches distinctes.
ID de version non valides : assurez-vous que les ID de version sont correctement formatés sous forme de chaînes alphanumériques. Supprimez la colonne des ID de version si elle n’est pas nécessaire.
Problèmes de codage : enregistrez les fichiers manifestes au format UTF-8 sans nomenclature. Évitez de copier des manifestes avec des systèmes susceptibles de modifier le codage.
Pour obtenir des spécifications détaillées et des exemples de format de manifeste, consultez ce qui suit :
Résolution des problèmes liés à l’API InvalidManifestContent
Téléchargez et inspectez le fichier manifeste. Vérifiez manuellement que le manifeste répond aux exigences de format :
Format CSV séparé par des virgules.
Codage des caractères UTF-8 sans nomenclature.
Nombre homogènes de colonnes sur toutes les lignes.
Absence de lignes vides et d’espaces de fin.
Clés d’objet correctement codées en URL si elles contiennent des caractères spéciaux.
Utilisez la commande suivante pour télécharger le fichier manifeste.
aws s3 cp s3://amzn-s3-demo-bucket1/manifest-key./manifest.csv-
Vérifiez les colonnes requises pour votre opération :
Toutes les opérations :
Bucket,KeyOpérations de copie :
VersionId(facultatif)Opérations de restauration :
VersionId(facultatif)Opérations de remplacement de balises : aucune colonne supplémentaire n’est requise.
Opérations de remplacement de listes ACL : aucune colonne supplémentaire n’est requise.
Initiation de restauration :
VersionId(facultatif)
-
Vérifiez les nombres limites d’objets :
Copie : 1 milliard d’objets maximum.
Suppression : 1 milliard d’objets maximum.
Restauration : 1 milliard d’objets maximum.
Balisage : 1 milliard d’objets maximum.
Liste ACL : 1 milliard d’objets maximum.
-
Créez un manifeste de test avec quelques objets de votre manifeste d’origine.
-
Utilisez la commande suivante pour vérifier s’il existe un échantillon d’objets du manifeste.
aws s3 ls s3://amzn-s3-demo-bucket1/object-key -
Vérifiez les détails de l’échec de la tâche et passez en revue le motif de l’échec ainsi que les détails concernant les erreurs spécifiques dans la description de la tâche.
aws s3control describe-job --account-id111122223333--job-idjob-id