Почему 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
Другие вопросы по тегам