Skip to content

Commit e1e3d74

Browse files
committed
0.3.0
1 parent 6c00f0e commit e1e3d74

File tree

9 files changed

+677
-0
lines changed

9 files changed

+677
-0
lines changed

README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,16 @@
11
# awslambda
22
Download from AWS Lambda runtime environment.
3+
4+
Current version: 0.3.0
5+
6+
Lambda run this module like this:
7+
8+
```console
9+
/var/lang/bin/node /var/runtime/node_modules/awslambda/index.js --expose-gc --max-executable-size=13 --max-semi-space-size=6 --max-old-space-size=102
10+
```
11+
12+
The entry `index.js` run your function similar this:
13+
14+
```js
15+
require('/var/task/handler')['function'](event, context, callback)
16+
```

binding.gyp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
'targets': [
3+
{
4+
'target_name': 'awslambda',
5+
'sources': [
6+
'src/awslambda.cc'
7+
],
8+
'include_dirs': [
9+
'$(BP_LIBFARM)/include'
10+
],
11+
'link_settings': {
12+
'ldflags' : [
13+
'-L$(BP_LIBFARM)/lib',
14+
'$(BP_LINKLIBS)'
15+
]
16+
}
17+
}
18+
]
19+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
cmd_Release/awslambda.node := rm -rf "Release/awslambda.node" && cp -af "Release/obj.target/awslambda.node" "Release/awslambda.node"
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
cmd_Release/obj.target/awslambda.node := g++ -shared -pthread -rdynamic -m64 -L/local/p4clients/pkgbuild-vb5_8/workspace/build/LambdaSandboxNodeJs/LambdaSandboxNodeJs-1.0.106.0/AL2012/DEV.STD.PTHREAD/build/private/tmp/brazil-path/lib.libfarm/lib -llambdaio -llambdaruntime -llambdaipc -llambdalog -Wl,-soname=awslambda.node -o Release/obj.target/awslambda.node -Wl,--start-group Release/obj.target/awslambda/src/awslambda.o -Wl,--end-group
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
cmd_Release/obj.target/awslambda/src/awslambda.o := g++ '-DNODE_GYP_MODULE_NAME=awslambda' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/include/node -I/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/src -I/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/deps/uv/include -I/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/deps/v8/include -I/local/p4clients/pkgbuild-vb5_8/workspace/build/LambdaSandboxNodeJs/LambdaSandboxNodeJs-1.0.106.0/AL2012/DEV.STD.PTHREAD/build/private/tmp/brazil-path/lib.libfarm/include -fPIC -pthread -Wall -Wextra -Wno-unused-parameter -m64 -O3 -fno-omit-frame-pointer -fno-rtti -fno-exceptions -std=gnu++0x -MMD -MF ./Release/.deps/Release/obj.target/awslambda/src/awslambda.o.d.raw -c -o Release/obj.target/awslambda/src/awslambda.o ../src/awslambda.cc
2+
Release/obj.target/awslambda/src/awslambda.o: ../src/awslambda.cc \
3+
/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/src/node.h \
4+
/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/deps/v8/include/v8.h \
5+
/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/deps/v8/include/v8-version.h \
6+
/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/deps/v8/include/v8config.h \
7+
/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/src/node_version.h \
8+
/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/deps/uv/include/uv.h \
9+
/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/deps/uv/include/uv-errno.h \
10+
/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/deps/uv/include/uv-version.h \
11+
/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/deps/uv/include/uv-unix.h \
12+
/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/deps/uv/include/uv-threadpool.h \
13+
/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/deps/uv/include/uv-linux.h \
14+
/local/p4clients/pkgbuild-vb5_8/workspace/build/LambdaSandboxNodeJs/LambdaSandboxNodeJs-1.0.106.0/AL2012/DEV.STD.PTHREAD/build/private/tmp/brazil-path/lib.libfarm/include/lambda/atomic.h \
15+
/local/p4clients/pkgbuild-vb5_8/workspace/build/LambdaSandboxNodeJs/LambdaSandboxNodeJs-1.0.106.0/AL2012/DEV.STD.PTHREAD/build/private/tmp/brazil-path/lib.libfarm/include/lambda/io.h \
16+
/local/p4clients/pkgbuild-vb5_8/workspace/build/LambdaSandboxNodeJs/LambdaSandboxNodeJs-1.0.106.0/AL2012/DEV.STD.PTHREAD/build/private/tmp/brazil-path/lib.libfarm/include/lambda/runtime.h
17+
../src/awslambda.cc:
18+
/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/src/node.h:
19+
/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/deps/v8/include/v8.h:
20+
/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/deps/v8/include/v8-version.h:
21+
/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/deps/v8/include/v8config.h:
22+
/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/src/node_version.h:
23+
/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/deps/uv/include/uv.h:
24+
/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/deps/uv/include/uv-errno.h:
25+
/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/deps/uv/include/uv-version.h:
26+
/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/deps/uv/include/uv-unix.h:
27+
/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/deps/uv/include/uv-threadpool.h:
28+
/opt/brazil-pkg-cache/packages/LambdaLangNodeJs-6-10/LambdaLangNodeJs-6-10-x.33.0/AL2012/generic-flavor/src/third-party-src/deps/uv/include/uv-linux.h:
29+
/local/p4clients/pkgbuild-vb5_8/workspace/build/LambdaSandboxNodeJs/LambdaSandboxNodeJs-1.0.106.0/AL2012/DEV.STD.PTHREAD/build/private/tmp/brazil-path/lib.libfarm/include/lambda/atomic.h:
30+
/local/p4clients/pkgbuild-vb5_8/workspace/build/LambdaSandboxNodeJs/LambdaSandboxNodeJs-1.0.106.0/AL2012/DEV.STD.PTHREAD/build/private/tmp/brazil-path/lib.libfarm/include/lambda/io.h:
31+
/local/p4clients/pkgbuild-vb5_8/workspace/build/LambdaSandboxNodeJs/LambdaSandboxNodeJs-1.0.106.0/AL2012/DEV.STD.PTHREAD/build/private/tmp/brazil-path/lib.libfarm/include/lambda/runtime.h:

