Почему Бреф не может загрузить bootstrap: «Ошибка: не удалось найти действительные bootstrap (s): [/ var / task / bootstrap / opt / bootstrap]»? - PullRequest
0 голосов
/ 31 января 2020

Я изучаю, как я могу создать 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]"}

Поэтому я хочу спросить, почему я не могу запустить свою локальную лямбду?

1 Ответ

0 голосов
/ 31 января 2020

Это известная ошибка для bref. Это можно решить, предоставив слой вручную для вашей функции в serverless.yml. Поэтому раздел functions в serverless.yml должен измениться с:

functions:
    dummy:
        handler: index.php
        name: Dummy-${self:provider.stage}
        description: 'Dummy Lambda'
        layers:
            - ${bref:layer.php-73}

Into:

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:aws:lambda:eu-central-1:209497400698:layer:php-73:15

указано, что слой находится в версии "15", что является самым последним на момент ответа. Следующий логически должен быть:

arn:aws:lambda:eu-central-1:209497400698:layer:php-73:16
...