Deploy Bash Lambda Functions with AWS CDK
Project description
cdk-lambda-bash
Deploy Bash Lambda Functions with AWS CDK
Why
AWS Lambda has the docker container image support since AWS re:Invent 2020 which allows you to run your Lambda code in a custom container image. Inspired by nikovirtala/cdk-eks-experiment, cdk-lambda-bash
allows you to specify a local shell script and bundle it up as a custom resource in your cdk stack. On cdk deployment, your shell script will be executed in a Lambda container environment.
BashExecFunction
At this moment, we are offering BashExecFunction
construct class which is a high-level abstraction of lambda.Function
. By defining the script
property which poins to your local shell script, on cdk deploy
, this script will be bundled into a custom docker image and published as a lambda.DockerImageFunction
.
If you fn.run()
, a custom resource will be created and the lambda.DockerImageFunction
will be executed on deployment.
Sample
# Example automatically generated without compilation. See https://github.com/aws/jsii/issues/826
app = cdk.App()
stack = cdk.Stack(app, "my-stack")
# bundle your Lambda function to execute the local demo.sh in container
fn = BashExecFunction(stack, "Demo",
script=path.join(__dirname, "../demo.sh")
)
# run it as custom resource on deployment
fn.run()
Custom Dockerfile
In some cases, you may customize your own Dockerfile
, for instances:
- You need extra tools or utilities such as
kubectl
orhelm
- You need build from your own base image
In these cases, create a custom Dockerfile
as below and add extra utilities i.e. kubectl
:
click and view custom Dockerfile sample
FROM public.ecr.aws/lambda/provided:al2
RUN yum install -y unzip jq
# install aws-cli v2
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \
unzip awscliv2.zip && \
./aws/install
# install kubectl
RUN curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.19.6/2021-01-05/bin/linux/amd64/kubectl && \
chmod +x kubectl && \
mv kubectl /usr/local/bin/kubectl
COPY bootstrap /var/runtime/bootstrap
COPY function.sh /var/task/function.sh
COPY main.sh /var/task/main.sh
RUN chmod +x /var/runtime/bootstrap /var/task/function.sh /var/task/main.sh
WORKDIR /var/task
CMD [ "function.sh.handler" ]
Specify your own Dockerfile
with the dockerfile
property.
# Example automatically generated without compilation. See https://github.com/aws/jsii/issues/826
BashExecFunction(stack, "Demo",
script=path.join(__dirname, "../demo.sh"),
dockerfile=path.join(__dirname, "../Dockerfile")
)
In Action
See this tweet
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for cdk_lambda_bash-0.3.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 15379e5e055af6228eae6d7f30fba59b456858d8f2dde4778943aecb48507bb1 |
|
MD5 | 0c16cd62d9207e120c49563da2ddbc6b |
|
BLAKE2b-256 | e2e9faffa2ecf27bb651de7c817bf89fda3a68ecd3a35bc8af29d583ecc1017c |