Упаковка и доставка G CC Компилятор со всеми зависимостями от AWS Lambda - PullRequest
0 голосов
/ 17 июня 2020

Я хочу взять компилятор G CC, который установлен на моем компьютере, и все его зависимости и заархивировать их в пакете развертывания, который я могу отправить на AWS Lambda (таким образом я могу использовать Lambda для компиляции C код). Есть ли простой способ упаковать все это в один go, чтобы я мог развернуть и использовать его из AWS Lambda?

Это то, что у меня есть прямо сейчас

enter image description here

Однако, когда я вызываю функцию, я получаю

"gcc: error trying to exec 'cc1': execvp: No such file or directory\n"

в качестве ответа. В настоящее время я компилирую g cc и зависимости, которые вы видите на левой панели, путем запуска контейнера Amazon Linux docker, установки g cc и последующего заархивирования g cc и его зависимостей. найдено с помощью команды ldd.

Ответы [ 3 ]

1 голос
/ 18 июня 2020

Отличный вопрос!

Как вы говорите, просто упаковка двоичного файла не помогает, потому что вам не хватает файлов .so общих объектов или некоторых других зависимостей. Вы можете найти свои зависимости, запустив что-то вроде ldd, и этот вопрос поможет. Такие проекты, как yumda , попробуйте упростить, и определенно стоит попробовать.

Но под капотом Lambda использует Amazon Linux, и на самом деле нет причин, по которым это невозможно сделать. Нам нужны следующие точки высокого уровня:

  • Создайте двоичный файл в Amazon Linux контейнер
  • Определите двоичный файл и его зависимости
  • Скопируйте двоичный файл и зависимости из контейнера в контейнер lambci
  • Протестируйте контейнер lambci (для этого обычно нужно установить несколько переменных env, например $LD_LIBARY_PATH.
  • После его запуска упакуйте его в виде zip-архива и загрузите его в свою лямбду, не забыв установить правильные переменные env
  • Как вариант, я бы упаковал g cc как слой, чтобы вы могли поделиться им.

Когда я поискал, похоже, что кто-то сделал именно это здесь . Надеюсь, это именно то, что вы ищете.

1 голос
/ 17 июня 2020

AWS Время выполнения лямбды описано здесь . В основном это Amazon Linux. На вашем месте я бы попытался захватить указанный AMI и создать с ним экземпляр EC2. Или просто создайте инстанс Amazon Linux 2 EC2. Затем я должен был войти в этот экземпляр и скомпилировать нужные вам двоичные файлы. Наконец, я бы экспортировал их в ZIP-файл и отправил бы с Lambda. Таким образом, высока вероятность, что двоичные файлы будут работать с Lambda.

0 голосов
/ 18 июня 2020

Настроить, собрать и установить g cc в указанный каталог c, указанный параметром --prefix для настройки.

После установки измените файл g cc spe c, чтобы он жестко закодировал -rpath в исполняемые файлы и общие библиотеки , чтобы вам не пришлось возиться с LD_LIBARY_PATH ( что в большинстве случаев является неправильным решением ), чтобы исполняемые файлы находили правильный libstdc++.so, libgcc_s.so и его друзей.

rsync каталог на другом компьютере в то же место в файловой системе.

Или заархивируйте установочный каталог и распакуйте его на целевой машине.

Однако цель должна иметь ту же библиотеку c и системные библиотеки, с помощью которых была собрана g cc, иначе это может работать не так, как задумано.


В качестве альтернативы, выполните сборку локально и разверните свои исполняемые файлы со всеми их зависимостями, используя Exodus .

...