我是python的新手,需要将数据从一个dynamo数据库迁移到另一个。 问题是我们有多个帐户用于不同的环境,例如一个帐户用于开发,一个帐户用于产品。我有/使用Ec2实例来迁移此数据。要访问产品帐户,我需要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)
然后我需要扫描生产表(实际上,我创建了备份并从该备份中还原了另一个表,以减少对生产表的影响)
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
问题是我的prod数据库中的数据太多,并且STS令牌过期太快(由于某些限制,我不能创建超过1小时的sts凭据)。结果,我的pageIterator在某些时候抛出异常,令牌过期异常。 也许可以为此pageIterator更新此令牌,并从失败的地方继续扫描。