netolabs / php-lambda-runtime
一个用于在 AWS Lambda 中运行 PHP 代码的库
Requires
- php: >=7.3
- ext-json: *
- guzzlehttp/guzzle: 6.3.*
- netolabs/simple-container: ^0.2.0
- php-di/invoker: ^2.0
- psr/container: ^1.0
- psr/http-message: 1.0.*
- psr/http-server-handler: 1.0.*
- psr/http-server-middleware: 1.0.*
- ulrichsg/getopt-php: ^3.2
Requires (Dev)
- phake/phake: 3.1.*
- phpunit/phpunit: ^9.0
- squizlabs/php_codesniffer: 2.*
README
要求
- PHP 7.3+
- Composer
安装
从项目的根目录运行 composer require netolabs/php-lambda-runtime
。
为了让您的应用程序在 Lambda 中运行,您需要在项目的根目录中准备两个文件:bootstrap
和 app.php
。
-
bootstrap
可以直接从本库复制(参见bin/bootstrap
),通常不需要修改。 -
app.php
是您实例化 App 对象并定义应用程序所需中间件的地方。由于bootstrap
脚本已经设置了自动加载器,因此您在app.php
中不需要进行此操作。
还需要一个编译成在 AWS Lambda 环境中运行的 PHP 二进制文件。有关如何构建自己的二进制文件的文档可以在此处找到。
部署到 AWS
当您准备好发布新函数时,您需要创建一个包含 app.php
、bootstrap
、src
、vendor
和您的 PHP 二进制文件(在 bin/php
中)的 Zip 文件(或使用 Lambda 层)。然后可以通过 AWS 控制台或您喜欢的 IaC 工具上传该 Zip 文件。
使用中间件
此库使用符合 PSR-15 的中间件。如果您想了解更多关于编写和使用中间件的信息,请参阅这些资源
- https://mwop.net/blog/2018-01-23-psr-15.html
- https://slim.php.ac.cn/docs/v4/concepts/middleware.html
- https://github.com/middlewares/awesome-psr15-middlewares
虽然可重用中间件对于诸如身份验证、日志记录、异常处理等应用程序逻辑非常有用,但通常不建议在中间件中放置业务逻辑。
示例
以下是 app.php
文件的几个基本示例。
匿名函数
在这个例子中,我们使用匿名函数在响应体中输出 "hello world"。
<?php
$app = \Neto\Lambda\Application\AppFactory::create();
$app->addCallable(function() {
return 'hello world';
});
$app->run();
使用 Response 对象的匿名函数
如果您想操作头、状态码等,也可以返回 Response 对象。此示例的头部为 foo: bar
,响应体为 baz
。
<?php
$app = \Neto\Lambda\Application\AppFactory::create();
$app->addCallable(function() {
return new \GuzzleHttp\Psr7\Response(200, [ 'foo' => 'bar' ], 'baz');
});
$app->run();
添加中间件
此示例使用提供的 HelloWorld 中间件返回一个具有修改后的头和体的响应。
<?php
$app = \Neto\Lambda\Application\AppFactory::create();
$app->addMiddleware(new \Neto\Lambda\Middleware\HelloWorld())
->run();
如果从命令行调用,您会看到以下内容
Status code 200
Headers
hello: world
Response body
{"success":true,"message":"Hello world!"}
Duration: 0.006911039352417ms
本地测试
命令行调用
要从命令行运行您的 lambda,您只需运行 vendor/bin/invoke
。有两个可选参数:处理程序名称(-h
)和请求体数据(-d
)。
运行本地服务器
您还可以使用 PHP 内置的 Web 服务器来测试并向您的 lambda 发送请求。只需通过运行 vendor/bin/start_server handler.name [hostname] [port]
来启动服务器。然后,您可以通过 curl 向您的函数发送请求,例如:curl --data '{"foo":"bar"}' localhost
许可
MIT 许可证(MIT)。有关更多信息,请参阅许可文件。