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

Dernière mise à jour : 27/07/2022

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

Remarque : le compte source est le compte sur lequel se trouve la table DynamoDB. Le compte de destination est le compte sur lequel se trouve le compartiment Amazon S3.

  1. Dans le compte source, associez une politique AWS Identity and Access Management (IAM) permettant les autorisations Amazon S3 à la fonction de service DataPipeline et à la fonction de ressource DataPipeline.
  2. Dans le compte de destination, créez une politique de compartiment qui autorise la fonction de service DataPipeline et la fonction de ressource DataPipeline 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 Exporter la table DynamoDB sur S3.
  4. Ajoutez la liste de contrôle d'accès (ACL) prédéfinie BucketOwnerFullControl ou AuthenticatedRead dans le champ Étape de l'objet EmrActivity du pipeline.
  5. Activez le pipeline pour sauvegarder la table DynamoDB dans le compartiment S3 du compte de destination.
  6. Créez une table DynamoDB dans le compte de destination.
  7. Pour restaurer la table source dans la table de destination, créez un pipeline en utilisant le modèle Data Pipeline Importer les données de sauvegarde DynamoDB depuis S3.

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 Examiner une politique.

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 la fonction de service DataPipeline et la fonction de ressource DataPipeline, puis sélectionnez Attacher la stratégie.

Ajouter une stratégie de compartiment au compartiment S3

Dans le compte de destination créez une politique 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 Exporter la table DynamoDB vers S3 :

Dans la section Parameters (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 Security/Access (Sécurité/Accès), pour les rôles IAM, choisissez Default (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 Étape, ajoutez la liste de contrôle d'accès (ACL) prédéfinie BucketOwnerFullControl ou AuthenticatedRead. Ces listes ACL prédéfinies permettent à la tâche Apache Hadoop Amazon EMR d'écrire dans le compartiment S3 du 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 Enregistrer, puis Activer pour activer le pipeline et sauvegarder la table DynamoDB dans le compartiment S3 dans le compte de destination.

(Facultatif) 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 Parameters (Paramètres), pour Input S3 folder (Dossier S3 d'entrée), saisissez le compartiment S3 où la sauvegarde DynamoDB est stockée.
    Dans la section Security/Access (Sécurité/Accès), pour les rôles IAM, choisissez Default (Par défaut).
  3. Activez le pipeline pour restaurer la sauvegarde dans la table de destination.

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


Avez-vous besoin d'aide pour une question technique ou de facturation ?