如何将本地php函数连接到AWS lambda?

时间:2020-07-11 08:48:32

标签: python php amazon-web-services amazon-s3 aws-lambda

我对此很陌生。我只了解S3,还创建了我的功能。但是,现在我想在我的php项目中使用Lambda。我为此使用AWS PHP SDK。我在要传递文件名的AWS上创建了一个lambda函数。

lambda函数从S3中搜索文件,并向我提供文件中的数据,但是现在我要做的是我在php函数中传递文件名,然后将该文件名传递给我的Lambda函数并搜索来自S3的文件,然后返回文件中的数据。

这是我在S3上的lambda函数

import boto3

bucket = 'get-file-lambda-function'
filename = 'myfilename.json'
    
def lambda_handler(event, context):
    s3 = boto3.client('s3')
    file = s3.get_object(Bucket=bucket, Key=filename)
    body = file.get()['Body'].read()
    
return body

这是我的php函数,它从lambda函数获取数据。现在,我想在我的php函数中传递文件名。而且lambda仅从S3搜索该文件。

public function get_file_data() 
{
    $client = LambdaClient::factory(AWS configrations);

    $filename = /*selected by me*/

    $fileData = $client->invoke([
        // Lambda function name
        'FunctionName' => 'get-file-lambda-function',
    ]);

    return $fileData;
}

我是一个初学者,所以我现在不知道这一点。有人可以指导我如何实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

这实际上很简单,满足您的要求。

在您的PHP应用程序中,调用调用时将使用Payload参数。下面是一个例子

public function get_file_data($file_name) 
{
    $client = LambdaClient::factory(AWS configuration);

    $filename = /*selected by me*/

    $fileData = $client->invoke([
        // Lambda function name
        'FunctionName' => 'get-file-lambda-function',
        'Payload' => json_encode(['bucket' => 'get-file-lambda-function', 'key' => $file_name])
    ]);

    return $fileData;
}

然后在Lambda函数中,您将使用event参数访问此数据。下面的一个例子

import boto3

s3 = boto3.client('s3')

def lambda_handler(event, context):
    bucket = event['bucket']
    filename = event['key']
    file = s3.get_object(Bucket=bucket, Key=filename)
    body = file.get()['Body'].read()

    return body