netolabs/php-lambda-runtime

此包的最新版本(v1.0.0)没有提供许可信息。

一个用于在 AWS Lambda 中运行 PHP 代码的库

v1.0.0 2021-11-03 05:13 UTC

This package is auto-updated.

Last update: 2024-08-29 06:01:45 UTC


README

要求

  • PHP 7.3+
  • Composer

安装

从项目的根目录运行 composer require netolabs/php-lambda-runtime

为了让您的应用程序在 Lambda 中运行,您需要在项目的根目录中准备两个文件:bootstrapapp.php

  • bootstrap 可以直接从本库复制(参见 bin/bootstrap),通常不需要修改。

  • app.php 是您实例化 App 对象并定义应用程序所需中间件的地方。由于 bootstrap 脚本已经设置了自动加载器,因此您在 app.php 中不需要进行此操作。

还需要一个编译成在 AWS Lambda 环境中运行的 PHP 二进制文件。有关如何构建自己的二进制文件的文档可以在此处找到。

部署到 AWS

当您准备好发布新函数时,您需要创建一个包含 app.phpbootstrapsrcvendor 和您的 PHP 二进制文件(在 bin/php 中)的 Zip 文件(或使用 Lambda 层)。然后可以通过 AWS 控制台或您喜欢的 IaC 工具上传该 Zip 文件。

使用中间件

此库使用符合 PSR-15 的中间件。如果您想了解更多关于编写和使用中间件的信息,请参阅这些资源

虽然可重用中间件对于诸如身份验证、日志记录、异常处理等应用程序逻辑非常有用,但通常不建议在中间件中放置业务逻辑。

示例

以下是 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)。有关更多信息,请参阅许可文件