intermaterium / kickstart
AWS lambda 运行时包装器
v1.3.0
2023-08-01 13:36 UTC
Requires
- php: ^8.0
- ext-json: *
- guzzlehttp/guzzle: ^7.5
Requires (Dev)
- mockery/mockery: ^1.5
- phpunit/phpunit: ^9.5
README
描述
一个简单的PHP包装库,围绕AWS lambda的运行时API。用于在自定义PHP 8运行时内部使用。
使用方法
lambda 运行时
使用Composer将库安装到您的lambda运行时层或其他用于composer文件的专用层。
composer require intermaterium/kickstart
然后,在您的lambda运行时层中创建一个/opt/bootstrap文件,调用该库。
use Intermaterium\Kickstart\Locator\FileHandlerLocator; use Intermaterium\Kickstart\Response\ErrorResponseBuilder; use Intermaterium\Kickstart\RuntimeFactory; require_once('/opt/vendor/autoload.php'); // Create our runtime from the provided environment $errorResponseBuilder = new ErrorResponseBuilder(); $runtimeFactory = new RuntimeFactory($errorResponseBuilder); $runtime = $runtimeFactory->create(getenv('AWS_LAMBDA_RUNTIME_API')); try { // Retrieve the function being invoked by lambda $fileHandlerLocator = new FileHandlerLocator(getenv('LAMBDA_TASK_ROOT')); $lambdaHandler = $fileHandlerLocator->get(getenv('_HANDLER')); } catch (\Exception $e) { // If we failed to get the handler send an initialisation error and kill the lambda $runtime->initialisationFailure('Failed to get lambda handler', $e); exit(1); } do { // Infinitely loop handling events from lambda until lambda kills the runtime $runtime->invoke($lambdaHandler); } while(true);
lambda 函数
Kickstart支持以下形式的aws lambdas:
use Intermaterium\Kickstart\Context\Context; return function($event, Context $context): mixed { return 'Hello ' . ($event['queryStringParameters']['name'] ?? 'world'); };
或可调用的类
use Intermaterium\Kickstart\Context\Context; class Handler { public function __invoke($event, Context $context): mixed { return 'Hello ' . ($event['queryStringParameters']['name'] ?? 'world'); } } return new Handler();