import boto3
 
def wait_for_lambda_activation(function_name):
    """Waits for the Lambda function to become active."""
    waiter = lambda_client.get_waiter('function_active_v2')
    try:
        waiter.wait(
            FunctionName=function_name,
            WaiterConfig={
                'Delay': 10,  # Seconds to wait between each poll
                'MaxAttempts': 12  # Maximum number of polling attempts
            }
        )
    except WaiterError as e:
        print(f"Waiter failed: {e}")
        raise
 
 
def invoke_lambda(function_name, payload):
    """Invokes the Lambda function, retries if it's not active."""
    try:
        # Attempt to invoke the Lambda function
        return invoke_lambda_once(function_name, payload)
    except ClientError as e:
        print(f"Invocation failed, waiting for activation: {e}")
        # Wait for activation and retry
        wait_for_lambda_activation(function_name)
        return invoke_lambda_once(function_name, payload)