Utilisation d'Amazon S3 comme source pour AWS DMS - AWS Service de Migration de Base de Données

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.

Utilisation d'Amazon S3 comme source pour AWS DMS

Vous pouvez migrer des données depuis un compartiment Amazon S3 à l'aide de AWS DMS. Pour ce faire, fournissez un accès à un compartiment Amazon S3 contenant un ou plusieurs fichiers de données. Dans ce compartiment S3, incluez un fichier JSON qui décrit la mise en correspondance entre les données et les tables de base de données de ces données dans ces fichiers.

Les fichiers de données source doivent être présents dans le compartiment Amazon S3 avant que le chargement complet ne démarre. Vous spécifiez le nom de compartiment à l'aide du paramètre bucketName.

Les fichiers de données sources peuvent être dans les formats suivants :

Pour les fichiers de données source au format de valeurs séparées par des virgules (.csv), nommez-les selon la convention de dénomination suivante. Dans cette convention, schemaName est le schéma source et tableName est le nom d'une table dans ce schéma.

/schemaName/tableName/LOAD001.csv /schemaName/tableName/LOAD002.csv /schemaName/tableName/LOAD003.csv ...

Par exemple, supposons que vos fichiers de données se trouvent dans mybucket au chemin Amazon S3 suivant.

s3://mybucket/hr/employee

Au moment du chargement, AWS DMS suppose que le nom du schéma source est hr et que le nom de la table source estemployee.

En plus de bucketName (ce qui est obligatoire), vous pouvez éventuellement fournir un bucketFolder paramètre pour spécifier où AWS DMS rechercher les fichiers de données dans le compartiment Amazon S3. En reprenant l'exemple précédent, si vous définissez bucketFolder sursourcedata, AWS DMS lit les fichiers de données dans le chemin suivant.

s3://mybucket/sourcedata/hr/employee

Vous pouvez spécifier le délimiteur de colonne, le délimiteur de ligne, l'indicateur de valeur null et d'autres paramètres à l'aide d'attributs de connexion supplémentaires. Pour plus d’informations, consultez Paramètres du point de terminaison pour Amazon S3 en tant que source pour AWS DMS.

Vous pouvez spécifier le propriétaire du compartiment et empêcher toute tricherie en utilisant le paramètre de point de terminaison Amazon S3 ExpectedBucketOwner, comme indiqué ci-dessous. Ensuite, lorsque vous soumettez une demande pour tester une connexion ou effectuer une migration, S3 compare l’ID de compte du propriétaire du compartiment au paramètre spécifié.

--s3-settings='{"ExpectedBucketOwner": "AWS_Account_ID"}'

Définition de tables externes pour Amazon S3 en tant que source pour AWS DMS

En plus des fichiers de données, vous devez fournir une définition de table externe. Une définition de table externe est un document JSON qui décrit comment AWS DMS interpréter les données d'Amazon S3. La taille maximale de ce document est de 2 Mo. Si vous créez un point de terminaison source à l'aide AWS DMS de la console de gestion, vous pouvez saisir le code JSON directement dans le champ de mappage des tables. Si vous utilisez le AWS Command Line Interface (AWS CLI) ou l' AWS DMS API pour effectuer des migrations, vous pouvez créer un fichier JSON pour spécifier la définition de la table externe.

Supposons que vous disposez d'un fichier de données qui inclut les éléments suivants.

101,Smith,Bob,2014-06-04,New York 102,Smith,Bob,2015-10-08,Los Angeles 103,Smith,Bob,2017-03-13,Dallas 104,Smith,Bob,2017-03-13,Dallas

Voici un exemple de définition de table externe pour ces données.

{ "TableCount": "1", "Tables": [ { "TableName": "employee", "TablePath": "hr/employee/", "TableOwner": "hr", "TableColumns": [ { "ColumnName": "Id", "ColumnType": "INT8", "ColumnNullable": "false", "ColumnIsPk": "true" }, { "ColumnName": "LastName", "ColumnType": "STRING", "ColumnLength": "20" }, { "ColumnName": "FirstName", "ColumnType": "STRING", "ColumnLength": "30" }, { "ColumnName": "HireDate", "ColumnType": "DATETIME" }, { "ColumnName": "OfficeLocation", "ColumnType": "STRING", "ColumnLength": "20" } ], "TableColumnsTotal": "5" } ] }

