Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在扫描操作期间更新dynamodb的STS凭据_Python_Amazon Web Services_Boto3_Botocore - Fatal编程技术网

Python 在扫描操作期间更新dynamodb的STS凭据

Python 在扫描操作期间更新dynamodb的STS凭据,python,amazon-web-services,boto3,botocore,Python,Amazon Web Services,Boto3,Botocore,我是python新手,需要将数据从一个dynamo db迁移到另一个db。 问题是,我们有多个帐户用于不同的环境,例如一个用于开发,一个用于生产。我有/使用Ec2实例来迁移这些数据。要访问prod帐户,我有STS stsCredentials = boto3.client('sts').assume_role( RoleArn=STS_ROLE_TO_ACCESS_DEV_ACCOUNT_ARN, RoleSessionName='cross-account-dynamodb-r

我是python新手,需要将数据从一个dynamo db迁移到另一个db。 问题是,我们有多个帐户用于不同的环境,例如一个用于开发,一个用于生产。我有/使用Ec2实例来迁移这些数据。要访问prod帐户,我有STS

stsCredentials = boto3.client('sts').assume_role(
    RoleArn=STS_ROLE_TO_ACCESS_DEV_ACCOUNT_ARN,
    RoleSessionName='cross-account-dynamodb-role',
    DurationSeconds=STS_TOKEN_TIME_OUT
)

prodAccount = boto3.client(
    'dynamodb',
    region_name=AWS_REGION,
    aws_access_key_id=stsCredentials['Credentials']['AccessKeyId'],
    aws_secret_access_key=stsCredentials['Credentials']['SecretAccessKey'],
    aws_session_token=stsCredentials['Credentials']['SessionToken']
)
devAccount = boto3.client('dynamodb', region_name=AWS_REGION)
然后,我需要扫描生产表(实际上,我创建了备份并从该备份中恢复了另一个表,以减少对生产表的影响)


问题是我的prod db有太多数据,STS令牌过期太快(由于一些限制,我无法创建超过1小时的STS凭据)。结果,我的pageIterator在某个点抛出异常,标记过期异常可能可以更新此页面迭代器的此令牌,并从失败点继续扫描。

您的问题是什么?@mkrieger1。我的问题是“是否可以更新此pageIterator的此令牌并从失败点继续扫描”。其他具有memoize()函数的AWS SDK将缓存并自动续订AssumeRole凭据。我的“猜测”是,您可以在扫描时从AssumeRole()刷新凭据。感谢@JohnHanley的评论。正如我所说,我是Python的新手,我选择了aws@AlekseiBulgak中提到的官方sdk——您使用的是正确的sdk。对于其他语言,AWS SDK具有memoize()函数,但由于某些原因,Python SDK没有。我计划本周编写您的示例,并使用刷新凭据进行测试。如果到那时还没有发布解决方案,我会将我的代码作为答案发布。
paginator = prodAccount.get_paginator('scan')
pageIterator = paginator.paginate(
    TableName=backupTableName,
    Select='ALL_ATTRIBUTES',
    ReturnConsumedCapacity='TOTAL',
    ConsistentRead=False
)
for page in pageIterator :
    for item in page['Items']:
        // Process response, store data to different files and migration to dev account