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
AWS Glue I job ETL supportano l'accesso sia tra regioni che tra account alle tabelle DynamoDB. 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 Glue supporta 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 illustra anche l'assunzione di un ruolo, ma qui utilizzerai invece uno script di lavoro per assumere il ruolo in AWS Glue. Questo tutorial contiene anche informazioni sulle pratiche generali relative a più account. Per ulteriori informazioni, consulta Tutorial: Delegare l'accesso tra AWS account utilizzando ruoli IAM nella Guida per l'utente IAM.
Creare un ruolo
Segui la fase 1 del tutorial per creare un ruolo IAM nell'account A. Quando si definiscono le autorizzazioni del ruolo, è possibile scegliere di allegare criteri esistenti quali AmazonDynamoDBReadOnlyAccess
oppure AmazonDynamoDBFullAccess
per consentire al ruolo di leggere/scrivere 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:
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "<DynamoDBCrossAccessRole's ARN>" } }
Quindi, puoi allegare questa policy a quella group/role/user che desideri utilizzare per accedere a DynamoDB.
Assumi il ruolo nel AWS Glue script del processo
Ora puoi accedere all'account B e creare un AWS Glue lavoro. 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()