Les éléments figurant dans ce document JSON sont les suivants :

TableCount : nombre de tables source. Cet exemple comporte une seule table.

Tables : tableau comprenant un mappage JSON par table source. Cet exemple comporte une seule carte. Chaque carte comprend les éléments suivants :

  • TableName : nom de la table source.

  • TablePath : chemin dans votre compartiment Amazon S3 où AWS DMS peut trouver le fichier de chargement complet des données. Si une valeur bucketFolder est spécifiée, elle est ajoutée en préfixe au chemin.

  • TableOwner : nom du schéma pour cette table.

  • TableColumns : tableau d’un ou plusieurs mappages, chacun décrivant une colonne de la table source :

    • ColumnName : nom d’une colonne de la table source.

    • ColumnType : type de données de la colonne. Pour connaître les types de données valides, consultez Types de données source pour Amazon S3.

    • ColumnLength : nombre d’octets dans cette colonne. La longueur de colonne maximale est limitée à 2147483647 octets (2 047 MegaBytes) car une source S3 ne supporte pas le mode FULL LOB. ColumnLengthest valide pour les types de données suivants :

      • BYTE

      • CHAÎNE

    • ColumnNullable : valeur booléenne égale à true si cette colonne peut contenir des valeurs NULL (par défaut, false).

    • ColumnIsPk : valeur booléenne égale à true si cette colonne fait partie de la clé primaire (par défaut, false).

    • ColumnDateFormat : format de date d’entrée pour une colonne de types DATE, TIME et DATETIME ; utilisé pour analyser une chaîne de données dans un objet de date. Les valeurs possibles incluent :

      - YYYY-MM-dd HH:mm:ss - YYYY-MM-dd HH:mm:ss.F - YYYY/MM/dd HH:mm:ss - YYYY/MM/dd HH:mm:ss.F - MM/dd/YYYY HH:mm:ss - MM/dd/YYYY HH:mm:ss.F - YYYYMMdd HH:mm:ss - YYYYMMdd HH:mm:ss.F
  • TableColumnsTotal : nombre total de colonnes. Ce nombre doit correspondre au nombre d'éléments dans le tableau TableColumns.

Si vous ne spécifiez pas le contraire, AWS DMS supposez que ColumnLength c'est zéro.

Note

Dans les versions prises en charge de AWS DMS, les données source S3 peuvent également contenir une colonne d'opération facultative comme première colonne avant la valeur de la TableName colonne. Cette colonne d'opération identifie l'opération (INSERT) utilisée pour migrer les données vers un point de terminaison cible S3 lors d'un chargement complet.

Si elle est présente, la valeur de cette colonne est le caractère initial du mot-clé de l'opération INSERT (I). Si cette valeur est spécifiée, cette colonne indique généralement que la source S3 a été créée par DMS en tant que cible S3 au cours d'une migration précédente.

Dans les versions de DMS antérieures à 3.4.2, cette colonne n’était pas présente dans les données source S3 créées à partir d’un chargement complet DMS précédent. L'ajout de cette colonne aux données cible S3 permet au format de toutes les lignes écrites dans la cible S3 d'être cohérent si celles-ci sont écrites lors d'un chargement complet ou d'un chargement CDC. Pour plus d'informations sur les options pour le formatage des données S3 cible, consultez Indication des opérations de base de données source dans des données S3 migrées.

Pour une colonne de type NUMERIC, spécifiez la précision et l'échelle. La précision est le nombre total de chiffres dans un nombre et l'échelle est le nombre de chiffres à droite de la virgule. Vous utilisez les éléments ColumnPrecision et ColumnScale pour cela, comme indiqué ci-après.

... { "ColumnName": "HourlyRate", "ColumnType": "NUMERIC", "ColumnPrecision": "5" "ColumnScale": "2" } ...

Pour une colonne de type DATETIME dont les données contiennent des fractions de seconde, spécifiez l’échelle. L’échelle est le nombre de chiffres pour les fractions de seconde. Elle est comprise entre 0 et 9. Vous utilisez l’élément ColumnScale pour cela, comme indiqué ci-après.

... { "ColumnName": "HireDate", "ColumnType": "DATETIME", "ColumnScale": "3" } ...

Si vous ne spécifiez pas le contraire, AWS DMS suppose que ColumnScale c'est zéro et tronque les fractions de secondes.

