我对此很陌生。我只了解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;
}
我是一个初学者,所以我现在不知道这一点。有人可以指导我如何实现这一目标吗?
答案 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