在扫描操作期间为dynamodb更新STS凭证

时间:2018-08-04 17:23:49

标签: python amazon-web-services boto3 botocore

我是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更新此令牌,并从失败的地方继续扫描。

0 个答案:

没有答案