

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Akses lintas akun Lintas wilayah ke tabel DynamoDB
<a name="aws-glue-programming-etl-dynamo-db-cross-account"></a>

Tugas ETL AWS Glue mendukung akses lintas wilayah dan akses 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 Gluejuga 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, tapi di sini Anda malah akan menggunakan sebuah skrip tugas untuk mengambil peran dalam AWS Glue. Tutorial ini juga berisi informasi tentang praktik-praktik lintas akun umum. Untuk informasi selengkapnya, lihat [Tutorial: Mendelegasikan Akses di Seluruh AWS Akun Menggunakan Peran IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) di Panduan Pengguna *IAM*.

## Membuat peran
<a name="aws-glue-programming-etl-dynamo-db-create-role"></a>

Ikuti [langkah 1 dalam tutorial](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html#tutorial_cross-account-with-roles-1) untuk membuat peran IAM di akun A. Saat menentukan izin peran, Anda dapat memilih untuk melampirkan kebijakan yang ada seperti`AmazonDynamoDBReadOnlyAccess`, atau mengizinkan peran `AmazonDynamoDBFullAccess` ke DynamoDB. read/write Contoh berikut menunjukkan cara membuat sebuah peran bernama `DynamoDBCrossAccessRole`, dengan kebijakan izin `AmazonDynamoDBFullAccess`.

## Berikan akses ke peran tersebut
<a name="aws-glue-programming-etl-dynamo-db-grant-access"></a>

Ikuti [langkah 2 dalam tutorial](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html#tutorial_cross-account-with-roles-2) di *Panduan Pengguna IAM* untuk mengizinkan akun B untuk beralih ke peran yang baru dibuat. Contoh berikut membuat sebuah kebijakan baru dengan pernyataan berikut:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::111122223333:role/DynamoDBCrossAccessRole"
  }
}
```

------

Kemudian, Anda dapat melampirkan kebijakan ini ke yang ingin group/role/user Anda gunakan untuk mengakses DynamoDB.

## Asumsikan peran dalam skrip AWS Glue pekerjaan
<a name="aws-glue-programming-etl-dynamo-db-assume-role"></a>

Sekarang, Anda dapat log in masuk ke akun B dan membuat sebuah tugas AWS Glue. Untuk membuat sebuah tugas, lihat petunjuk di [Mengkonfigurasi properti pekerjaan untuk pekerjaan Spark di AWS Glue](add-job.md). 

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()
```