build/Release/awslambda.node

31.3 KB
Binary file not shown.

entry/aws-lambda-node.c

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
#include <inttypes.h>
2+
#include <limits.h>
3+
#include <math.h>
4+
#include <stdint.h>
5+
#include <stdio.h>
6+
#include <stdlib.h>
7+
#include <string.h>
8+
9+
#define MIN(a, b) (a < b ? a : b)
10+
#define EXE_LIMIT_MB (160)
11+
12+
int main(int argc, char* argv[])
13+
{
14+
// set default node path if one isn't set
15+
if (getenv("NODE_PATH") == NULL) {
16+
setenv("NODE_PATH", "/var/runtime:/var/task:/var/runtime/node_modules", 1);
17+
}
18+
19+
// to enable use by internal test harnesses
20+
char interpreter_path[PATH_MAX] = "/var/lang/bin/node";
21+
char* interpreter_override = getenv("_NODE");
22+
if (interpreter_override) {
23+
snprintf(interpreter_path, sizeof(interpreter_path), "%s", interpreter_override);
24+
}
25+
26+
char* exe_path = strdup(argv[0]);
27+
char script_path[PATH_MAX] = {0};
28+
snprintf(script_path, sizeof(script_path), "%s/node_modules/awslambda/index.js", dirname(exe_path));
29+
free(exe_path);
30+
31+
char* memory_limit_mb_str = getenv("AWS_LAMBDA_FUNCTION_MEMORY_SIZE");
32+
if (memory_limit_mb_str == NULL) {
33+
exit(execvp(
34+
interpreter_path,
35+
(char* []){
36+
interpreter_path, "--expose-gc", script_path, NULL,
37+
}));
38+
}
39+
uint64_t memory_limit_mb = atoi(memory_limit_mb_str);
40+
41+
// Cap exec_size to RUNTIME_EXEC_SPACE_SIZE_CAP_MB
42+
uint64_t max_executable_size = MIN((uint64_t)round(((double)memory_limit_mb) * .1), EXE_LIMIT_MB);
43+
char max_executable_size_arg[NAME_MAX] = {0};
44+
snprintf(
45+
max_executable_size_arg,
46+
sizeof(max_executable_size_arg),
47+
"--max-executable-size=%" PRIu64,
48+
max_executable_size);
49+
50+
// Set max-new-space to 10% of sandbox's ram limit.
51+
uint64_t max_new_space_size = (uint64_t)round(((double)memory_limit_mb) * .1);
52+
uint64_t max_semi_space_size = max_new_space_size / 2;
53+
char max_semi_space_size_arg[NAME_MAX] = {0};
54+
snprintf(
55+
max_semi_space_size_arg,
56+
sizeof(max_semi_space_size_arg),
57+
"--max-semi-space-size=%" PRIu64,
58+
max_semi_space_size);
59+
60+
uint64_t max_old_space_size = memory_limit_mb - max_new_space_size - max_executable_size;
61+
char max_old_space_size_arg[NAME_MAX] = {0};
62+
snprintf(
63+
max_old_space_size_arg, sizeof(max_old_space_size_arg), "--max-old-space-size=%" PRIu64, max_old_space_size);
64+
65+
exit(execvp(
66+
interpreter_path,
67+
(char* []){
68+
interpreter_path,
69+
"--expose-gc",
70+
max_executable_size_arg,
71+
max_semi_space_size_arg,
72+
max_old_space_size_arg,
73+
script_path,
74+
NULL,
75+
}));
76+
}

0 commit comments

Comments
 (0)