如何使用Python Lambda批量创建AWS Secret?

问题描述 投票:0回答:1
  1. 我正在对 AWS Secrets 进行备份和恢复测试,我需要从备份 JSON 文件创建大约 1000 个机密。
  2. 我编写了一个 Python Lambda 函数,但它只取得了部分成功
  3. AWS API 将速率限制为每秒 50 个秘密创建,并且由于我的代码是连续的,因此它不会在单次运行中创建所有秘密
  4. 第二次运行 lambda 时,创建了剩余的秘密

这是Python代码:https://bpa.st/RRQQW

我试图将秘密的创建限制为每秒 50 个,但它似乎没有按预期工作。我研究了 Python 并发性,但不确定它如何适用于我的情况

python amazon-web-services aws-lambda concurrency boto3
1个回答
0
投票

当处理 AWS Secrets Manager 并需要创建大量密钥,同时遵守每秒 50 个请求的 API 速率限制时,您可以使用 Python 的并发.futures 模块并仔细计时来实现此目的。

伪代码:

FUNCTION create_secret(secret_manager, secret_name, secret_value):
    TRY:
        Create secret using secret_manager.create_secret()
        RETURN success message
    CATCH ClientError as e:
        IF error is 'ResourceExistsException':
            RETURN "Secret already exists" message
        ELSE:
            RETURN error message

FUNCTION lambda_handler(event, context):
    Initialize secret_manager client
    Load secrets_data from JSON file
    
    SET total_secrets = number of secrets in secrets_data
    SET secrets_created = 0
    SET rate_limit = 50  // AWS API rate limit
    SET batch_size = 50  // Number of secrets to process in each batch
    
    FUNCTION process_batch(batch):
        Initialize empty results list
        CREATE ThreadPoolExecutor with max_workers = rate_limit
            FOR EACH secret_name, secret_value IN batch:
                Submit create_secret task to executor
            FOR EACH completed future:
                Append result to results list
        RETURN results
    
    SET start_time = current time
    
    FOR i = 0 TO total_secrets STEP batch_size:
        Create batch of secrets from secrets_data
        CALL process_batch(batch)
        Update secrets_created count
        
        Print progress
        
        Calculate elapsed_time
        IF elapsed_time < 1 second:
            Sleep for remaining time to complete 1 second
        
        Reset start_time
    
    RETURN success response with secrets created count
© www.soinside.com 2019 - 2024. All rights reserved.