Accès entre régions et entre comptes aux tables DynamoDB - AWS Glue

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.

Accès entre régions et entre comptes aux tables DynamoDB

AWS Glue Les tâches ETL prennent en charge l'accès entre régions et entre comptes aux tables DynamoDB. AWS Glue Les tâches ETL prennent en charge à la fois la lecture de données à partir de la table DynamoDB d'un autre compte AWS et l'écriture de données dans la table DynamoDB d'un autre compte AWS. AWS Glue prend également en charge la lecture à partir d'une table DynamoDB dans une autre région et l'écriture dans une table DynamoDB dans une autre région. Cette section donne des instructions sur la configuration de l'accès et fournit un exemple de script.

Les procédures de cette section font référence à un didacticiel IAM pour créer un rôle IAM et accorder l'accès au rôle. Le didacticiel traite également de la prise en charge d'un rôle, mais ici, vous utiliserez plutôt un script de tâche pour endosser le rôle dans AWS Glue. Ce didacticiel contient également des informations sur les pratiques générales entre comptes. Pour plus d'informations, veuillez consulter Didacticiel : Déléguer l'accès entre les comptes AWS à l'aide de rôles IAM dans le Guide de l'utilisateur IAM.

Créer un rôle

Suivez l'étape 1 du didacticiel pour créer un rôle IAM dans le compte A. Lors de la définition des autorisations du rôle, vous pouvez choisir d'attacher des politiques existantes telles que AmazonDynamoDBReadOnlyAccess ou AmazonDynamoDBFullAccess pour autoriser le rôle à lire DynamoDB ou écrire sur DynamoDB. L'exemple suivant illustre la création d'un rôle nommé DynamoDBCrossAccessRole, avec la politique d'autorisation AmazonDynamoDBFullAccess.

Accorder l'accès au rôle

Suivez l'étape 2 du didacticiel du Guide de l'utilisateur IAM pour permettre au compte B de basculer vers le rôle qui vient d'être créé. L'exemple suivant crée une politique avec l'instruction suivante :

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "<DynamoDBCrossAccessRole's ARN>" } }

Ensuite, vous pouvez attacher cette politique au groupe/rôle/utilisateur que vous souhaitez utiliser pour accéder à DynamoDB.

Endosser le rôle dans le script de tâche AWS Glue

Maintenant, vous pouvez vous connecter au compte B et créer une tâche AWS Glue. Pour créer une tâche, reportez-vous aux instructions de la page Configuration des propriétés des tâches pour les tâches Spark dans AWS Glue.

Dans le script de tâche, vous devez utiliser le paramètre dynamodb.sts.roleArn pour endosser le rôle DynamoDBCrossAccessRole. En supposant que ce rôle vous permet d'obtenir les informations d'identification temporaires, qui doivent être utilisées pour accéder à DynamoDB dans le compte B. Consultez ces exemples de scripts.

Pour une lecture entre comptes dans toutes les régions (connecteur ETL) :

import sys from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job from awsglue.utils import getResolvedOptions args = getResolvedOptions(sys.argv, ["JOB_NAME"]) glue_context= GlueContext(SparkContext.getOrCreate()) job = Job(glue_context) job.init(args["JOB_NAME"], args) dyf = glue_context.create_dynamic_frame_from_options( connection_type="dynamodb", connection_options={ "dynamodb.region": "us-east-1", "dynamodb.input.tableName": "test_source", "dynamodb.sts.roleArn": "<DynamoDBCrossAccessRole's ARN>" } ) dyf.show() job.commit()

Pour une lecture entre comptes dans toutes les régions (connecteur ETL) :

import sys from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job from awsglue.utils import getResolvedOptions args = getResolvedOptions(sys.argv, ["JOB_NAME"]) glue_context= GlueContext(SparkContext.getOrCreate()) job = Job(glue_context) job.init(args["JOB_NAME"], args) dyf = glue_context.create_dynamic_frame_from_options( connection_type="dynamodb", connection_options={ "dynamodb.export": "ddb", "dynamodb.tableArn": "<test_source ARN>", "dynamodb.sts.roleArn": "<DynamoDBCrossAccessRole's ARN>" } ) dyf.show() job.commit()

Pour une lecture et une écriture entre comptes dans toutes les régions :

import sys from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job from awsglue.utils import getResolvedOptions args = getResolvedOptions(sys.argv, ["JOB_NAME"]) glue_context= GlueContext(SparkContext.getOrCreate()) job = Job(glue_context) job.init(args["JOB_NAME"], args) dyf = glue_context.create_dynamic_frame_from_options( connection_type="dynamodb", connection_options={ "dynamodb.region": "us-east-1", "dynamodb.input.tableName": "test_source" } ) dyf.show() glue_context.write_dynamic_frame_from_options( frame=dyf, connection_type="dynamodb", connection_options={ "dynamodb.region": "us-west-2", "dynamodb.output.tableName": "test_sink", "dynamodb.sts.roleArn": "<DynamoDBCrossAccessRole's ARN>" } ) job.commit()