Python 在扫描操作期间更新dynamodb的STS凭据
我是python新手,需要将数据从一个dynamo db迁移到另一个db。 问题是,我们有多个帐户用于不同的环境,例如一个用于开发,一个用于生产。我有/使用Ec2实例来迁移这些数据。要访问prod帐户,我有STSPython 在扫描操作期间更新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
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