Comment utiliser Data Pipeline pour sauvegarder une table DynamoDB dans un compartiment S3 qui se trouve dans un autre compte ?

Dernière mise à jour : 01/07/2020

Je veux utiliser AWS Data Pipeline pour sauvegarder une table Amazon DynamoDB dans un compartiment Amazon Simple Storage Service (Amazon S3) qui se trouve dans un autre compte AWS.

Brève description

1.    Dans le compte source, associez une stratégie AWS Identity and Access Management (IAM) qui permet aux rôles DataPipelineDefaultRole et DataPipelineDefaultResourceRole d'accéder à Amazon S3.

2.    Dans le compte cible, créez une stratégie de compartiment qui autorise les rôles DataPipelineDefaultRole et DataPipelineDefaultResourceRole dans le compte source à accéder au compartiment S3.

3.    Dans le compte source, créez un pipeline à l'aide du modèle Data Pipeline Export DynamoDB table to S3 (Exporter la table Dynamo vers S3).

4.    Ajoutez la liste de contrôle d’accès (ACL) prédéfinie BucketOwnerFullControl ou AuthenticatedRead dans le champ Step (Étape) de l'objet EmrActivity du pipeline.

5.    Activez le pipeline pour sauvegarder la table DynamoDB dans le compartiment S3 dans le compte de destination.

6.    Créez une table DynamoDB dans le compte de destination.

7.    Pour restaurer la table source dans le compte de destination, créez un pipeline en utilisant le modèle Data Pipeline Importer les données de sauvegarde DynamoDB depuis S3.

Résolution

Attacher une stratégie IAM aux rôles Data Pipeline par défaut

1.    Dans le compte source, ouvrez la console IAM.

2.    Sélectionnez Stratégies, puis Créer une stratégie.

3.    Choisissez l'onglet JSON, puis saisissez une stratégie IAM similaire à celle-ci. Remplacez awsdoc-example-bucket par le nom du compartiment S3 dans le compte de destination.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::awsdoc-example-bucket/*",
                "arn:aws:s3:::awsdoc-example-bucket"     
            ]
        }
    ]
}

4.    Choisissez Review policy (Vérifier la stratégie).

5.    Saisissez un nom pour la stratégie, puis sélectionnez Créer une stratégie.

6.    Dans la liste des stratégies, cochez la case en regard du nom de la stratégie que vous venez de créer. Vous pouvez utiliser le menu Filtre et la zone de recherche pour filtrer la liste des stratégies.

7.    Sélectionnez Actions de stratégie, puis Attacher.

8.    Sélectionnez DataPipelineDefaultRole et DataPipelineDefaultResourceRole, puis Attacher la stratégie.

Ajouter une stratégie de compartiment au compartiment S3

Dans le compte de destination créez une stratégie de compartiment similaire à celle-ci. Remplacez ces valeurs dans l'exemple suivant :

{
    "Version": "2012-10-17",
    "Id": "",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Action": "s3:*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:role/DataPipelineDefaultRole",
                    "arn:aws:iam::111122223333:role/DataPipelineDefaultResourceRole"
                ]
            },
            "Resource": [
                "arn:aws:s3:::awsdoc-example-bucket",
                "arn:aws:s3:::awsdoc-example-bucket/*"
            ]
        }
    ]
}

Créer et activer le pipeline

1.    Dans le compte source, créez un pipeline à l'aide du modèle Data Pipeline Export DynamoDB table to S3 (Exporter la table DynamoDB vers S3) :

Dans la section Paramètres, saisissez le nom de la table DynamoDB source et le dossier S3 de sortie. Utilisez le format s3://awsdoc-example-bucket/ pour le compartiment.
Dans la section Sécurité/Accès, pour les rôles IAM, choisissez Valeur par défaut.

2.    Avant d’activer le pipeline, choisissez Edit in Architect (Modifier dans Architect).

3.    Ouvrez la section Activités et recherchez l'objet EmrActivity.

4.    Dans le champ, Step (Étape), ajoutez la liste ACL (Access Control List) prédéfinie BucketOwnerFullControl ou AuthenticatedRead. Ces listes ACL prédéfinies permettent à la tâche Amazon EMR Hadoop Apache d'écrire dans le compartiment S3 dans le compte de destination. Veillez à utiliser le format -Dfs.s3.canned.acl=BucketOwnerFullControl. Placez l'instruction entre org.apache.hadoop.dynamodb.tools.DynamoDbExport et #{output.directoryPath}. Exemple :

s3://dynamodb-dpl-#{myDDBRegion}/emr-ddb-storage-handler/4.11.0/emr-dynamodb-tools-4.11.0-SNAPSHOT-jar-with-dependencies.jar,org.apache.hadoop.dynamodb.tools.DynamoDBExport,-Dfs.s3.canned.acl=BucketOwnerFullControl,#{output.directoryPath},#{input.tableName},#{input.readThroughputPercent}

5.    Choisissez Save (Enregistrer), puis Activate (Activer) pour activer le pipeline et sauvegarder la table DynamoDB dans le compartiment S3 dans le compte de destination.

Restaurer la sauvegarde dans le compte de destination

1.    Dans le compte de destination, créez une table DynamoDB. La table n'a pas besoin d'être vide. Toutefois, le processus d'importation remplace les éléments qui ont les mêmes clés que les éléments du fichier d'exportation.

2.    Créez un pipeline en utilisant le modèle Data Pipeline Importer les données de sauvegarde DynamoDB depuis S3 :

Dans la section Paramètres, pour Dossier S3 d'entrée, saisissez le compartiment S3 où se trouve la sauvegarde DynamoDB.
Dans la section Sécurité/Accès, pour les rôles IAM, choisissez Valeur par défaut.

3.    Activez le pipeline pour restaurer la sauvegarde dans la table de destination.


Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?