Как подключить вашу локальную функцию php к AWS лямбда? - PullRequest
0 голосов
/ 11 июля 2020

Я новичок в этом. Знаю только про S3 и тоже свой функционал создал. Но теперь я хочу использовать Lambda в моем проекте php. Я использую для этого AWS PHP SDK. Я создал лямбда-функцию для AWS, в которой я передаю имя файла.

Лямбда-функция ищет файл из S3 и предоставляет мне данные внутри файла, но теперь я хочу, чтобы я передать имя файла внутри моей функции php, которая затем передает это имя файла моей лямбда-функции и выполняет поиск файла из S3, а затем возвращает данные внутри файла.

Это моя лямбда-функция на S3

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 функция, которая получает данные из лямбда-функции. Теперь я хочу передать имя файла внутри моей функции php. И лямбда-поиск только этого файла из 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 голосов
/ 11 июля 2020

Это на самом деле довольно просто для ваших требований.

В вашем приложении PHP вы должны использовать аргумент Payload при вызове invoke. Пример ниже:

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;
}

Затем в вашей лямбда-функции вы можете получить доступ к этим данным с помощью параметра события. Пример этого ниже

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...