

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.

# Fonctionnement de l’importation de données vers DynamoDB depuis Amazon S3
<a name="S3DataImport.HowItWorks"></a>

Pour importer des données dans DynamoDB, celles-ci doivent se trouver dans un compartiment Amazon S3 au format CSV, JSON DynamoDB ou Amazon Ion. Les données peuvent être compressées au format ZSTD ou GZIP, ou peuvent être importées directement sous une forme non compressée. Les données sources peuvent être un seul objet Amazon S3 ou plusieurs objets Amazon S3 qui utilisent le même préfixe.

Vos données seront importées dans une nouvelle table DynamoDB, qui sera créée lorsque vous lancerez la demande d’importation. Vous pouvez créer cette table avec des index secondaires, puis interroger et mettre à jour vos données dans tous les index primaires et secondaires dès que l’importation est terminée. Vous pouvez également ajouter un réplica de table globale une fois l’importation terminée. 

**Note**  
Au cours du processus d’importation Amazon S3, DynamoDB crée une nouvelle table cible pour l’importation. L’importation dans des tables existantes n’est actuellement pas prise en charge par cette fonction.

L’importation depuis Amazon S3 ne consomme pas de capacité d’écriture sur la nouvelle table, vous n’avez donc pas besoin de prévoir de capacité supplémentaire pour importer des données dans DynamoDB. La tarification de l’importation de données est basée sur la taille non compressée des données sources dans Amazon S3, qui est traitée à la suite de l’importation. Les éléments traités mais qui ne parviennent pas à être chargés dans la table en raison d’un formatage ou d’autres incohérences dans les données sources sont également facturés dans le cadre du processus d’importation. Pour plus de détails sur la tarification, consultez [Tarification Amazon DynamoDB](https://aws.amazon.com/dynamodb/pricing).

Vous pouvez importer des données depuis un compartiment S3 appartenant à un autre compte si vous disposez des autorisations appropriées pour lire dans ce compartiment. La nouvelle table peut également se trouver dans une région différente de celle du compartiment Amazon S3 source. Pour de plus amples informations, veuillez consulter [Configuration et autorisations d’Amazon Simple Storage Service](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access.html).

La durée des importations est directement liée aux caractéristiques de vos données dans Amazon S3. Cela inclut la taille des données, le format des données, le schéma de compression, l’uniformité de la distribution des données, le nombre d’objets Amazon S3 et d’autres variables connexes. Plus particulièrement, les ensembles de données dont les clés sont réparties uniformément seront plus rapides à importer que les ensembles de données asymétriques. Par exemple, si la clé de votre index secondaire utilise le mois de l’année pour effectuer le partitionnement, mais que toutes vos données sont du mois de décembre, l’importation de ces données peut prendre beaucoup plus de temps. 

Les attributs associés aux clés doivent être uniques dans la table de base. Si certaines clés ne sont pas uniques, l’importation remplacera les éléments associés jusqu’à ce que seul le dernier remplacement soit conservé. Par exemple, si la clé primaire est le mois et que plusieurs éléments sont définis sur le mois de septembre, chaque nouvel élément remplacera les éléments précédemment écrits et un seul élément avec la clé primaire « mois » définie sur septembre sera conservé. Dans ce cas, le nombre d’éléments traités dans la description de la table d’importation ne correspondra pas au nombre d’éléments de la table cible. 

AWS CloudTrail enregistre toutes les actions de console et d'API pour l'importation de tables. Pour de plus amples informations, veuillez consulter [Journalisation des opérations DynamoDB à l'aide de AWS CloudTrail](logging-using-cloudtrail.md).

La vidéo suivante explique comment importer directement des données depuis Amazon S3 dans DynamoDB.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/fqq0CMOnOaI/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/fqq0CMOnOaI)


**Topics**
+ [

# Demande d'importation de table dans DynamoDB
](S3DataImport.Requesting.md)
+ [

# Formats d’importation Amazon S3 pour DynamoDB
](S3DataImport.Format.md)
+ [

# Quotas de format d’importation et validation
](S3DataImport.Validation.md)
+ [

# Bonnes pratiques pour importer des données depuis Amazon S3 vers DynamoDB
](S3DataImport.BestPractices.md)

# Demande d'importation de table dans DynamoDB
<a name="S3DataImport.Requesting"></a>

L’importation DynamoDB vous permet d’importer depuis un compartiment Amazon S3 versune nouvelle table DynamoDB. [Vous pouvez demander une importation de table à l'aide de la [console DynamoDB](https://console.aws.amazon.com/), de la [CLI [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html)ou de l'API](AccessingDynamoDB.md#Tools.CLI) DynamoDB.](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/Welcome.html)

Si vous souhaitez utiliser le AWS CLI, vous devez d'abord le configurer. Pour de plus amples informations, veuillez consulter [Accès à DynamoDB](AccessingDynamoDB.md).

**Note**  
La fonctionnalité Import Table interagit avec plusieurs AWS services différents tels qu'Amazon S3 et CloudWatch. Avant de commencer une importation, assurez-vous que l'utilisateur ou le rôle qui invoque l'importation APIs est autorisé à accéder à tous les services et ressources dont dépend la fonctionnalité. 
 Ne modifiez pas les objets Amazon S3 pendant que l’importation est en cours, car cela peut entraîner l’échec ou l’annulation de l’opération.
Pour plus d’informations sur les erreurs et le dépannage, consultez [Quotas de format d’importation et validation](S3DataImport.Validation.md)

**Topics**
+ [

## Configuration des autorisations IAM
](#DataImport.Requesting.Permissions)
+ [

## Demande d'importation à l'aide du AWS Management Console
](#S3DataImport.Requesting.Console)
+ [

## Pour en savoir plus sur les importations passées, consultez le AWS Management Console
](#S3DataImport.Requesting.Console.Details)
+ [

## Demande d'importation à l'aide du AWS CLI
](#S3DataImport.Requesting.CLI)
+ [

## Pour en savoir plus sur les importations passées, consultez le AWS CLI
](#S3DataImport.Requesting.CLI.Details)

## Configuration des autorisations IAM
<a name="DataImport.Requesting.Permissions"></a>

Vous pouvez importer des données à partir d’un compartiment Amazon S3 dans lequel vous êtes autorisé à lire. Le compartiment de destination ne doit pas nécessairement se trouver dans la même région ou avoir le même propriétaire que la table source. Votre Gestion des identités et des accès AWS (IAM) doit inclure les actions pertinentes sur le compartiment Amazon S3 source, ainsi que les CloudWatch autorisations requises pour fournir des informations de débogage. Un exemple de stratégie est illustré ci-dessous.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowDynamoDBImportAction",
      "Effect": "Allow",
      "Action": [
        "dynamodb:ImportTable",
        "dynamodb:DescribeImport"
      ],
      "Resource": "arn:aws:dynamodb:us-east-1:111122223333:table/my-table*"
    },
    {
      "Sid": "AllowS3Access",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::your-bucket/*",
        "arn:aws:s3:::your-bucket"
      ]
    },
    {
      "Sid": "AllowCloudwatchAccess",
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:DescribeLogGroups",
        "logs:DescribeLogStreams",
        "logs:PutLogEvents",
        "logs:PutRetentionPolicy"
      ],
      "Resource": "arn:aws:logs:us-east-1:111122223333:log-group/aws-dynamodb/*"
    },
    {
      "Sid": "AllowDynamoDBListImports",
      "Effect": "Allow",
      "Action": "dynamodb:ListImports",
      "Resource": "*"
    }
  ]
}
```

------

### Autorisations Amazon S3
<a name="DataImport.Requesting.Permissions.s3"></a>

Lorsque vous lancez une importation sur une source de compartiment Amazon S3 appartenant à un autre compte, assurez-vous que le rôle ou l’utilisateur a accès aux objets Amazon S3. Vous pouvez vérifier cela en exécutant la commande `GetObject` d’Amazon S3 et en utilisant les informations d’identification. Lors de l’utilisation de l’API, le paramètre propriétaire du compartiment Amazon S3 est défini par défaut sur l’ID de compte de l’utilisateur actuel. Pour les importations entre comptes, assurez-vous que ce paramètre est correctement renseigné avec l’ID de compte du propriétaire du compartiment. Le code suivant est un exemple de politique de compartiment Amazon S3 dans le compte source.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {"Sid": "ExampleStatement",
            "Effect": "Allow",
            "Principal": {"AWS": "arn:aws:iam::123456789012:user/Dave"
            },
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
        }
    ]
}
```

------

### AWS Key Management Service
<a name="DataImport.Requesting.Permissions.kms"></a>

Lorsque vous créez la nouvelle table à importer, si vous sélectionnez une clé de chiffrement au repos qui n'appartient pas à DynamoDB, vous devez fournir les autorisations requises pour exploiter une table DynamoDB chiffrée avec des clés gérées par AWS KMS le client. Pour plus d'informations, voir [Autoriser l'utilisation de votre AWS KMS clé](encryption.usagenotes.html#dynamodb-kms-authz). Si les objets Amazon S3 sont chiffrés avec le chiffrement KMS côté serveur (SSE-KMS), assurez-vous que le rôle ou l'utilisateur à l'origine de l'importation a accès au déchiffrement à l'aide de la clé. AWS KMS Cette fonction ne prend pas en charge les objets Amazon S3 chiffrés avec des clés de chiffrement fournies par le client (SSE-C). 

### CloudWatch autorisations
<a name="DataImport.Requesting.Permissions.cw"></a>

Le rôle ou l’utilisateur qui lance l’importation aura besoin des autorisations de création et de gestion pour le groupe de journaux et les flux de journaux associés à l’importation. 

## Demande d'importation à l'aide du AWS Management Console
<a name="S3DataImport.Requesting.Console"></a>

L’exemple suivant montre comment utiliser la console DynamoDB pour importer une table existante nommée `MusicCollection`.

**Pour demander une importation de table**

1. Connectez-vous à la console DynamoDB AWS Management Console et ouvrez-la à l'adresse. [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)

1. Dans le panneau de navigation sur le côté gauche de la console, choisissez **Importer depuis S3**.

1. Sur la page qui s’affiche, sélectionnez **Import from S3 (Importer depuis S3)**.

1. Choisissez**Import from S3 (Importer depuis S3)**.

1. Dans **URL source S3**, saisissez l’URL source d’Amazon S3.

   Si le compartiment source vous appartient, choisissez **Parcourir S3** pour le rechercher. Vous pouvez également saisir l’URL du compartiment au format suivant : `s3://bucket/prefix`. Le `prefix` est un préfixe de clé Amazon S3. Il s’agit du nom de l’objet Amazon S3 que vous souhaitez importer ou du préfixe de clé partagé par tous les objets Amazon S3 que vous souhaitez importer.
**Note**  
Vous ne pouvez pas utiliser le même préfixe que celui de votre demande d’exportation DynamoDB. La fonctionnalité d’exportation crée une structure de dossiers et des fichiers manifestes pour toutes les exportations. Si vous utilisez le même emplacement Amazon S3, une erreur se produit.   
Dirigez plutôt l’importation vers le dossier qui contient les données de cette exportation spécifique. Dans ce cas, le format du chemin correct est `s3://bucket/prefix/AWSDynamoDB/<XXXXXXXX-XXXXXX>/data/`, où `XXXXXXXX-XXXXXX` est l’ID d’exportation. Vous pouvez trouver l’ID d’exportation dans l’ARN d’exportation, qui a le format suivant : `arn:aws:dynamodb:<Region>:<AccountID>:table/<TableName>/export/<XXXXXXXX-XXXXXX>`. Par exemple, `arn:aws:dynamodb:us-east-1:123456789012:table/ProductCatalog/export/01234567890123-a1b2c3d4`.

1. Spécifiez si vou s êtes le**Propriétaire du compartiment S3**. Si le compartiment source appartient à un autre compte, sélectionnez **Un AWS compte différent**. Ensuite, entrez l’ID de compte du propriétaire du compartiment.

1. Sous **Import file compression (Importer la compression de fichier)**, sélectionnez **No compression (Aucune compression)**, **GZIP** ou **ZSTD** en fonction de vos besoins.

1. Sélectionnez le format de fichier d’importation approprié. Les options sont **JSON DynamoDB**, **Amazon Ion** ou **CSV**. Si vous sélectionnez **CSV**, deux options supplémentaires s’offrent à vous : **CSV header (En-tête CSV)** et **CSV delimiter character (Caractère délimiteur CSV)**.

   Pour **CSV header (En-tête CSV)**, choisissez si l’en-tête doit être extrait de la première ligne du fichier ou s’il doit être personnalisé. Si vous sélectionnez **Customize your headers (Personnalisez vos en-têtes)**, vous pouvez spécifier les valeurs d’en-tête que vous souhaitez importer. Les en-têtes CSV spécifiés par cette méthode respectent la casse et sont censés contenir les clés de la table cible. 

   Pour **CSV delimiter character (Séparateur CSV)**, vous définissez le caractère qui séparera les éléments. La virgule est sélectionnée par défaut. Si vous sélectionnez **Custom delimiter character (Séparateur personnalisé)**, le séparateur doit correspondre au modèle regex : `[,;:|\t ]`.

1. Sélectionnez le bouton **Next (Suivant)**, puis sélectionnez les options de la nouvelle table qui sera créée pour stocker vos données. 
**Note**  
La clé primaire et la clé de tri doivent correspondre aux attributs du fichier, faute de quoi l’importation échouera. Les attributs sont sensibles à la casse.

1. Sélectionnez à nouveau **Next (Suivant)** pour vérifier vos options d’importation, puis cliquez sur **Import (Importer)** pour commencer la tâche d’importation. Vous verrez d’abord votre nouvelle table répertoriée dans les Tables avec le statut Creating (Création en cours). Pour le moment, la table n’est pas accessible.

1. Une fois l’importation terminée, le statut indique Active et vous pouvez commencer à utiliser la table.

## Pour en savoir plus sur les importations passées, consultez le AWS Management Console
<a name="S3DataImport.Requesting.Console.Details"></a>

Vous pouvez trouver des informations sur les tâches d’importation que vous avez exécutées dans le passé en cliquant sur **Import from S3 (Importer depuis S3)** dans la barre latérale de navigation, puis en sélectionnant l’onglet **Imports (Importations)**. Le panneau d’importation contient la liste de toutes les importations que vous avez effectuées au cours des 90 derniers jours. La sélection de l’ARN d’une tâche répertoriée sous l’onglet Imports (Importations) a pour effet d’afficher les informations relatives à cette importation, dont les paramètres de configuration avancés que vous avez choisis.

## Demande d'importation à l'aide du AWS CLI
<a name="S3DataImport.Requesting.CLI"></a>

L’exemple suivant importe des données au format CSV d’un compartiment S3 appelé bucket avec un préfixe dans une nouvelle table appelée target-table.

```
aws dynamodb import-table --s3-bucket-source S3Bucket=bucket,S3KeyPrefix=prefix \ 
            --input-format CSV --table-creation-parameters '{"TableName":"target-table","KeySchema":  \
            [{"AttributeName":"hk","KeyType":"HASH"}],"AttributeDefinitions":[{"AttributeName":"hk","AttributeType":"S"}],"BillingMode":"PAY_PER_REQUEST"}' \ 
            --input-format-options '{"Csv": {"HeaderList": ["hk", "title", "artist", "year_of_release"], "Delimiter": ";"}}'
```

**Note**  
Si vous choisissez de chiffrer votre importation à l'aide d'une clé protégée par AWS Key Management Service (AWS KMS), la clé doit se trouver dans la même région que le compartiment Amazon S3 de destination.

## Pour en savoir plus sur les importations passées, consultez le AWS CLI
<a name="S3DataImport.Requesting.CLI.Details"></a>

Vous pouvez trouver des informations sur des tâches d’importation que vous avez exécutées dans le passé à l’aide de la commande `list-imports`. Cette commande envoie la liste de toutes les importations que vous avez effectuées au cours des 90 derniers jours. Notez que, bien que les métadonnées de tâche d’importation expirent après 90 jours et que les tâches plus anciennes ne figurent plus dans cette liste, DynamoDB ne supprime aucun des objets de votre compartiment Amazon S3 ou de la table créée lors de l’importation.

```
aws dynamodb list-imports
```

Pour extraire des informations détaillées sur une tâche d’importation spécifique, dont ses paramètres de configuration avancés, utilisez la commande `describe-import`.

```
aws dynamodb describe-import \
    --import-arn arn:aws:dynamodb:us-east-1:123456789012:table/ProductCatalog/exp
```

# Formats d’importation Amazon S3 pour DynamoDB
<a name="S3DataImport.Format"></a>

DynamoDB peut importer des données dans trois formats : CSV, JSON DynamoDB et Amazon Ion.

**Topics**
+ [

## CSV
](#S3DataImport.Requesting.Formats.CSV)
+ [

## Json DynamoDB
](#S3DataImport.Requesting.Formats.DDBJson)
+ [

## Amazon Ion
](#S3DataImport.Requesting.Formats.Ion)

## CSV
<a name="S3DataImport.Requesting.Formats.CSV"></a>

Un fichier au format CSV se compose de plusieurs éléments délimités par des sauts de ligne. Par défaut, DynamoDB interprète la première ligne d’un fichier d’importation comme en-tête et s’attend à ce que les colonnes soient délimitées par des virgules. Vous pouvez également définir des en-têtes qui seront appliqués, à condition qu’ils correspondent au nombre de colonnes du fichier. Si vous définissez des en-têtes explicitement, la première ligne du fichier sera importée en tant que valeurs. 

**Note**  
Lors de l’importation à partir de fichiers CSV, toutes les colonnes autres que la plage de hachage et les clés de votre table de base et des index secondaires sont importées en tant que chaînes DynamoDB.

**Échapper les guillemets**

Tous les guillemets présents dans le fichier CSV doivent être échappés. S’ils ne sont pas échappés, comme dans l’exemple suivant, l’importation échoue : 

```
id,value
"123",Women's Full "Length" Dress
```

Cette même importation aboutit si les guillemets sont échappés par deux paires de guillemets :

```
id,value
"""123""","Women's Full ""Length"" Dress"
```

Une fois que le texte a été correctement échappé et importé, il apparaît tel qu’il était dans le fichier CSV d’origine :

```
id,value
"123",Women's Full "Length" Dress
```

**Importation de types d'articles hétérogènes**

Vous pouvez utiliser un seul fichier CSV pour importer différents types d'articles dans un même tableau. Définissez une ligne d'en-tête qui inclut tous les attributs de vos types d'articles et laissez les colonnes vides pour les attributs qui ne s'appliquent pas à un article donné. Les colonnes vides sont omises de l'élément importé plutôt que stockées sous forme de chaînes vides.

```
PK,SK,EntityType,Name,Email,OrderDate,Amount,ProductName,Quantity
USER#1,PROFILE,User,Alice,alice@example.com,,,,
USER#1,ORDER#2024-01-15,Order,,,2024-01-15,99.99,,
USER#1,ORDER#2024-02-10,Order,,,2024-02-10,149.50,,
PRODUCT#101,METADATA,Product,,,,,Laptop,50
PRODUCT#102,METADATA,Product,,,,,Mouse,200
USER#2,PROFILE,User,Bob,bob@example.com,,,,
USER#2,ORDER#2024-01-20,Order,,,2024-01-20,75.00,,
PRODUCT#103,METADATA,Product,,,,,Keyboard,150
USER#3,PROFILE,User,Charlie,charlie@example.com,,,,
PRODUCT#104,METADATA,Product,,,,,Monitor,30
```

Dans cet exemple, les profils utilisateur, les commandes et les produits partagent le même tableau. Chaque type d'élément utilise uniquement les colonnes qui le concernent.

## Json DynamoDB
<a name="S3DataImport.Requesting.Formats.DDBJson"></a>

Un ficher au format JSON DynamoDB peut comprendre plusieurs objets d’éléments. Chaque objet est au format JSON trié standard et des sauts de ligne sont utilisés en tant que délimiteurs d’éléments. En tant que fonction ajoutée, les exportations à partir d’un point dans le temps sont prises en charge en tant que source d’importation par défaut.

**Note**  
Les nouvelles lignes sont utilisées comme délimiteurs d’éléments pour un fichier au format DynamoDB JSON et ne doivent pas être utilisées dans un objet d’élément.

```
{"Item": {"Authors": {"SS": ["Author1", "Author2"]}, "Dimensions": {"S": "8.5 x 11.0 x 1.5"}, "ISBN": {"S": "333-3333333333"}, "Id": {"N": "103"}, "InPublication": {"BOOL": false}, "PageCount": {"N": "600"}, "Price": {"N": "2000"}, "ProductCategory": {"S": "Book"}, "Title": {"S": "Book 103 Title"}}}
{"Item": {"Authors": {"SS": ["Author1", "Author2"]}, "Dimensions": {"S": "8.5 x 11.0 x 1.5"}, "ISBN": {"S": "444-444444444"}, "Id": {"N": "104"}, "InPublication": {"BOOL": false}, "PageCount": {"N": "600"}, "Price": {"N": "2000"}, "ProductCategory": {"S": "Book"}, "Title": {"S": "Book 104 Title"}}}
{"Item": {"Authors": {"SS": ["Author1", "Author2"]}, "Dimensions": {"S": "8.5 x 11.0 x 1.5"}, "ISBN": {"S": "555-5555555555"}, "Id": {"N": "105"}, "InPublication": {"BOOL": false}, "PageCount": {"N": "600"}, "Price": {"N": "2000"}, "ProductCategory": {"S": "Book"}, "Title": {"S": "Book 105 Title"}}}
```

## Amazon Ion
<a name="S3DataImport.Requesting.Formats.Ion"></a>

[Amazon Ion](https://amzn.github.io/ion-docs/) est un format de sérialisation de données hiérarchique riche, auto-descriptif et conçu pour répondre aux défis de développement rapide, de découplage et d'efficacité rencontrés lors de la conception d'architectures orientées service à grande échelle.

Lorsque vous importez des données au format Ion, les types de données Ion sont mappés à des types de données DynamoDB dans la nouvelle table DynamoDB.


| Nº de série | Conversion du type de données Ion en DynamoDB | B | 
| --- | --- | --- | 
| `1` | `Ion Data Type` | `DynamoDB Representation` | 
| `2` | `string` | `String (s)` | 
| `3` | `bool` | `Boolean (BOOL)` | 
| `4` | `decimal` | `Number (N)` | 
| `5` | `blob` | `Binary (B)` | 
| `6` | `list (with type annotation $dynamodb_SS, $dynamodb_NS, or $dynamodb_BS)` | `Set (SS, NS, BS)` | 
| `7` | `list` | `List` | 
| `8` | `struct` | `Map` | 

Les éléments d’un fichier Ion sont délimités par des sauts de ligne. Chaque ligne commence par un marqueur de version Ion, suivi d'un élément au format Ion.

**Note**  
Dans l’exemple suivant, un élément d’un fichier au format Ion a été mis en forme sur plusieurs lignes par souci de lisibilité.

```
$ion_1_0
[
  {
    Item:{
      Authors:$dynamodb_SS::["Author1","Author2"],
      Dimensions:"8.5 x 11.0 x 1.5",
      ISBN:"333-3333333333",
      Id:103.,
      InPublication:false,
      PageCount:6d2,
      Price:2d3,
      ProductCategory:"Book",
      Title:"Book 103 Title"
    }
  },
  {
    Item:{
      Authors:$dynamodb_SS::["Author1","Author2"],
      Dimensions:"8.5 x 11.0 x 1.5",
      ISBN:"444-4444444444",
      Id:104.,
      InPublication:false,
      PageCount:6d2,
      Price:2d3,
      ProductCategory:"Book",
      Title:"Book 104 Title"
    }
  },
  {
    Item:{
      Authors:$dynamodb_SS::["Author1","Author2"],
      Dimensions:"8.5 x 11.0 x 1.5",
      ISBN:"555-5555555555",
      Id:105.,
      InPublication:false,
      PageCount:6d2,
      Price:2d3,
      ProductCategory:"Book",
      Title:"Book 105 Title"
    }
  }
]
```

# Quotas de format d’importation et validation
<a name="S3DataImport.Validation"></a>

## Quotas d'importation
<a name="S3DataImport.Validation.limits"></a>

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 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](ServiceQuotas.html).

## Erreurs de validation
<a name="S3DataImport.Validation.Errors"></a>

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 comptabilise 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
<a name="S3DataImport.Validation.Errors.API"></a>

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
<a name="S3DataImport.Validation.Errors.Data"></a>

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\$1JSON, mais l’objet n’est pas dans DYNAMODB\$1JSON) et la non-correspondance de schéma avec les clés de table source spécifiées.

### Erreurs de configuration
<a name="S3DataImport.Validation.Errors.Configuration"></a>

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](encryption.usagenotes.html#dynamodb-kms). 

### Validation des objets Amazon S3 sources
<a name="S3DataImport.Validation.Errors.S3Objects"></a>

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\$1JSON, DYNAMODB\$1ION, 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 

1. 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
<a name="S3DataImport.Validation.Troubleshooting"></a>

#### CloudWatch journaux
<a name="S3DataImport.Validation.Troubleshooting.Cloudwatch"></a>

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
<a name="S3DataImport.Validation.Troubleshooting.Missing"></a>

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
<a name="S3DataImport.Validation.Troubleshooting.TargetTable"></a>

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
<a name="S3DataImport.Validation.Troubleshooting.Bucket"></a>

Si le compartiment source n'existe pas, l'importation échouera et les détails du message d'erreur seront consigné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 `FailureMessage` 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.

# Bonnes pratiques pour importer des données depuis Amazon S3 vers DynamoDB
<a name="S3DataImport.BestPractices"></a>

Les bonnes pratiques ci-dessous s’appliquent à l’importation de données depuis Amazon S3 vers DynamoDB

## Non dépassement de la limite de 50 000 objets S3
<a name="S3DataImport.BestPractices.S3Limit"></a>

Chaque tâche d’importation prend en charge 50 000 objets S3 au maximum. Si votre jeu de données contient plus de 50 000 objets, envisagez de les regrouper en objets de taille supérieure.

## Éviter les objets S3 trop volumineux
<a name="S3DataImport.BestPractices.AvoidLargeObjects"></a>

Les objets S3 sont importés en parallèle. Le fait de disposer de nombreux objets S3 de taille moyenne permet une exécution parallèle sans surcharge excessive. Pour les éléments de moins de 1 Ko, envisagez de placer 4 000 000 d’éléments dans chaque objet S3. Si la taille moyenne de vos objets est plus grande, placez proportionnellement moins d’éléments dans chaque objet S3.

## Rendre les données triées aléatoires
<a name="S3DataImport.BestPractices.RandomizeSortedData"></a>

Si un objet S3 contient des données dans un ordre trié, il peut créer une *partition dynamique*. Dans cette situation, une partition reçoit toute l’activité, puis la partition suivante, etc. Les données triées sont définies en tant qu’éléments en séquence dans l’objet S3 qui seront écrits sur la même partition cible lors de l’importation. Une situation courante dans laquelle les données sont triées est un fichier CSV dans lequel les éléments sont triés par clé de partition, afin que les éléments répétés partagent la même clé de partition.

Pour éviter de créer une partition dynamique, nous vous recommandons de choisir un ordre aléatoire pour ces cas. Cela peut améliorer les performances, en répartissant les opérations d’écriture. Pour de plus amples informations, veuillez consulter [Distribution efficace de l’activité d’écriture pendant le chargement de données dans DynamoDB](bp-partition-key-data-upload.md).

## Compresser les données pour maintenir la taille totale des objets S3 en dessous de la limite régionale
<a name="S3DataImport.BestPractices.CompressData"></a>

Dans le [processus d’importation depuis S3](S3DataImport.Requesting.md), la taille totale des données d’objet S3 à importer est limitée. La limite est de 15 To dans les régions us-east-1, us-west-2 et eu-west-1, et 1 To dans toutes les autres Régions. La limite est basée sur les tailles brutes des objets S3.

La compression permet à un plus grand nombre de données brutes de respecter la limite. Si la compression à elle seule ne suffit pas à maintenir l’importation dans les limites, vous pouvez également contacter le [Support Premium AWS](https://aws.amazon.com/premiumsupport/) pour obtenir une augmentation du quota.

## Noter l’impact de la taille de l’élément sur les performances
<a name="S3DataImport.BestPractices.ItemSize"></a>

Si la taille moyenne de vos éléments est très petite (inférieure à 200 octets), le processus d’importation peut prendre un peu plus de temps que pour les éléments de grande taille.

## Ne modifiez pas les objets S3 pendant les importations actives
<a name="S3DataImport.BestPractices.NoModification"></a>

Assurez-vous que vos objets S3 source restent inchangés pendant qu'une opération d'importation est en cours. Si un objet S3 est modifié lors d'une importation, l'opération échouera avec le code d'erreur `ObjectModifiedInS3DuringImport` et le message « L'objet S3 n'a pas pu être importé car il a été remplacé ».

Si vous rencontrez cette erreur, redémarrez l'opération d'importation avec une version stable de votre objet S3. Pour éviter ce problème, attendez que l'importation en cours soit terminée avant de modifier les fichiers source.

## Envisager d’importer sans aucun index secondaire global
<a name="S3DataImport.BestPractices.GSI"></a>

La durée d'une tâche d'importation peut dépendre de la présence d'un ou de plusieurs index secondaires globaux (GSIs). Si vous prévoyez de créer des index avec des clés de partition à faible cardinalité, vous pouvez accélérer l’importation si vous repoussez la création de l’index après la fin de la tâche d’importation (plutôt que de les inclure dans la tâche d’importation).

**Note**  
La création d'un GSI n'entraîne pas de frais d'écriture, qu'il soit créé pendant ou après l'importation.