Я использую BREF для запуска моего приложения PHP Laravel на AWS Lambda. У меня было требование использовать этот технологический стек и настроить его с помощью шаблона SAM (поэтому я не могу использовать Serverless ). Lambda строится как изображение Docker, извлекает из ECR и работает в качестве приложения. Это единственный способ заставить мой сценарий работать со всеми зависимостями Laravel. Это на самом деле сработало хорошо до того момента, когда у меня не будет необходимости отправлять сообщения kafka в моем приложении Lambda Laravel, которое не работает без установленного расширения FFI (просто включение его в php.ini не сработало) Полем Я намерен использовать rd-kafka lib
настройка шаблона Bref и Sam
Изначально я подумал добавить слой лямбда Для зависимостей Kafka и FFI настройка расширения в частности. Но подход к настройке шаблона SAM с помощью Lambda функционирует в качестве изображения, ограничивает меня использование Lambda -слоев, включая слои BREF. Как только свойство PackageType: Image , тогда я не могу использовать слои или свойства обработчика, когда он возвращает ошибку во время развертывания SAM
Установка расширения FFI ON Amazon Linux OS < /h3>
Это заставило меня думать, что я должен попытаться вписать все только на одном и том же изображении. Я попытался установить расширение FFI через Install-Php-Extensions. Это не было бы проблемой, если бы я использовал изображение Docker PHP-FPM по умолчанию. Но BREF заставляет меня использовать конкретное базовое изображение BREF/PHP-83 , которое работает на ОС Amazon Linux (что аналогично CentOS, он имеет YUM Manager Package Manager). Эта ОС не основана на Ubuntu/Debian, поэтому я не могу запустить этот скрипт install-php-extensions для установки расширений, поскольку он возвращает ошибку, которая не совместима с этой ОС
< P> Итак, я только что загрузил подходящую версию PHP-SRC, установил все соответствующие зависимости, используя yum (libxml2-devel, sqlite-devel, libffi-devel, php-devel, re2c, bison, autoconf, make, libtool, libtool , librdkafka). К сожалению, я получал ошибку, неспособную загрузить динамическую библиотеку 'ffi' (trese:/opt/bref/extensions/ffi (/opt/bref/extensions/extensions/ffi: не может открыть файл общего объекта: нет такого файла или каталога),), /opt/bref/extensions/ffi.so (libffi.so.7: невозможно открыть файл общего объекта: нет такого файла или каталога)) в неизвестном в строке 0 . Несмотря на то, что я скопировал ffi.so файл в/opt/bref/extensions/extensions . Он существует и имеет соответствующие разрешения. Я попытался запустить Yum GroupInstall "Инструменты разработки" , но это не помогло
, затем я пошел в/usr/src/php-src/ext/ffi < /code> и ran/usr/bin/phpize для подготовки этого расширения. Затем я отправился в PHP-src root, run ./buildconf , чтобы генерировать файл configure . Затем я запустил ./configure-with-ffi ffi_libs =/ext/ffi --ith-config-file-dir =/opt/bref/etc/php/conf.d --ith-libdir = lib64 ffi_libs = /usr/lib64/ поэтому я включил FFI и включил Path to libffi.so . Затем я запустил «сделать , и она почти закончила настройку, но в самом конце у меня есть ошибка
Код: Выделить всё
ext/ffi/ffi.o: In function `zend_ffi_face_struct_add_fields':
/usr/src/php-src/ext/ffi/ffi.c:392: undefined reference to `ffi_type_pointer'
/usr/src/php-src/ext/ffi/ffi.c:389: undefined reference to `ffi_type_uint64'
/usr/src/php-src/ext/ffi/ffi.c:385: undefined reference to `ffi_type_uint32'
/usr/src/php-src/ext/ffi/ffi.c:381: undefined reference to `ffi_type_uint16'
/usr/src/php-src/ext/ffi/ffi.c:377: undefined reference to `ffi_type_uint8'
/usr/src/php-src/ext/ffi/ffi.c:370: undefined reference to `ffi_type_longdouble'
/usr/src/php-src/ext/ffi/ffi.c:366: undefined reference to `ffi_type_double'
/usr/src/php-src/ext/ffi/ffi.c:363: undefined reference to `ffi_type_float'
/usr/src/php-src/ext/ffi/ffi.c:409: undefined reference to `ffi_type_void'
ext/ffi/ffi.o: In function `zend_ffi_get_type':
/usr/src/php-src/ext/ffi/ffi.c:457: undefined reference to `ffi_type_sint8'
/usr/src/php-src/ext/ffi/ffi.c:455: undefined reference to `ffi_type_uint8'
/usr/src/php-src/ext/ffi/ffi.c:447: undefined reference to `ffi_type_float'
/usr/src/php-src/ext/ffi/ffi.c:463: undefined reference to `ffi_type_uint32'
/usr/src/php-src/ext/ffi/ffi.c:465: undefined reference to `ffi_type_sint32'
/usr/src/php-src/ext/ffi/ffi.c:467: undefined reference to `ffi_type_uint64'
/usr/src/php-src/ext/ffi/ffi.c:469: undefined reference to `ffi_type_sint64'
/usr/src/php-src/ext/ffi/ffi.c:459: undefined reference to `ffi_type_uint16'
/usr/src/php-src/ext/ffi/ffi.c:461: undefined reference to `ffi_type_sint16'
/usr/src/php-src/ext/ffi/ffi.c:452: undefined reference to `ffi_type_longdouble'
/usr/src/php-src/ext/ffi/ffi.c:473: undefined reference to `ffi_type_void'
/usr/src/php-src/ext/ffi/ffi.c:471: undefined reference to `ffi_type_pointer'
/usr/src/php-src/ext/ffi/ffi.c:449: undefined reference to `ffi_type_double'
ext/ffi/ffi.o: In function `zend_ffi_callback_hash_dtor':
/usr/src/php-src/ext/ffi/ffi.c:924: undefined reference to `ffi_closure_free'
ext/ffi/ffi.o: In function `zend_ffi_create_callback':
/usr/src/php-src/ext/ffi/ffi.c:1040: undefined reference to `ffi_closure_alloc'
/usr/src/php-src/ext/ffi/ffi.c:1087: undefined reference to `ffi_prep_cif'
/usr/src/php-src/ext/ffi/ffi.c:1092: undefined reference to `ffi_prep_closure_loc'
/usr/src/php-src/ext/ffi/ffi.c:1104: undefined reference to `ffi_closure_free'
ext/ffi/ffi.o: In function `zend_ffi_pass_arg':
/usr/src/php-src/ext/ffi/ffi.c:2581: undefined reference to `ffi_type_float'
/usr/src/php-src/ext/ffi/ffi.c:2586: undefined reference to `ffi_type_double'
/usr/src/php-src/ext/ffi/ffi.c:2592: undefined reference to `ffi_type_double'
/usr/src/php-src/ext/ffi/ffi.c:2598: undefined reference to `ffi_type_uint8'
/usr/src/php-src/ext/ffi/ffi.c:2603: undefined reference to `ffi_type_sint8'
/usr/src/php-src/ext/ffi/ffi.c:2608: undefined reference to `ffi_type_uint16'
/usr/src/php-src/ext/ffi/ffi.c:2613: undefined reference to `ffi_type_sint16'
/usr/src/php-src/ext/ffi/ffi.c:2618: undefined reference to `ffi_type_uint32'
/usr/src/php-src/ext/ffi/ffi.c:2623: undefined reference to `ffi_type_sint32'
/usr/src/php-src/ext/ffi/ffi.c:2628: undefined reference to `ffi_type_uint64'
/usr/src/php-src/ext/ffi/ffi.c:2633: undefined reference to `ffi_type_sint64'
/usr/src/php-src/ext/ffi/ffi.c:2676: undefined reference to `ffi_type_uint8'
/usr/src/php-src/ext/ffi/ffi.c:2681: undefined reference to `ffi_type_sint8'
/usr/src/php-src/ext/ffi/ffi.c:2637: undefined reference to `ffi_type_pointer'
/usr/src/php-src/ext/ffi/ffi.c:2681: undefined reference to `ffi_type_sint8'
ext/ffi/ffi.o: In function `zif_ffi_trampoline':
/usr/src/php-src/ext/ffi/ffi.c:2853: undefined reference to `ffi_prep_cif'
/usr/src/php-src/ext/ffi/ffi.c:2853: undefined reference to `ffi_prep_cif'
/usr/src/php-src/ext/ffi/ffi.c:2862: undefined reference to `ffi_call'
/usr/src/php-src/ext/ffi/ffi.c:2816: undefined reference to `ffi_prep_cif_var'
ext/ffi/ffi.o: In function `zend_ffi_pass_var_arg':
/usr/src/php-src/ext/ffi/ffi.c:2741: undefined reference to `ffi_type_pointer'
ext/ffi/ffi.o: In function `zif_ffi_trampoline':
/usr/src/php-src/ext/ffi/ffi.c:2816: undefined reference to `ffi_prep_cif_var'
ext/ffi/ffi.o: In function `zend_ffi_pass_var_arg':
/usr/src/php-src/ext/ffi/ffi.c:2737: undefined reference to `ffi_type_double'
/usr/src/php-src/ext/ffi/ffi.c:2724: undefined reference to `ffi_type_uint8'
/usr/src/php-src/ext/ffi/ffi.c:2732: undefined reference to `ffi_type_sint64'
/usr/src/php-src/ext/ffi/ffi.c:2720: undefined reference to `ffi_type_uint8'
/usr/src/php-src/ext/ffi/ffi.c:2716: undefined reference to `ffi_type_pointer'
collect2: error: ld returned 1 exit status
make: *** [sapi/cli/php] Error 1
< /code>
Моя последняя попытка состояла в том, чтобы загрузить Libffi и использовать свой путь, чтобы включить эти переменные, которые отсутствуют из -за ошибки выше. Итак, на этот раз я запустил ./configure-with-ffi --ith-config-file-can-dir =/opt/bref/etc/php/conf.d --th-libdir = lib64 ffi_libs =/usr/src /php-src/ect/ffi ffi_cflags =/usr/src/libffi/include Последствия < /h3>
На данный момент у меня больше нет идей, но продолжать играть с этими FFI_LIBS и FFI_CFLAGS, чтобы он работал правильный путь. Если у вас есть идеи, как помочь мне решить эту проблему зависимостей или как заставить мое приложение Laravel Bref работать, пожалуйста, поделитесь со мной своими идеями. Моя конечная цель - запустить приложение Laravel с Bref на AWS Lambda с возможностью отправки сообщений Kafka (поэтому расширение FFI должно быть включено). На данный момент мое приложение BREF работает, но Кафка не работает. Моя лямбда запускается SQS (но я не уверен, важно ли это в текущем контексте)
обновление
ОК, теперь я имел дело с ошибкой выше, запустив этот ./configure ---th-ffi --ith-config-file-can-dir =/opt/bref/etc/php/conf.d pkg_config_path = /usr/src . Я сохранил свой либффи in/usr/src , так что это помогло. Но даже если мне удалось запустить Make и сделать установку , он все еще жалуется на отсутствие FFI.SO, этот
Unable to load dynamic library 'ffi' (tried: /opt/bref/extensions/ffi (/opt/bref/extensions/ffi: cannot open shared object file: No such file or directory), /opt/bref/extensions/ffi.so (/opt/bref/extensions/ffi.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
< /code>
Это заставляет меня думать, что теперь у меня есть несколько версий PHP одновременно, и я должен переключить их, чтобы заставить его работать. Но я все еще готов к любым предложениям! Код>
Подробнее здесь: https://stackoverflow.com/questions/794 ... h-sam-temp
Мобильная версия