我正在研究如何使用bref库在php中创建AWS lambda。
因此,根据documentation,我使用以下命令鸡尾酒设置了环境:
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?
发布于 2020-01-31 20:19:06
它是已知的用于bref的bug。它可以通过在serverless.yml中的函数上手动提供层来解决。因此,serverless.yml上的functions部分应该从以下位置更改:
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中
arn:aws:lambda:eu-central-1:209497400698:layer:php-73:15表示该层的版本为"15“,该版本是在回答时的最新版本。下一个逻辑上应该是:
arn:aws:lambda:eu-central-1:209497400698:layer:php-73:16发布于 2021-04-13 17:08:31
由于这个问题引起了很多人的关注,我建议您查看一下Bref文档:
这涉及到使用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发布于 2021-07-23 21:15:41
在我的本地,在调用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/https://stackoverflow.com/questions/60002893
复制相似问题