Utilisation de la CDC avec Amazon S3 en tant que source pour AWS DMS

Après avoir AWS DMS effectué un chargement complet des données, il peut éventuellement répliquer les modifications de données sur le point de terminaison cible. Pour ce faire, vous chargez les fichiers de capture des données de modification (fichiers CDC) dans votre compartiment Amazon S3. AWS DMS lit ces fichiers CDC lorsque vous les téléchargez, puis applique les modifications au point de terminaison cible.

Les fichiers CDC sont nommés comme suit :

CDC00001.csv CDC00002.csv CDC00003.csv ...
Note

Pour répliquer des fichiers CDC dans le dossier des données de modification, chargez-les dans un ordre lexical (séquentiel). Par exemple, chargez le fichier CDC00002.csv avant le fichier CDC00003.csv. Dans le cas contraire, si vous chargez le fichier CDC00002.csv après le fichier CDC00003.csv, le premier est ignoré et n’est pas répliqué. Mais le fichier CDC00004.csv est répliqué avec succès s'il est chargé après CDC00003.csv.

Pour indiquer où se AWS DMS trouvent les fichiers, spécifiez le cdcPath paramètre. Pour continuer avec l'exemple précédent, si vous définissez cdcPath sur changedata, AWS DMS lit les fichiers CDC correspondant au chemin suivant.

s3://mybucket/changedata

Si vous définissez cdcPath sur changedata et bucketFolder sur myFolder, AWS DMS lit les fichiers CDC au chemin suivant.

s3://mybucket/myFolder/changedata

Les enregistrements figurant dans un fichier CDC sont formatés comme suit :

  • Opération : opération de modification à effectuer : INSERT ou I, UPDATE ou U, DELETE ou D. Ces mot-clé et ces valeurs de caractères ne sont pas sensibles à la casse.

    Note

    Dans AWS DMS les versions prises en charge, AWS DMS vous pouvez identifier l'opération à effectuer pour chaque enregistrement de chargement de deux manières. AWS DMS peut le faire à partir de la valeur du mot clé de l'enregistrement (par exemple,INSERT) ou à partir du caractère initial du mot clé (par exemple,I). Dans les versions précédentes, l'opération de chargement était AWS DMS reconnue uniquement à partir de la valeur complète du mot clé.

    Dans les versions précédentes de AWS DMS, la valeur complète du mot clé était écrite pour enregistrer les données du CDC. De plus, les versions précédentes écrivaient la valeur d’opération sur toute cible S3 à l’aide du mot-clé initial uniquement.

    La reconnaissance des deux formats AWS DMS permet de gérer l'opération quelle que soit la manière dont la colonne d'opération est écrite pour créer les données source S3. Cette approche prend en charge l'utilisation de données cible S3 comme source pour une migration ultérieure. Avec cette approche, vous n'avez pas besoin de modifier le format de la valeur initiale d'un mot-clé qui apparaît dans la colonne d'opération de la source S3 ultérieure.

  • Nom de la table : nom de la table source.

  • Nom du schéma : nom du schéma source.

  • Données : une ou plusieurs colonnes qui représentent les données à modifier.

Voici un exemple de fichier CDC pour une table nommée employee.

INSERT,employee,hr,101,Smith,Bob,2014-06-04,New York UPDATE,employee,hr,101,Smith,Bob,2015-10-08,Los Angeles UPDATE,employee,hr,101,Smith,Bob,2017-03-13,Dallas DELETE,employee,hr,101,Smith,Bob,2017-03-13,Dallas

Conditions préalables à l'utilisation d'Amazon S3 comme source pour AWS DMS

Pour utiliser Amazon S3 comme source pour AWS DMS, votre compartiment S3 source doit se trouver dans la même AWS région que l'instance de réplication DMS qui migre vos données. De plus, le compte AWS que vous utilisez pour la migration doit avoir un accès en lecture au compartiment source. Pour les AWS DMS versions 3.4.7 et supérieures, DMS doit accéder au compartiment source via un point de terminaison VPC ou une route publique. Pour plus d'informations sur les points de terminaison VPC, consultez. Configuration de points de terminaison de VPC en tant que points de terminaison sources et cibles AWS DMS

Le rôle AWS Identity and Access Management (IAM) attribué au compte utilisateur utilisé pour créer la tâche de migration doit disposer des autorisations suivantes.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::mybucket*/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::mybucket*" ] } ] }

