首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Bref无法加载引导程序:“错误:找不到有效的引导程序:[/var/task/bootstrap /opt/bootstrap]"?

为什么Bref无法加载引导程序:“错误:找不到有效的引导程序:[/var/task/bootstrap /opt/bootstrap]"?
EN

Stack Overflow用户
提问于 2020-01-31 19:20:16
回答 3查看 3K关注 0票数 0

我正在研究如何使用bref库在php中创建AWS lambda。

因此,根据documentation,我使用以下命令鸡尾酒设置了环境:

代码语言:javascript
复制
sudo -H npm install -g serverless
composer require bref/bref

然后使用以下命令创建我的第一个php lambda:

代码语言:javascript
复制
 vendor/bin/bref init

我选择了默认提供的第一个选项PHP Function。创建以下内容创建index.php文件:

代码语言:javascript
复制
declare(strict_types=1);

require __DIR__.'/vendor/autoload.php';

lambda(function ($event) {
    return 'Hello ' . ($event['name'] ?? 'world');
});

然后我把我的serverless.yml改成这样:

代码语言:javascript
复制
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}

我尝试通过以下命令启动它:

代码语言:javascript
复制
sls invoke local --stage=local --docker --function dummy

但我得到以下错误:

代码语言:javascript
复制
{"errorType":"exitError","errorMessage":"RequestId: 6403ebee-13b6-179f-78cb-41cb2f517460 Error: Couldn't find valid bootstrap(s): [/var/task/bootstrap /opt/bootstrap]"}

因此,我想问为什么我不能在本地运行我的lambda?

EN

回答 3

Stack Overflow用户

发布于 2020-01-31 20:19:06

它是已知的用于bref的bug。它可以通过在serverless.yml中的函数上手动提供层来解决。因此,serverless.yml上的functions部分应该从以下位置更改:

代码语言:javascript
复制
functions:
    dummy:
        handler: index.php
        name: Dummy-${self:provider.stage}
        description: 'Dummy Lambda'
        layers:
            - ${bref:layer.php-73}

进入:

代码语言:javascript
复制
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层。因此,您需要手动提供lambda层的arn。

请记住,arn有不同的“版本”,从arn中的最后一个数字开始,用:分隔。所以在arn中

代码语言:javascript
复制
arn:aws:lambda:eu-central-1:209497400698:layer:php-73:15

表示该层的版本为"15“,该版本是在回答时的最新版本。下一个逻辑上应该是:

代码语言:javascript
复制
arn:aws:lambda:eu-central-1:209497400698:layer:php-73:16
票数 0
EN

Stack Overflow用户

发布于 2021-04-13 17:08:31

由于这个问题引起了很多人的关注,我建议您查看一下Bref文档:

这涉及到使用bref local CLI命令,而不是serverless invoke local

代码语言:javascript
复制
$ 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
票数 0
EN

Stack Overflow用户

发布于 2021-07-23 21:15:41

在我的本地,在调用lambda之前清除缓存效果很好,我使用的是linux / ubuntu

代码语言:javascript
复制
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/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60002893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档