Quotas de format d'importation et validation - Amazon DynamoDB

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

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 en charge 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 revoir ces quotas, veuillez contacter l'équipe chargée de votre compte, qui étudiera cette question de case-by-case manière approfondie. 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 CloudWatch un journal et enregistre le 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 sont pas considérés comme des erreurs et ne sont pas envoyés dans les CloudWatch journaux.

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 du travail, le statut d'importation est défini sur ÉCHEC avec un FailureCode, ItemValidationError et le message FailureMessage « Certains des éléments ont échoué aux vérifications de validation et n'ont pas été importés ». Consultez les journaux CloudWatch d'erreurs pour plus de détails. »

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. Si vous rencontrez des problèmes pour appeler l'une des dépendances requises, comme Amazon S3, ou si CloudWatch le processus marque le statut d'importation comme FAILED. failureCode et failureMessage indiquent la raison de l'échec. Le cas échéant, le message d'échec contient également l'identifiant de demande que vous pouvez utiliser pour rechercher la raison de l'échec CloudTrail.

Parmi les erreurs de configuration courantes, citons le fait d'avoir une URL incorrecte pour le compartiment Amazon S3 et de ne pas avoir l'autorisation d'accéder au compartiment Amazon S3, aux CloudWatch journaux et aux AWS KMS clés utilisés 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 est prioritaire. ImportTable

  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 journaux

Pour les tâches d'importation qui échouent, des messages d'erreur détaillés sont publiés dans les CloudWatch journaux. Pour accéder à ces journaux, récupérez-les d'abord dans la ImportArn sortie et décrivez-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 CloudWatch erreurs :

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 les détails du message d'erreur seront enregistrés 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.