Quotas de format d’importation et validation - Amazon DynamoDB

Quotas de format d’importation et validation

Quotas d’importation

L’importation vers DynamoDB depuis Amazon S3 peut prendre en charge jusqu’à 50 tâches d’importation simultanées avec une taille d’objet d’importation totale de 15 To à la fois dans les régions us-east-1, us-west-2, us-west-1. Dans toutes les autres régions, jusqu’à 50 tâches d’importation simultanées d’une taille totale de 1 To sont prises en charge. Chaque tâche d’importation peut prendre jusqu’à 50 000 objets Amazon S3 dans toutes les régions. Ces quotas par défaut sont appliqués à tous les comptes. Si vous pensez avoir besoin de modifier ces quotas, veuillez contacter votre équipe chargée de compte, qui examinera la situation au cas par cas. Pour plus d’informations sur les limites de DynamoDB, consultez Quotas de service.

Erreurs de validation

Au cours du processus d’importation, DynamoDB peut rencontrer des erreurs lors de l’analyse de vos données. Pour chaque erreur, DynamoDB émet un journal CloudWatch et tient un décompte du nombre total d’erreurs rencontrées. Si l’objet Amazon S3 lui-même est mal formé ou si son contenu ne peut pas former un élément DynamoDB, nous pouvons ignorer le traitement de la partie restante de l’objet.

Note

Si la source de données Amazon S3 contient plusieurs éléments qui partagent la même clé, ces éléments seront remplacés jusqu’à ce qu’il en reste un. Cela peut donner l’impression qu’un élément a été importé et que les autres ont été ignorés. Les éléments dupliqués seront remplacés dans un ordre aléatoire, ne seront pas comptabilisés comme des erreurs et ne seront pas transmis aux journaux CloudWatch.

Une fois l’importation terminée, vous pouvez voir le nombre total d’éléments importés, le nombre total d’erreurs et le nombre total d’éléments traités. Pour un dépannage plus approfondi, vous pouvez également vérifier la taille totale des éléments importés et la taille totale des données traitées.

Il existe trois catégories d’erreurs d’importation : les erreurs de validation d’API, les erreurs de validation des données et les erreurs de configuration.

Erreurs de validation d’API

Les erreurs de validation d’API sont des erreurs au niveau des éléments provenant de l’API de synchronisation. Les causes courantes sont les problèmes d’autorisation, l’absence de paramètres requis et les échecs de validation des paramètres. Les détails sur les raisons de l’échec de l’appel d’API figurent dans les exceptions générées par la demande ImportTable.

Erreurs de validation

Des erreurs de validation des données peuvent se produire au niveau de l’article ou du fichier. Lors de l’importation, les éléments sont validés en fonction des règles DynamoDB avant d’être importés dans la table cible. Lorsqu’un article échoue à la validation et n’est pas importé, la tâche d’importation ignore cet élément et continue avec l’élément suivant. À la fin de la tâche, l’état de l’importation est défini sur FAILED (échec) avec un FailureCode, une ItemValidationError et le message FailureMessage « Certains éléments ont échoué aux contrôles de validation et n’ont pas été importés. Consultez les journaux d’erreurs CloudWatch pour plus d’informations. »

Les causes courantes des erreurs de validation des données sont les objets non analysables, le format incorrect des objets (l’entrée spécifie DYNAMODB_JSON, mais l’objet n’est pas dans DYNAMODB_JSON) et la non-correspondance de schéma avec les clés de table source spécifiées.

Erreurs de configuration

Les erreurs de configuration sont généralement des erreurs de workflow dues à la validation des autorisations. Le flux de travail d’importation vérifie certaines autorisations après avoir accepté la demande. En cas de problème lors de l’appel de l’une des dépendances requises, comme Amazon S3 ou CloudWatch, le processus marque l’état de l’importation comme FAILED (échec). failureCode et failureMessage indiquent la raison de l’échec. Le cas échéant, le message d’échec contient également l’ID de demande que vous pouvez utiliser pour rechercher la raison de l’échec dans CloudTrail.

Les erreurs de configuration courantes incluent l’URL erronée pour le compartiment Amazon S3 et le fait de ne pas avoir l’autorisation d’accéder au compartiment Amazon S3, à CloudWatch Logs, et les clés AWS KMS utilisées pour déchiffrer l’objet Amazon S3. Pour de plus amples informations, veuillez consulter Utilisation des clés KMS et des clés de données.

