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 Aug 20, 2023
1 parent 615e1cb commit 9c94d2e
Show file tree
Hide file tree
Showing 8 changed files with 32 additions and 3 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -137,3 +137,4 @@ lambdas
*.plan
*.tfstate.d
*.credentials.json
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 @@
".terraform",
"*.plan",
"*.tfstate.d",
"*.credentials.json"
"*.credentials.json",
"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
7 changes: 7 additions & 0 deletions packages/whook-example/bin/lambda_layer.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
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:14" /bin/sh -c "yum install -y gcc gcc-c++ make; npm i --production; sudo chown -R $USER /var/task; exit";
env --chdir "$PWD/layer" zip -r ../lambda_layer.zip .;
docker run --entrypoint "" -v "$PWD/layer/nodejs":/var/task "public.ecr.aws/lambda/nodejs:14" /bin/sh -c "rm -rf node_modules; exit";
rm -rf layer/nodejs;
2 changes: 1 addition & 1 deletion packages/whook-example/bin/lambdas_zip.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/bash
set -e -o pipefail -u

APP_ENV=${APP_ENV:-development}
APP_ENV=${APP_ENV:-local}
FILES=$(ls "builds/$APP_ENV")

rm -rf "lambdas/$APP_ENV"
Expand Down
3 changes: 2 additions & 1 deletion packages/whook-example/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@
".terraform",
"*.plan",
"*.tfstate.d",
"*.credentials.json"
"*.credentials.json",
"lambda_layer.zip"
],
"bundleFiles": [
"bin",
Expand Down
1 change: 1 addition & 0 deletions packages/whook-example/src/build.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { Knifecycle, constant, alsoInject } from 'knifecycle';
import { initBuildConstants } from '@whook/whook';
import { prepareEnvironment } from './index.js';
import { initBuildConstants } from '@whook/whook';
import { packageDirectory } from 'pkg-dir';
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 = ["nodejs14.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 9c94d2e

Please sign in to comment.