我使用AWS Glue将数据从DynamoDB复制到S3。我编写了以下代码,将DyanmoDB表复制到同一帐户中的S3。它工作正常,可以复制6亿条记录到我的表中而没有任何问题。大约需要20分钟。
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from datetime import datetime
# inputs
dataset_date = datetime.strftime(datetime.now(), '%Y%m%d')
table_name = "table-name"
read_percentage = "0.5"
output_location = 's3://'+dataset_date
fmt ="json"
# glue setup
sc = SparkContext()
glueContext = GlueContext(sc)
# scan the DDB table
table = glueContext.create_dynamic_frame.from_options("dynamodb",
connection_options={
"dynamodb.input.tableName": table_name,
"dynamodb.throughput.read.percent": read_percentage,
"dynamodb.splits": "100"
}
)
# write to S3
glueContext.write_dynamic_frame.from_options(frame=table,
connection_type="s3",
connection_options={"path": output_location},
format=fmt,
transformation_ctx="datasink"
)
但是现在我想使用上述脚本进行跨帐户S3转储。 DynamoDB表位于帐户A(产品帐户)中,从DynamoDB表读取的Glue作业和要转储该数据的S3存储桶位于帐户B(DW帐户)中。我不知道是否可以使用我的脚本,但可以授予跨帐户Glue访问权限,以便它可以从帐户A读取DynamoDB表。
答案 0 :(得分:0)
在帐户A( DynamoDB表所有者帐户)中创建IAM角色,该角色允许Glue作为 Principal 来读取表。
为帐户A( DynamoDB表所有者帐户)中的IAM角色配置权限策略,该策略允许读取表中的数据。您可以根据以下示例进行构建:
public function add(Request $request){$save_no = $request->input('save_no');
$save_id = $request->input('save_id');
$save_name = $request->input('save_name');
$save_money = $request->input('save_money');$data_save=array(
'mem_died_id'=>$mem_died_id,
'save_no'=>$save_no,
'save_id'=>$save_id,
'save_name'=>$save_name,
'save_money'=>$save_money);
DB::table('died_save')->insert($data_save);return back();
在帐户A( Dynamo数据库表帐户)的上述IAM角色中配置信任策略,以允许Glue承担该信任策略。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListAndDescribe",
"Effect": "Allow",
"Action": [
"dynamodb:List*",
"dynamodb:DescribeReservedCapacity*",
"dynamodb:DescribeLimits",
"dynamodb:DescribeTimeToLive"
],
"Resource": "*"
},
{
"Sid": "AllTables",
"Effect": "Allow",
"Action": [
"dynamodb:BatchGet*",
"dynamodb:DescribeStream",
"dynamodb:DescribeTable",
"dynamodb:Get*",
"dynamodb:Query",
"dynamodb:Scan"
],
"Resource": [
"arn:aws:dynamodb:*:*:table/table-1",
"arn:aws:dynamodb:*:*:table/table-2"
]
}
]
}
在为帐户B(不拥有表格)中的胶水作业配置的IAM角色中, 包括允许其在帐户A( Dynamo DB表所有者帐户)中担任IAM角色的权限策略。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "glue.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
答案 1 :(得分:0)
我认为这不适用于DW帐户中运行的胶水脚本。
GlueContext使用表名连接到DynamoDB:
您应该探索的是在 Prod 帐户中运行胶水脚本,并为您的DW存储桶提供跨帐户访问权限,以便在prod帐户中运行的Glue可以承担编写目标S3的角色 DW帐户中的存储桶。