Skip to content

Commit

Permalink
feat(lambda): add a layer for lambdas
Browse files Browse the repository at this point in the history
  • Loading branch information
nfroidure committed Feb 29, 2024
1 parent 91993a5 commit ec4ba40
Show file tree
Hide file tree
Showing 8 changed files with 39 additions and 64 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -137,3 +137,4 @@ builds
*.tfstate.d
*.credentials.json
.nx/cache
lambda_layer.zip
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
"*.plan",
"*.tfstate.d",
"*.credentials.json",
".nx/cache"
".nx/cache",
"lambda_layer.zip"
],
"rootPackage": true
}
Expand Down
6 changes: 6 additions & 0 deletions packages/whook-example/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,12 @@ Create a new workspace for each `APP_ENV`:
../.bin/terraform workspace new staging
```

Build the lambdas layer:

```sh
NODE_ENV=production bin/lambda_layer.sh
```

Plan the deployment:

```sh
Expand Down
14 changes: 14 additions & 0 deletions packages/whook-example/bin/lambda_layer.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
mkdir -p layer/nodejs;
cp package.json layer/nodejs/package.json;
cp package-lock.json layer/nodejs/package-lock.json;
docker run --entrypoint "" -v "$PWD/layer/nodejs":/var/task "public.ecr.aws/lambda/nodejs:20" /bin/sh -c "
dnf update;
dnf install -y gcc gcc-c++ make;
mkdir .npm;
HOME=$(pwd);
npm i --production;
rm -rf .npm;
exit";
env --chdir "$PWD/layer" zip -r ../lambda_layer.zip .;
docker run --entrypoint "" -v "$PWD/layer/nodejs":/var/task "public.ecr.aws/lambda/nodejs:20" /bin/sh -c "rm -rf node_modules; exit";
rm -rf layer/nodejs;
3 changes: 2 additions & 1 deletion packages/whook-example/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@
".terraform",
"*.plan",
"*.tfstate.d",
"*.credentials.json"
"*.credentials.json",
"lambda_layer.zip"
],
"bundleFiles": [
"bin",
Expand Down
61 changes: 0 additions & 61 deletions packages/whook-example/src/__snapshots__/cli.test.ts.snap

This file was deleted.

3 changes: 2 additions & 1 deletion packages/whook-example/src/cli.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@ describe('commands should work', () => {
",
"stdout": "
# Provided by "@whook/example": 1 commands
# Provided by "@whook/example": 2 commands
- printEnv: A command printing every env values
- terraformValues: A command printing lambdas informations for Terraform
# Provided by "@whook/whook": 8 commands
Expand Down
12 changes: 12 additions & 0 deletions packages/whook-example/terraform/lambdas.tf
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,17 @@ data "external" "envvars" {
working_dir = ".."
}

resource "aws_lambda_layer_version" "lambda_layer" {
filename = "../lambda_layer.zip"
layer_name = "api-lambda-layer"
description = "A layer with all lambdas node modules"
source_code_hash = filebase64sha256("../lambda_layer.zip")
# You may replace the above by the following to avoid pushing
# a new layer when the package lock did not change
# source_code_hash = filebase64sha256("../package-lock.json")
compatible_runtimes = ["nodejs20.x"]
}

data "archive_file" "lambdas" {
for_each = data.external.lambdas.result
type = "zip"
Expand All @@ -88,6 +99,7 @@ resource "aws_lambda_function" "lambda_function" {
source_code_hash = data.archive_file.lambdas[each.key].output_base64sha256
memory_size = split("|", each.value)[3]
timeout = split("|", each.value)[2]
layers = [aws_lambda_layer_version.lambda_layer.arn]
environment {
variables = zipmap(
keys(data.external.envvars.result),
Expand Down

0 comments on commit ec4ba40

Please sign in to comment.