Next Generation Shell - custom runtime layer for AWS Lambda.
Consider this project experimental / alpha quality.
See ngs-lang/ngs#88
Requirements:
- docker on local machine
- Functional AWS CLI - the script will publish the layer using AWS CLI
- https://github.com/ngs-lang/ngs checked out to a local directory
./make-layer.ngs /path/to/sources/of/ngs
Take a note of LayerVersionArn
.
If the build was OK but the publishing of the layer failed and you would like to retry the publishing after fixing the issue, run the following:
./make-layer.ngs /path/to/sources/of/ngs --no-build
The make-layer.ngs
script works roughly as follows:
- Runs docker container with Amazon Linux.
- Builds NGS in the container.
- Copies out of the container:
- the NGS binary (
ngs
file) - NGS libraries (
*.ngs
files) - the libraries (
*.so*
files) NGS depends on ngs-version
file
- the NGS binary (
- Creates a zip with the above and the
bootstrap
file. - Publishes the zip file as a layer, using the contents of
ngs-version
file as part of the name of the layer. Example layer name:ngs-0-2-14-alpha
.
The created layer provides custom runtime. See the official documentation about using custom runtimes:
https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html#runtimes-custom-use
Use LayerVersionArn
from the output of make-layer.ngs
to configure your Lambda Function.
See also the examples
directory.
To debug the bootstrap
program, pass environment variable DEBUG=aws_lambda_bootstrap
to the Lambda Function.
The handler function is called with two Hash
objects as positional arguments: event
and context
, like in other languages supported by AWS Lambda.
Event is arbitrary and completely depends on the invocation. Different types of events have different formats.
Sample context (from a log):
{function_name=ngs-test-01, initialization_type=on-demand, log_stream_name=2022/01/04/[$LATEST]bfdd8e2d86ec44779cf284118be63e89, runtime_api=127.0.0.1:9001, log_group_name=/aws/lambda/ngs-test-01, function_version=$LATEST, function_memory_size=128, deadline_ms=1641291314318, aws_request_id=5edeb030-f279-49ae-a49c-2b54eafe7dcb, invoked_function_arn=arn:aws:lambda:eu-central-1:123456789:function:ngs-test-01, identity={}, client_context={}}