This package is intended to generate all the boilerplate code required to deploy an AWS Lambda function via AWS SAM.
You will need to download and install the following:
You will need to generate a new project by running,
using LambdaMaker
create_lambda_package("project_name")
If a directory already exists with the project_name
, an error is thrown and the directory is left untouched.
You can pass force=true
as a kwarg
to overwrite it.
This will create a new directory in your working directory with the following files:
bootstrap
: This is the file which Lambda will use when it first runsDockerfile
: Defines the Docker image that will run in the Lambda environmenthandle_requests.jl
: Reads the Lambda invocations, calls your code, and writes the responsesProject.toml
: Basic TOML for defining your package to be deployed on Lambdatemplate.yml
: The CloudFormation stack which will be created when deploying via AWS SAMsrc/{project_name}.jl
: A module with the boilerplatehandle_event(event_data, headers)
function
You will need to modify the src/{project_name}.jl
file to include whatever code you wish to run in the Lambda function.
The entrypoint for Lambda will be the handle_event(event_data, headers)
function, you will need to modify this to call the functions you wish to invoke.
Note: If you want to specify an ENTRYPOINT
script in the Dockerfile (e.g. to set some environment variables), you must explicitly run the bootstrap file in that script.
Dockerfile:
WORKDIR /var/task
ENTRYPOINT [ "script.sh" ]
CMD [ "Module.function" ]
script.sh:
#!/bin/bash
export FOO=1
./bootstrap
AWS SAM documentation can be found here. The short-handed version is,
Build your Docker image as:
sam build
Test locally by running:
sam local invoke JuliaFunction
If your function requires some form of input see the appendix for more information.
When you are satisfied and want to deploy your function,
sam deploy --guided
If you want to update your function, you can use SAM sync.
Passing inputs is usually done in the JSON format. You will need to add a package to parse this information, such as JSON3.jl.
After generating the boilerplate code and adding in your JSON parsing functionality you will need to modify the src/project_name.jl
.
Modify the handle_event()
function as,
module MyPackage
using JSON3
function handle_event(event_data, headers)
input = JSON3.read(event_data)[:input_variable]
return your_function(input)
end
end
You will then need to define a JSON file to pass into your function as,
{
"input_variable": 10
}
To pass this event JSON file when localy testing as,
sam local invoke -e event.json JuliaFunction