Validation des objets Amazon S3 sources

Pour valider les objets S3 sources, réalisez les étapes suivantes.

  1. Validez le format des données et le type de compression

    • Assurez-vous que tous les objets Amazon S3 correspondants sous le préfixe spécifié ont le même format (DYNAMODB_JSON, DYNAMODB_ION, CSV)

    • Assurez-vous que tous les objets Amazon S3 correspondants sous le préfixe spécifié sont compressés de la même manière (GZIP, ZSTD, NONE)

      Note

      Les objets Amazon S3 n’ont pas besoin de l’extension correspondante (.csv/.json/.ion/.gz/.zstd, etc.) car le format d’entrée spécifié dans l’appel ImportTable a priorité.

  2. Vérifiez que les données d’importation sont conformes au schéma de table souhaité

    • Assurez-vous que chaque élément des données sources possède la clé primaire. Une clé de tri est facultative pour les importations.

    • Assurez-vous que le type d’attribut associé à la clé primaire et à toute clé de tri correspond au type d’attribut de la table et du schéma GSI, comme spécifié dans les paramètres de création de table

Résolution des problèmes

CloudWatch Logs

Pour les tâches d’importation qui échouent, des messages d’erreur détaillés sont publiés dans les journaux CloudWatch. Pour accéder à ces journaux, récupérez d’abord ImportARN à partir de la sortie et describe-import à l’aide de cette commande :

aws dynamodb describe-import --import-arn arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table/import/01658528578619-c4d4e311 }

Exemple de sortie :

aws dynamodb describe-import --import-arn "arn:aws:dynamodb:us-east-1:531234567890:table/target-table/import/01658528578619-c4d4e311" { "ImportTableDescription": { "ImportArn": "arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table/import/01658528578619-c4d4e311", "ImportStatus": "FAILED", "TableArn": "arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table", "TableId": "7b7ecc22-302f-4039-8ea9-8e7c3eb2bcb8", "ClientToken": "30f8891c-e478-47f4-af4a-67a5c3b595e3", "S3BucketSource": { "S3BucketOwner": "ACCOUNT", "S3Bucket": "my-import-source", "S3KeyPrefix": "import-test" }, "ErrorCount": 1, "CloudWatchLogGroupArn": "arn:aws:logs:us-east-1:ACCOUNT:log-group:/aws-dynamodb/imports:*", "InputFormat": "CSV", "InputCompressionType": "NONE", "TableCreationParameters": { "TableName": "target-table", "AttributeDefinitions": [ { "AttributeName": "pk", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "pk", "KeyType": "HASH" } ], "BillingMode": "PAY_PER_REQUEST" }, "StartTime": 1658528578.619, "EndTime": 1658528750.628, "ProcessedSizeBytes": 70, "ProcessedItemCount": 1, "ImportedItemCount": 0, "FailureCode": "ItemValidationError", "FailureMessage": "Some of the items failed validation checks and were not imported. Please check CloudWatch error logs for more details." } }

Récupérez le groupe de journaux et l’ID d’importation de la réponse ci-dessus et utilisez-les pour récupérer les journaux d’erreurs. L’ID d’importation est le dernier élément de chemin du champ ImportArn. Le nom du groupe de journaux est /aws-dynamodb/imports. Le nom du flux de journaux d’erreurs est import-id/error. Pour cet exemple, ce serait 01658528578619-c4d4e311/error.

Il manque la clé pk dans l’élément

Si l’objet S3 source ne contient pas la clé primaire fournie en tant que paramètre, l’importation échouera. Par exemple, lorsque vous définissez la clé primaire pour l’importation en tant que nom de colonne « pk ».

aws dynamodb import-table —s3-bucket-source S3Bucket=my-import-source,S3KeyPrefix=import-test.csv \ —input-format CSV --table-creation-parameters '{"TableName":"target-table","KeySchema": \ [{"AttributeName":"pk","KeyType":"HASH"}],"AttributeDefinitions":[{"AttributeName":"pk","AttributeType":"S"}],"BillingMode":"PAY_PER_REQUEST"}'

La colonne « pk » est absente de l’objet source import-test.csv qui a le contenu suivant :

title,artist,year_of_release The Dark Side of the Moon,Pink Floyd,1973

Cette importation échouera en raison d’une erreur de validation d’élément due à l’absence de clé primaire dans la source de données.

