Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
AWS Glue Pekerjaan ETL mendukung akses lintas wilayah dan lintas akun ke tabel DynamoDB. AWS Glue Pekerjaan ETL mendukung pembacaan data dari tabel DynamoDB AWS Akun lain, dan menulis data ke tabel DynamoDB AWS Akun lain. AWS Glue juga mendukung pembacaan dari tabel DynamoDB di wilayah lain, dan menulis ke tabel DynamoDB di wilayah lain. Bagian ini memberikan petunjuk tentang pengaturan akses, dan menyediakan contoh skrip.
Prosedur dalam bagian ini me-referensi tutorial IAM untuk menciptakan IAM role dan memberikan akses ke peran. Tutorial ini juga membahas asumsi peran, tetapi di sini Anda akan menggunakan skrip pekerjaan untuk mengambil peran dalam AWS Glue. Tutorial ini juga berisi informasi tentang praktik lintas akun umum. Untuk informasi selengkapnya, lihat Tutorial: Mendelegasikan Akses di Seluruh AWS Akun Menggunakan Peran IAM di Panduan Pengguna IAM.
Membuat peran
Ikuti langkah 1 dalam tutorial untuk membuat IAM role di akun A. Ketika menentukan izin peran, Anda dapat memilih untuk melampirkan kebijakan yang ada seperti AmazonDynamoDBReadOnlyAccess
, atau AmazonDynamoDBFullAccess
untuk mengizinkan peran untuk membaca/menulis dari dan ke DynamoDB. Contoh berikut menunjukkan cara membuat sebuah peran bernama DynamoDBCrossAccessRole
, dengan kebijakan izin AmazonDynamoDBFullAccess
.
Berikan akses ke peran tersebut
Ikuti langkah 2 dalam tutorial di Panduan Pengguna IAM untuk mengizinkan akun B untuk beralih ke peran yang baru dibuat. Contoh berikut membuat sebuah kebijakan baru dengan pernyataan berikut:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "<DynamoDBCrossAccessRole's ARN>"
}
}
Kemudian, Anda dapat melampirkan kebijakan ini ke yang ingin group/role/user Anda gunakan untuk mengakses DynamoDB.
Asumsikan peran dalam AWS Glue skrip tugas
Sekarang, Anda dapat masuk ke akun B dan membuat AWS Glue pekerjaan. Untuk membuat sebuah tugas, lihat petunjuk di Mengkonfigurasi properti pekerjaan untuk pekerjaan Spark di AWS Glue.
Dalam skrip tugas tersebut, Anda perlu menggunakan parameter dynamodb.sts.roleArn
untuk mengambil peran DynamoDBCrossAccessRole
. Dengan asumsi peran ini akan memungkinkan Anda untuk mendapatkan kredensial sementara, yang perlu digunakan untuk mengakses DynamoDB di akun B. Tinjau skrip contoh ini.
Untuk pembacaan lintas akun di seluruh wilayah (konektor 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()
Untuk pembacaan lintas akun di seluruh wilayah (konektor 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()
Untuk pembacaan dan penulisan lintas akun di seluruh wilayah:
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()