Le rôle AWS Identity and Access Management (IAM) attribué au compte utilisateur utilisé pour créer la tâche de migration doit disposer de l'ensemble d'autorisations suivant si le versionnement est activé sur le compartiment Amazon S3.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "S3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::mybucket*/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::mybucket*" ] } ] }

Limitations liées à l'utilisation d'Amazon S3 comme source pour AWS DMS

Les limitations suivantes s’appliquent lorsque vous utilisez Amazon S3 en tant que source :

  • N’activez pas la gestion des versions pour S3. Si vous avez besoin de la gestion des versions S3, utilisez des politiques de cycle de vie pour supprimer les anciennes versions de manière active. Dans le cas contraire, la connexion de test du point de terminaison risque d’échouer en raison du délai d’attente d’appel list-object S3. Pour créer une politique de cycle de vie pour un compartiment S3, consultez Gestion du cycle de vie de votre stockage. Pour supprimer une version d’un objet S3, consultez Suppression des versions d’objet d’un compartiment activé pour la gestion des versions.

  • Un compartiment S3 compatible VPC (VPC de passerelle) est pris en charge dans les versions 3.4.7 et ultérieures.

  • MySQL convertit le time type de données en. string Pour voir les valeurs time des types de données dans MySQL, définissez la colonne de la table cible comme string suit et définissez le paramètre du mode de préparation de la table cible de la tâche sur Truncate.

  • AWS DMS utilise le type de BYTE données en interne pour les données à la fois dans les types de BYTES données BYTE et de données.

  • Les points de terminaison source S3 ne prennent pas en charge la fonctionnalité de rechargement des tables DMS.

  • AWS DMS ne prend pas en charge le mode LOB complet avec Amazon S3 en tant que source.

Les limites suivantes s'appliquent lors de l'utilisation de fichiers au format Parquet dans Amazon S3 en tant que source :

  • Les dates sont incluses MMYYYYDD ou ne DDMMYYYY sont pas prises en charge pour la fonctionnalité de partitionnement de dates de S3 Parquet Source.

Paramètres du point de terminaison pour Amazon S3 en tant que source pour AWS DMS

Vous pouvez utiliser des paramètres de point de terminaison pour configurer la base de données source Amazon S3 comme si vous utilisiez des attributs de connexion supplémentaires. Vous spécifiez les paramètres lorsque vous créez le point de terminaison source à l'aide de la AWS DMS console ou à l'aide de la create-endpoint commande dans le AWS CLI, avec la syntaxe --s3-settings '{"EndpointSetting": "value", ...}' JSON.

Les paramètres de point de terminaison que vous pouvez utiliser avec Amazon S3 en tant que source sont indiqués dans le tableau suivant.

Option Description
BucketFolder

(Facultatif) Un nom de dossier dans le compartiment S3. Si cet attribut est spécifié, les fichiers de données source et les fichiers CDC sont lus à partir du chemin s3://myBucket/bucketFolder/schemaName/tableName/ et s3://myBucket/bucketFolder/, respectivement. Si cet attribut n'est pas spécifié, le chemin utilisé est schemaName/tableName/.

'{"BucketFolder": "sourceData"}'

BucketName

Le nom du compartiment S3.

'{"BucketName": "myBucket"}'

CdcPath Emplacement des fichiers CDC. Cet attribut est requis si une tâche capture les données modifiées ; dans le cas contraire, il est facultatif. S'il CdcPath est présent, AWS DMS lit les fichiers CDC à partir de ce chemin et réplique les modifications de données sur le point de terminaison cible. Pour plus d’informations, consultez Utilisation de la CDC avec Amazon S3 en tant que source pour AWS DMS.

'{"CdcPath": "changeData"}'

CsvDelimiter

Le délimiteur utilisé pour séparer les colonnes des fichiers sources. La valeur par défaut est une virgule. Un exemple suit.

'{"CsvDelimiter": ","}'

CsvNullValue

Chaîne définie par l'utilisateur qui est AWS DMS considérée comme nulle lors de la lecture depuis la source. La valeur par défaut est une chaîne vide. Si vous ne définissez pas ce paramètre, AWS DMS traite une chaîne vide comme une valeur nulle. Si vous définissez ce paramètre sur une chaîne telle que « \ N », AWS DMS traitez cette chaîne comme une valeur nulle et traitez les chaînes vides comme une valeur de chaîne vide.

