Amazon dynamodb aws从另一个aws帐户访问/爬网dynamodb(跨帐户访问)

Amazon dynamodb aws从另一个aws帐户访问/爬网dynamodb(跨帐户访问),amazon-dynamodb,aws-glue,Amazon Dynamodb,Aws Glue,我写了一个glue作业,它导出DynamoDb表并以csv格式存储在S3上。粘合作业和表位于同一aws帐户中,但S3存储桶位于不同的aws帐户中。我已经能够从glue作业通过附加以下bucket策略访问交叉帐户S3 bucket { "Version": "2012-10-17", "Statement": [ { "Sid": "tempS3Access", "Effect": "Allow",

我写了一个glue作业,它导出DynamoDb表并以csv格式存储在S3上。粘合作业和表位于同一aws帐户中,但S3存储桶位于不同的aws帐户中。我已经能够从glue作业通过附加以下bucket策略访问交叉帐户S3 bucket

{
    "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>/*"
            ]
        }
    ]
}
{
“版本”:“2012-10-17”,
“声明”:[
{
“Sid”:“tempS3Access”,
“效果”:“允许”,
“委托人”:{
“AWS”:“arn:AWS:iam:::角色/”
},
“行动”:[
“s3:获取*”,
“s3:Put*”,
“s3:列表*”,
“s3:DeleteObject*”
],
“资源”:[
“arn:aws:s3::”,
“arn:aws:s3::/*”
]
}
]
}
现在,我还想从另一个AWS帐户读取/访问DynamoDb表。是否可以使用Crawler访问跨帐户DynamoDb表?我需要什么来实现这一点


谢谢

简短的回答:你不能。爬虫程序只能在您自己的帐户中爬虫dynamo表

回答:
你可以使用我的变通方法

  • 在帐户a中创建一个信任策略。您创建的信任策略就可以了
  • 在您的帐户B中创建一个粘合作业。导入boto3并在第一个帐户中创建会话。然后使用dynamodb.resource可以扫描表。查看我的代码:
  • 现在有了这个“数据”,它保存了所有的表元素,你可以做很多事情。 如果希望以某种方式操纵数据,可以创建dynamicFrame:

    达塔夫= glueContext.create_dynamic_frame.from_rdd(spark.sparkContext.parallelize(data),'data'))

    或者数据帧,如果您需要的话。

    我希望这有帮助。如果您有任何问题,请随时提问。

    简短回答:您不能。爬虫程序只能在您自己的帐户中爬虫dynamo表

    回答:
    你可以使用我的变通方法

  • 在帐户a中创建一个信任策略。您创建的信任策略就可以了
  • 在您的帐户B中创建一个粘合作业。导入boto3并在第一个帐户中创建会话。然后使用dynamodb.resource可以扫描表。查看我的代码:
  • 现在有了这个“数据”,它保存了所有的表元素,你可以做很多事情。 如果希望以某种方式操纵数据,可以创建dynamicFrame:

    达塔夫= glueContext.create_dynamic_frame.from_rdd(spark.sparkContext.parallelize(data),'data'))

    或者数据帧,如果您需要的话。

    我希望这有帮助。如果您有任何问题,请随时提问。

    表格。scan()只扫描1MB表格。如何扫描整个表格?您可以做几件事。一种是使用大扫描将返回的“LastEvaluatedKey”。您可以创建这样一个小函数:
    函数scanAll(key){if(key!==未定义){table.scan(ExclusiveStartKey=data['LastEvaluatedKey'])}
    。或者您可以使用boto paginator。我建议你在这里选择一种方法:非常感谢你。我找到了一种方法来扫描整个表,然后将其转换为glue dynamic Framework。很高兴我能提供帮助。我有一个问题。当我尝试使用列表(这是我的表格的完整扫描)时,我在胶水中得到以下错误。“命令失败,退出代码为1-纱线资源管理器已终止Spark应用程序,请参阅Spark驱动程序日志/指标以进行诊断。”知道为什么会发生这种情况吗?table.scan()只扫描1MB的表格。如何扫描整个表格?您可以做几件事。一种是使用大扫描将返回的“LastEvaluatedKey”。您可以创建这样一个小函数:
    函数scanAll(key){if(key!==未定义){table.scan(ExclusiveStartKey=data['LastEvaluatedKey'])}
    。或者您可以使用boto paginator。我建议你在这里选择一种方法:非常感谢你。我找到了一种方法来扫描整个表,然后将其转换为glue dynamic Framework。很高兴我能提供帮助。我有一个问题。当我尝试使用列表(这是我的表格的完整扫描)时,我在胶水中得到以下错误。“命令失败,退出代码为1-纱线资源管理器已终止Spark应用程序,请参阅Spark驱动程序日志/指标以进行诊断。”知道为什么会发生这种情况吗?
    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']