Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Accesso multi-account in più regioni alle tabelle DynamoDB
I processi ETL AWS Glue supportano sia l'accesso multi-account che in più regioni alle tabelle DynamoDB. I processi ETL AWS Glue I job ETL supportano sia la lettura di dati dalla tabella DynamoDB di un altro AWS account, sia la scrittura di dati nella tabella DynamoDB di un altro AWS account. AWS Gluesupporta anche la lettura da una tabella DynamoDB in un'altra regione e la scrittura in una tabella DynamoDB in un'altra regione. Questa sezione fornisce istruzioni su come configurare l'accesso e fornisce uno script di esempio.
Le procedure descritte in questa sezione fanno riferimento a un tutorial IAM per la creazione di un ruolo IAM e la concessione dell'accesso al ruolo. Il tutorial discute anche l'assunzione di un ruolo, ma qui si utilizzerà invece uno script di processo per assumere il ruolo in AWS Glue. Questo tutorial contiene anche informazioni sulle pratiche generali multi-account. Per ulteriori informazioni, consulta Tutorial: Delegare l'accesso tra AWS account utilizzando i ruoli IAM nella Guida per l'utente IAM.
Creare un ruolo
Segui il passaggio 1 del tutorial per creare un ruolo IAM nell'account A. Quando definisci le autorizzazioni del ruolo, puoi scegliere di allegare policy esistenti come AmazonDynamoDBReadOnlyAccess
o di consentire il ruolo AmazonDynamoDBFullAccess
a read/write DynamoDB. L'esempio seguente mostra la creazione di un ruolo denominato DynamoDBCrossAccessRole
, con la policy di autorizzazione AmazonDynamoDBFullAccess
.
Concedi autorizzazione per l'accesso al ruolo
Segui la fase 2 del tutorial nella Guida per l'utente di IAM per consentire all'account B di passare al ruolo appena creato. L'esempio seguente crea una nuova policy con l'istruzione riportata di seguito:
Quindi, puoi allegare questa policy a quella group/role/user che desideri utilizzare per accedere a DynamoDB.
Assumi il ruolo nello script di processo AWS Glue
Ora è possibile accedere all'account B e creare un processo AWS Glue. Per creare un processo, fai riferimento alle istruzioni in Configurazione delle proprietà dei job per i job Spark in AWS Glue.
Nello script del processo è necessario utilizzare il parametro dynamodb.sts.roleArn
per assumere il ruolo DynamoDBCrossAccessRole
. Supponendo che questo ruolo consenta di ottenere le credenziali temporanee, che devono essere utilizzate per accedere a DynamoDB nell'account B, esamina questi script di esempio.
Per una lettura multi-account tra regioni (connettore 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()
Per una lettura multi-account tra regioni (connettore ELT):
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()
Per una lettura e scrittura multi-account tra regioni:
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()