CsvRowDelimiter

Le délimiteur utilisé pour séparer les lignes des fichiers sources. La valeur par défaut est un caractère de saut de ligne (\n).

'{"CsvRowDelimiter": "\n"}'

DataFormat

Définissez cette valeur sur Parquet pour lire les données au format Parquet.

'{"DataFormat": "Parquet"}'

IgnoreHeaderRows

Lorsque cette valeur est définie sur 1, AWS DMS ignore le premier en-tête de ligne d'un fichier .csv. La valeur 1 active la fonctionnalité, la valeur 0 désactive la fonctionnalité.

La valeur par défaut est 0.

'{"IgnoreHeaderRows": 1}'

Rfc4180

Lorsque cette valeur est définie sur true ou y, chaque guillemet double de tête doit être suivi d’un guillemet double de fin. Ce format est conforme à RFC 4180. Lorsque ce paramètre est défini sur false ou n, les chaînes littérales sont copiées vers la cible en l'état. Dans ce cas, un délimiteur de colonne ou de ligne indique la fin du champ. Par conséquent, vous ne pouvez pas utiliser un délimiteur dans le cadre de la chaîne, car il indique une fin de la valeur.

L’argument par défaut est true.

Valeurs valides : true, false, y, n

'{"Rfc4180": false}'

Types de données source pour Amazon S3

Migration de données utilisant Amazon S3 comme source pour les AWS DMS besoins de mappage des données d'Amazon S3 vers AWS DMS des types de données. Pour plus d’informations, consultez Définition de tables externes pour Amazon S3 en tant que source pour AWS DMS.

Pour en savoir plus sur la façon d'afficher le type de données qui est mappé dans la cible, consultez la section concernant le point de terminaison cible que vous utilisez.

Pour plus d'informations sur AWS DMS les types de données, consultezTypes de données pour AWS Database Migration Service.

Les types de AWS DMS données suivants sont utilisés avec Amazon S3 comme source :

Utilisation de fichiers au format Parquet dans Amazon S3 comme source pour AWS DMS

Dans les AWS DMS versions 3.5.3 et ultérieures, vous pouvez utiliser des fichiers au format Parquet dans un compartiment S3 comme source pour la réplication à chargement complet ou la réplication CDC.

DMS prend uniquement en charge les fichiers au format Parquet en tant que source que DMS génère en migrant des données vers un point de terminaison cible S3. Les noms de fichiers doivent être au format pris en charge, sinon DMS ne les inclura pas dans la migration.

Pour les fichiers de données source au format Parquet, ils doivent se trouver dans le dossier et dans la convention de dénomination suivants.

schema/table1/LOAD00001.parquet schema/table2/LOAD00002.parquet schema/table2/LOAD00003.parquet

Pour les fichiers de données source pour les données CDC au format Parquet, nommez-les et stockez-les en utilisant le dossier et la convention de dénomination suivants.

schema/table/20230405-094615814.parquet schema/table/20230405-094615853.parquet schema/table/20230405-094615922.parquet

Pour accéder aux fichiers au format Parquet, définissez les paramètres de point de terminaison suivants :

  • Définissez DataFormat sur Parquet.

  • Ne définissez pas le cdcPath réglage. Assurez-vous de créer vos fichiers au format Parquet dans les dossiers de schéma ou de table spécifiés.

Pour plus d'informations sur les paramètres des points de terminaison S3, consultez S3Settings dans la référence de l'AWS Database Migration Service API.

Types de données pris en charge pour les fichiers au format Parquet

AWS DMS prend en charge les types de données source et cible suivants lors de la migration de données à partir de fichiers au format Parquet. Assurez-vous que votre table cible comporte des colonnes contenant les types de données appropriés avant de procéder à la migration.

Type de données source Type de données cible
BYTE BINARY
DATE DATE32
TIME TIME32
DATETIME TIMESTAMP
INT1 INT8
INT2 INT16
INT4 INT32
INT8 INT64
NUMERIC DECIMAL
REAL4 FLOAT
REAL8 DOUBLE
STRING STRING
UINT1 UINT8
UINT2 UINT16
UINT4 UINT32
UINT8 UINT
WSTRING STRING
BLOB BINARY
NCLOB STRING
CLOB STRING
BOOLEAN BOOL