intermaterium / kickstart
AWS lambda runtime wrapper
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
Description
A simple PHP wrapper library around AWS lambda's runtime API. To be used inside a custom PHP 8 runtime.
Usage
Lambda Runtime
Composer install the library into your lambdas runtime layer or another layer dedicated to composer files.
composer require intermaterium/kickstart
Then create a /opt/bootstrap file in your lambdas runtime layer invoking the library.
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 functions
Kickstart supports aws lambdas in the form of either php functions like:
use Intermaterium\Kickstart\Context\Context; return function($event, Context $context): mixed { return 'Hello ' . ($event['queryStringParameters']['name'] ?? 'world'); };
Or callable classes:
use Intermaterium\Kickstart\Context\Context; class Handler { public function __invoke($event, Context $context): mixed { return 'Hello ' . ($event['queryStringParameters']['name'] ?? 'world'); } } return new Handler();