0

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

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

sudo -H npm install -g serverless
composer require bref/bref

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

 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]"}

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

4

3 回答 3

0

在我的本地,在调用 lambda 之前清除缓存工作正常,我使用的是 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/
于 2021-07-23T13:15:41.210 回答
0

Since this question is getting a lot of views, I recommend to have a look at the Bref documentation:

Local development for PHP functions

That involves using the bref local CLI command instead of 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
于 2021-04-13T09:08:31.020 回答
0

这是 bref 的一个已知错误。可以通过在serverless.yml. 所以functionsserverless.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层。因此,您需要手动为 lambda 层提供 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
于 2020-01-31T12:19:05.637 回答