使用来自boto3的S3有效负载调用Lambda函数

时间:2019-07-26 19:14:23

标签: amazon-s3 aws-lambda boto3

我需要调用一个接受S3路径的Lambda函数。下面是lambda函数的示例代码。

def lambda_handler(event, context):
    bucket = "mybucket"
    key = "mykey/output/model.tar.gz"

    model = load_model(bucket, key)
    somecalc = some_func(model)

    result = {'mycalc': json.dumps(somecalc)}

    return result

我需要使用boto3从我的客户端代码中调用此处理程序。我知道我可以发出如下请求

lambda_client = boto3.client('lambda')
    response = lambda_client.invoke(
    FunctionName='mylambda_function',
    InvocationType='RequestResponse',
    LogType='Tail',
    ClientContext='myContext',
    Payload=b'bytes'|file,
    Qualifier='1'
)

但是我不确定如何在有效负载中指定S3路径。看起来好像正在使用JSON。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以这样指定有效负载:

payload = json.dumps({ 'bucket': 'myS3Bucket' })

lambda_client = boto3.client('lambda')
    response = lambda_client.invoke(
    FunctionName='mylambda_function',
    InvocationType='RequestResponse',
    LogType='Tail',
    ClientContext='myContext',
    Payload=payload,
    Qualifier='1'
)

然后像这样访问您的lamdba处理程序中的有效负载属性:

def lambda_handler(event, context):
    bucket = event['bucket'] # pull from 'event' argument
    key = "mykey/output/model.tar.gz"

    model = load_model(bucket, key)
    somecalc = some_func(model)

    result = {'mycalc': json.dumps(somecalc)}

    return result