Exemple de journal des erreurs CloudWatch :

aws logs get-log-events —log-group-name /aws-dynamodb/imports —log-stream-name 01658528578619-c4d4e311/error { "events": [ { "timestamp": 1658528745319, "message": "{\"itemS3Pointer\":{\"bucket\":\"my-import-source\",\"key\":\"import-test.csv\",\"itemIndex\":0},\"importArn\":\"arn:aws:dynamodb:us-east-1:531234567890:table/target-table/import/01658528578619-c4d4e311\",\"errorMessages\":[\"One or more parameter values were invalid: Missing the key pk in the item\"]}", "ingestionTime": 1658528745414 } ], "nextForwardToken": "f/36986426953797707963335499204463414460239026137054642176/s", "nextBackwardToken": "b/36986426953797707963335499204463414460239026137054642176/s" }

Ce journal d’erreurs indique que « une ou plusieurs valeurs de paramètre n’étaient pas valides : il manquait la clé pk dans l’élément ». Comme cette tâche d’importation a échoué, la table « target-table » existe désormais et elle est vide car aucun élément n’a été importé. Le premier élément a été traité et la validation de l’objet a échoué.

Pour résoudre le problème, supprimez d’abord « target-table » si elle n’est plus nécessaire. Ensuite, utilisez un nom de colonne de clé primaire qui existe dans l’objet source ou mettez à jour les données source pour :

pk,title,artist,year_of_release Albums::Rock::Classic::1973::AlbumId::ALB25,The Dark Side of the Moon,Pink Floyd,1973

La table cible existe

Lorsque vous démarrez une tâche d’importation et que vous recevez une réponse comme suit :

An error occurred (ResourceInUseException) when calling the ImportTable operation: Table already exists: target-table

Pour corriger cette erreur, vous devez choisir un nom de table qui n’existe pas déjà et réessayer l’importation.

Le compartiment spécifié n’existe pas

Si le compartiment source n’existe pas, l’importation échouera et consignera les détails du message d’erreur dans Cloudwatch.

Exemple de description de l’importation :

aws dynamodb —endpoint-url $ENDPOINT describe-import —import-arn "arn:aws:dynamodb:us-east-1:531234567890:table/target-table/import/01658530687105-e6035287" { "ImportTableDescription": { "ImportArn": "arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table/import/01658530687105-e6035287", "ImportStatus": "FAILED", "TableArn": "arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table", "TableId": "e1215a82-b8d1-45a8-b2e2-14b9dd8eb99c", "ClientToken": "3048e16a-069b-47a6-9dfb-9c259fd2fb6f", "S3BucketSource": { "S3BucketOwner": "531234567890", "S3Bucket": "BUCKET_DOES_NOT_EXIST", "S3KeyPrefix": "import-test" }, "ErrorCount": 0, "CloudWatchLogGroupArn": "arn:aws:logs:us-east-1:ACCOUNT:log-group:/aws-dynamodb/imports:*", "InputFormat": "CSV", "InputCompressionType": "NONE", "TableCreationParameters": { "TableName": "target-table", "AttributeDefinitions": [ { "AttributeName": "pk", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "pk", "KeyType": "HASH" } ], "BillingMode": "PAY_PER_REQUEST" }, "StartTime": 1658530687.105, "EndTime": 1658530701.873, "ProcessedSizeBytes": 0, "ProcessedItemCount": 0, "ImportedItemCount": 0, "FailureCode": "S3NoSuchBucket", "FailureMessage": "The specified bucket does not exist (Service: Amazon S3; Status Code: 404; Error Code: NoSuchBucket; Request ID: Q4W6QYYFDWY6WAKH; S3 Extended Request ID: ObqSlLeIMJpQqHLRX2C5Sy7n+8g6iGPwy7ixg7eEeTuEkg/+chU/JF+RbliWytMlkUlUcuCLTrI=; Proxy: null)" } }

Le FailureCode est S3NoSuchBucket, avec le FailureMessag contenant des détails tels que l’identifiant de la demande et le service qui a généré l’erreur. Étant donné que l’erreur a été détectée avant l’importation des données dans la table, aucune nouvelle table DynamoDB n’est créée. Dans certains cas, lorsque ces erreurs se produisent après le début de l’importation des données, la table contenant des données partiellement importées est conservée.

Pour corriger cette erreur, assurez-vous que le compartiment Amazon S3 source existe, puis redémarrez le processus d’importation.