Почему Bref не может загрузить загрузочную программу: "Ошибка: не удалось найти допустимую загрузку (ы): [/ var / task / bootstrap / opt / bootstrap]"?
Я изучаю, как создать лямбду AWS на php с помощью библиотеки bref.
Поэтому, согласно документации, я настроил среду с помощью следующего коктейля команд:
sudo -H npm install -g serverless
composer require bref/bref
Затем с помощью следующей команды была создана моя первая лямбда-функция php:
vendor/bin/bref init
И я выбрал первый вариант PHP Function
предоставляется по умолчанию. Создание следующего созданияindex.php
файл:
declare(strict_types=1);
require __DIR__.'/vendor/autoload.php';
lambda(function ($event) {
return 'Hello ' . ($event['name'] ?? 'world');
});
Затем я изменил свой serverless.yml
в это:
service: app
provider:
name: aws
region: eu-central-1
runtime: provided
stage: ${opt:stage,'local'}
package:
exclude:
- '.gitignore'
plugins:
- ./vendor/bref/bref
functions:
dummy:
handler: index.php
name: Dummy-${self:provider.stage}
description: 'Dummy Lambda'
layers:
- ${bref:layer.php-73}
И пытаюсь запустить с помощью следующей команды:
sls invoke local --stage=local --docker --function dummy
Но я получаю следующую ошибку:
{"errorType":"exitError","errorMessage":"RequestId: 6403ebee-13b6-179f-78cb-41cb2f517460 Error: Couldn't find valid bootstrap(s): [/var/task/bootstrap /opt/bootstrap]"}
Поэтому я хочу спросить, почему я не могу запустить локальную лямбду?
3 ответа
Поскольку этот вопрос набирает много просмотров, я рекомендую взглянуть на документацию Bref:
Локальная разработка функций PHP
Это предполагает использование
bref local
Команда CLI вместо
serverless invoke local
:
$ vendor/bin/bref local hello
Hello world
# With JSON event data
$ vendor/bin/bref local hello '{"name": "Jane"}'
Hello Jane
# With JSON in a file
$ vendor/bin/bref local hello --file=event.json
Hello Jane
На моем локальном компьютере очистка кеша перед вызовом лямбда работала нормально, я использую linux / ubuntu
docker system prune --all
sudo apt-get autoremove
sudo apt-get clean
sudo apt-get autoclean
sudo rm -rf ~/.cache/
sudo rm -rf /var/cache/
Это известная ошибка для bref. Это можно решить, предоставив слой вручную для вашей функции вserverless.yml
. Так чтоfunctions
раздел на serverless.yml должен измениться с:
functions:
dummy:
handler: index.php
name: Dummy-${self:provider.stage}
description: 'Dummy Lambda'
layers:
- ${bref:layer.php-73}
В:
functions:
dummy:
handler: index.php
name: Dummy-${self:provider.stage}
description: 'Dummy Lambda'
layers:
- 'arn:aws:lambda:eu-central-1:209497400698:layer:php-73:15'
Причина в том, что ${bref:layer.php-73}
не может быть разрешен в уровень php. Следовательно, вам необходимо вручную указать arn для лямбда-слоя.
Имейте в виду, что arn бывает различных "версий", которые начинаются с последнего числа в arn, разделенного :
. Так что в арн
arn:aws:lambda:eu-central-1:209497400698:layer:php-73:15
Указано, что слой находится в версии "15", которая является последней на момент ответа. Следующим по логике должно быть:
arn:aws:lambda:eu-central-1:209497400698:layer:php-73:16