我写了一个粘合作业,该作业导出DynamoDb表并将其以csv格式存储在S3上。胶粘作业和表位于相同的aws帐户中,但S3存储桶位于不同的aws帐户中。通过将以下存储桶策略附加到跨帐户S3存储桶,我可以从粘合作业访问它。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "tempS3Access",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<AWS-ACCOUNT-ID>:role/<ROLE-PATH>"
},
"Action": [
"s3:Get*",
"s3:Put*",
"s3:List*",
"s3:DeleteObject*"
],
"Resource": [
"arn:aws:s3:::<BUCKET-NAME>",
"arn:aws:s3:::<BUCKET-NAME>/*"
]
}
]
}
现在,我也想从另一个AWS帐户读取/访问DynamoDb表。是否可以使用Crawler访问跨帐户DynamoDb表?我需要实现什么?
谢谢
答案 0 :(得分:0)
简短的回答:您不能。搜寻器只能搜寻您自己帐户中的发电机表。
Looong回答:
您可以使用我的解决方法。
import boto3 . sts_client = boto3.client('sts',region_name='your-region') assumed_role_object=sts_client.assume_role(RoleArn="arn:aws:iam::accountAid:role/the-role-you-created", RoleSessionName="AssumeRoleSession1") credentials=assumed_role_object['Credentials'] dynamodb_client = boto3.resource( 'dynamodb', aws_access_key_id=credentials['AccessKeyId'], aws_secret_access_key=credentials['SecretAccessKey'], aws_session_token=credentials['SessionToken'], region_name='your-region' ) table = dynamodb_client.Table('table-to-crawl') response = table.scan() data = response['Items']
现在有了这个“数据”,其中包含所有表元素,您可以做很多事情。 如果您希望以某种方式处理数据,则可以创建一个dynamicFrame:
dataF = gumContext.create_dynamic_frame.from_rdd(spark.sparkContext.parallelize(data),'data'))
如果需要的话,也可以使用dataFrame。
我希望这有帮助。如果您有任何疑问,请随时提问。