![](/img/trans.png)
[英]How to get AWS Glue crawler to assume a role in another AWS account to get data from that account's S3 bucket?
[英]AWS Glue job to pull the data from DynamoDB in another account
我使用 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 表和 S3 存储桶读取数据的 Glue 作业在账户 B(DW 账户)中转储数据。 我不知道是否可以使用我的脚本,但提供跨账户 Glue 访问权限,以便它可以从账户 A 读取 DynamoDB 表
在账户 A( DynamoDB 表所有者账户)中创建一个 IAM 角色,允许 Glue 作为Principal读取表。
为账户 A( DynamoDB 表所有者账户)中的 IAM 角色配置允许读取表中数据的权限策略。 您可以从中构建的示例如下:
{
"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"
]
}
]
}
在账户 A( Dynamo DB 表账户)的上述 IAM 角色中配置信任策略以允许 Glue 代入它。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "glue.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
在为账户 B(不拥有表)中的 Glue 作业配置的 IAM 角色中,包括一个权限策略,使其承担账户 A( Dynamo DB 表所有者账户)中的 IAM 角色。
{
"Sid": "DelegateDynamoDBTablesOwnerRoleArn",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::dynamo-db-table-owner-role-arn:role/*"
}
我认为这不适用于 DW 帐户中运行的胶水脚本。
GlueContext 使用表名连接到 DynamoDB:
您应该探索的是在Prod帐户中运行胶水脚本并授予对 DW 存储桶的跨帐户访问权限,以便在生产帐户中运行的 Glue 可以承担在DW 帐户中写入目标 S3 存储桶的角色。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.