Импорт модуля cURL в AWS Lambda

#php #amazon-web-services #aws-lambda #php-curl #awsdeploy

Вопрос:

Я новичок в использовании AWS. В настоящее время я сталкиваюсь с проблемой импорта модуля PHP cURL в лямбда-слой.

Я стараюсь следовать инструкциям на GitHub https://github.com/stackery/php-lambda-layer чтобы настроить слой, но я изменил только arn: arn:aws:lambda:<region>:887080169480:layer:php73:3 для моего региона. Я не знаю, где вводить эти команды, чтобы добавить расширение.

Я также следил за онлайн-учебником https://www.youtube.com/watch?v=MipjLaTp5nAamp;t=800samp;ab_channel=BeABetterDev шаг за шагом развертываю свой стек, но это тоже не сработало.

Существуют ли какие-либо возможные инструкции, которым я должен следовать, или какие-либо материалы, на которые я мог бы сослаться?

Я пытаюсь запустить следующий код на лямбда-языке, который запускается шлюзом API.

 <?php
//------------------------Main--------------------------------------------------
$post = file_get_contents('php://input');
$url = 'https://cinv.ezpay.com.tw/Api/invoice_issue';

$result = curl_work($url, $post);

//------------------------Function----------------------------------------------
function curl_work($url = '', $parameter = '')
{
    $curl_options = array(
    'CURLOPT_URL' => $url,
    'CURLOPT_HEADER' => false,
    'CURLOPT_RETURNTRANSFER' => true,
    'CURLOPT_USERAGENT' => 'ezPay',
    'CURLOPT_FOLLOWLOCATION' => true,
    'CURLOPT_SSL_VERIFYPEER' => false,
    'CURLOPT_SSL_VERIFYHOST' => false,
    'CURLOPT_POST' => '1',
    'CURLOPT_POSTFIELDS' => $parameter
);
    $ch = curl_init();
    curl_setopt_array($ch, $curl_options);
    $result = curl_exec($ch);
    $retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $curl_error = curl_errno($ch);
    curl_close($ch);
    $return_info = array(
        'url' => $url,
        'sent_parameter' => $parameter,
        'http_status' => $retcode,
        'curl_error_no' => $curl_error,
        'web_info' => $result
    );
    return $return_info;
}
?>
 

Я проверил с почтальоном и получил следующий ответ об ошибке.

 <br />
<b>Fatal error</b>: Uncaught Error: Call to undefined function curl_init() in /var/task/index.php:22
Stack trace:
#0 /var/task/index.php(6): curl_work('https://cinv.ez...', '')
#1 {main}
thrown in <b>/var/task/index.php</b> on line <b>22</b><br />
 

Комментарии:

1. Я обновил свой код в соответствии с решением, представленным ниже. Похоже, что проблема связана с импортом модуля curl.

Ответ №1:

можете ли вы попробовать это

 $curl_options = array(
  'CURLOPT_URL' => $url,
  'CURLOPT_HEADER' => false,
  'CURLOPT_RETURNTRANSFER' => true,
  'CURLOPT_USERAGENT' => 'ezPay',
  'CURLOPT_FOLLOWLOCATION' => true,
  'CURLOPT_SSL_VERIFYPEER' => false,
  'CURLOPT_SSL_VERIFYHOST' => false,
  'CURLOPT_POST' => '1',
  'CURLOPT_POSTFIELDS' => $parameter
);
 

Комментарии:

1. Спасибо за ваше предложение. Я изменил его и получил новую ошибку: «Неперехваченная ошибка: вызов неопределенной функции curl_init()» Похоже, я не импортировал модуль curl в лямбду. Могу я узнать, как я могу решить эту проблему?

Ответ №2:

Я решил эту проблему. Я должен добавить расширение в файл php.ini в zip-файле.загрузка файла в Lambda.

 extension=json.so
extension=curl.so
 

Код должен быть следующим.

 <?php
//------------------------Main--------------------------------------------------

$post = file_get_contents('php://input');
$url = 'https://cinv.ezpay.com.tw/Api/invoice_issue';

$array = json_decode($post, true);
$PostData = $array['PostData_'];
    
$result = curl_work($url, $PostData);

echo "Success";

//------------------------Function----------------------------------------------
function curl_work($url = '', $parameter = '')
{
    $curl_options = array(
        CURLOPT_URL => $url,
        CURLOPT_HEADER => false,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_USERAGENT => 'ezPay',
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_POST => '1',
        CURLOPT_POSTFIELDS => $parameter
    );
    $ch = curl_init();
    curl_setopt_array($ch, $curl_options);
    $result = curl_exec($ch);
    $retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $curl_error = curl_errno($ch);
    curl_close($ch);
    $return_info = array(
        'url' => $url,
        'sent_parameter' => $parameter,
        'http_status' => $retcode,
        'curl_error_no' => $curl_error,
        'web_info' => $result
    );
    return $return_info;
}
?>