Skip to content

Commit 8ba9208

Browse files
authored
Update aws-lambda-runtime-libs and adjustments for newer JDK (#3)
1 parent c6f19bd commit 8ba9208

10 files changed

+70
-100
lines changed

Diff for: Dockerfile.baseline

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ ENV AWS_XRAY_CONTEXT_MISSING=LOG_ERROR
1313
ENTRYPOINT [ "/jdk/bin/java", \
1414
"-XX:-UsePerfData", \
1515
"-cp", "/function:/function/lib/*", \
16+
"--add-opens", "java.base/java.util=ALL-UNNAMED", \
1617
"com.amazonaws.services.lambda.runtime.api.client.AWSLambda" ]
1718

1819
# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)

Diff for: Dockerfile.checkpoint

+7-26
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,22 @@
1-
FROM ubuntu:18.04 as builder
2-
3-
RUN apt update && \
4-
DEBIAN_FRONTEND=noninteractive apt -y --no-install-recommends install liblz4-tool && \
5-
apt clean && \
6-
rm -rf /var/lib/apt /var/cache/apt
7-
8-
COPY jdk /jdk
9-
10-
RUN LIBJVM=/jdk/lib/server/libjvm.so; \
11-
lz4 -f -z -9 $LIBJVM $LIBJVM.lz4; \
12-
rm -f $LIBJVM; \
13-
ln -s /tmp/sub/$LIBJVM $LIBJVM
14-
15-
161
FROM ubuntu:18.04
172

18-
RUN apt update && \
19-
DEBIAN_FRONTEND=noninteractive apt -y --no-install-recommends install liblz4-tool && \
20-
apt clean && \
21-
rm -rf /var/lib/apt /var/cache/apt
22-
23-
COPY --from=builder /jdk /jdk
24-
COPY prepare-jdk.cmd.sh /
3+
COPY jdk /jdk
254

265
# Copy function code and runtime dependencies from Maven layout
276
COPY target/classes /function
287
COPY target/dependency/* /function/lib/
298

30-
RUN /prepare-jdk.cmd.sh ; \
31-
cd /function/lib; /jdk/bin/jar -x -f aws-lambda-java-runtime-interface-client*.jar \
32-
aws-lambda-runtime-interface-client.musl.so \
33-
aws-lambda-runtime-interface-client.glibc.so
9+
RUN cd /function/lib; /jdk/bin/jar -x -f aws-lambda-java-runtime-interface-client*.jar \
10+
jni/libaws-lambda-jni.linux_musl-x86_64.so \
11+
jni/libaws-lambda-jni.linux-x86_64.so \
12+
jni/libaws-lambda-jni.linux-aarch_64.so \
13+
jni/libaws-lambda-jni.linux_musl-aarch_64.so
3414

3515
WORKDIR /function
3616

3717
ENV AWS_XRAY_CONTEXT_MISSING=LOG_ERROR
3818

19+
COPY TryLoad.java /usr/local/lib/
3920
COPY checkpoint.cmd.sh /
4021
ENTRYPOINT [ "/bin/bash", "/checkpoint.cmd.sh" ]
4122

Diff for: Dockerfile.restore

+2-16
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,5 @@
1-
FROM ubuntu:18.04 as builder
2-
3-
RUN apt update && \
4-
DEBIAN_FRONTEND=noninteractive apt -y --no-install-recommends install liblz4-tool && \
5-
apt clean && \
6-
rm -rf /var/lib/apt /var/cache/apt
7-
8-
COPY cr /cr
9-
RUN tar -c /cr | lz4 -z -9 - /cr.tar.lz4
10-
111
FROM crac-lambda-checkpoint
122

13-
COPY --from=builder /cr.tar.lz4 /
14-
15-
ADD restore.cmd.sh /
16-
ENTRYPOINT [ "/bin/bash", "/restore.cmd.sh" ]
3+
COPY cr /cr
174

18-
# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
19-
CMD [ "example.Handler::handleRequest" ]
5+
ENTRYPOINT [ "/jdk/bin/java", "-XX:CRaCRestoreFrom=/cr" ]

Diff for: TryLoad.java

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
2+
public class TryLoad {
3+
public static void main(String... args) {
4+
for (String path : args) {
5+
System.err.printf("Trying %s ... ", path);
6+
try {
7+
System.load(path);
8+
System.err.println("OK");
9+
System.out.println(path);
10+
break;
11+
} catch (UnsatisfiedLinkError ignore) {
12+
System.err.println("FAIL");
13+
}
14+
}
15+
}
16+
}

Diff for: checkpoint.cmd.sh

+10-6
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
#!/bin/bash
22

3-
/prepare-jdk.cmd.sh
3+
detect_native_client() {
4+
/jdk/bin/java -cp /function:/function/lib/* /usr/local/lib/TryLoad.java $@
5+
}
6+
7+
export AWS_NATIVE_CLIENT=$(detect_native_client /function/lib/jni/libaws-lambda-jni.*.so)
8+
export CRAC_CRIU_OPTS="--compress"
49

510
# Ensure small PID, for privileged-less criu to be able to restore PID by bumping.
611
# But not too small, to avoid clashes with other occasional processes on restore.
7-
exec /aws-lambda-rie /bin/bash -c '\
8-
while [ 128 -ge $(cat /proc/sys/kernel/ns_last_pid) ]; do :; done; \
9-
setsid /jdk/bin/java \
12+
exec /aws-lambda-rie /jdk/bin/java \
1013
-Xshare:off \
1114
-XX:-UsePerfData \
15+
-XX:CRaCMinPid=128 \
1216
-XX:CRaCCheckpointTo=/cr \
1317
-cp /function:/function/lib/* \
14-
-Dcom.amazonaws.services.lambda.runtime.api.client.NativeClient.libsBase=/function/lib/ \
18+
-Dcom.amazonaws.services.lambda.runtime.api.client.runtimeapi.NativeClient.JNI=$AWS_NATIVE_CLIENT \
1519
--add-opens java.base/java.util=ALL-UNNAMED \
16-
com.amazonaws.services.lambda.runtime.api.client.AWSLambda $0' "$@"
20+
com.amazonaws.services.lambda.runtime.api.client.AWSLambda "$@"

Diff for: crac-steps.sh

+16-9
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ iolim() { IOLIM=$1; }
1414
dojlink() {
1515
local JDK=$1
1616
rm -rf jdk
17-
$JDK/bin/jlink --bind-services --output jdk --module-path $JDK/jmods --add-modules java.base,jdk.unsupported,java.sql
17+
MODS=java.base,jdk.unsupported,java.sql
18+
[ -f $JDK/jmods/jdk.crac.jmod ] && MODS+=",jdk.crac"
19+
$JDK/bin/jlink --bind-services --output jdk --module-path $JDK/jmods --add-modules $MODS
1820
# XXX
1921
cp $JDK/lib/criu jdk/lib/
2022
}
@@ -40,9 +42,11 @@ s01_build() {
4042

4143
s02_start_checkpoint() {
4244
docker run \
45+
--ulimit nofile=1024 \
4346
--privileged \
4447
--rm \
4548
--name crac-checkpoint \
49+
-m 512m \
4650
-v $PWD/aws-lambda-rie:/aws-lambda-rie \
4751
-v $PWD/cr:/cr \
4852
-p 8080:8080 \
@@ -97,11 +101,11 @@ local_test() {
97101
s05_local_restore() {
98102
local_test \
99103
crac-lambda-restore \
100-
/aws-lambda-rie /bin/bash /restore.cmd.sh
104+
/aws-lambda-rie /jdk/bin/java -XX:CRaCRestoreFrom=/cr
101105
}
102106

103107
local_baseline() {
104-
local_test crac-lambda-checkpoint \
108+
local_test ${1:-crac-lambda-checkpoint} \
105109
/aws-lambda-rie /jdk/bin/java \
106110
-XX:-UsePerfData \
107111
-cp /function:/function/lib/* \
@@ -116,7 +120,7 @@ ltest() {
116120
-v /home:/home \
117121
-v $PWD/logdir:/tmp/log \
118122
crac-lambda-restore \
119-
/bin/bash $PWD/restore.cmd.sh
123+
$PWD/jdk/bin/java -XX:CRaCRestoreFrom=$PWD/cr
120124
}
121125

122126
s06_init_aws() {
@@ -132,7 +136,7 @@ s06_init_aws() {
132136
}
133137

134138
s07_deploy_aws() {
135-
docker tag crac-lambda-restore $REMOTEIMG
139+
docker tag ${1:-crac-lambda-restore} $REMOTEIMG
136140
docker push $REMOTEIMG
137141

138142
local digest=$(docker inspect -f '{{ index .RepoDigests 0 }}' $REMOTEIMG)
@@ -156,10 +160,9 @@ s08_invoke_aws() {
156160
}
157161

158162
make_cold_aws() {
159-
local mem=$(aws lambda get-function-configuration --function-name $LAMBDA_NAME | jq -r '.MemorySize')
160-
local min=256
161-
local max=512
162-
aws lambda update-function-configuration --function-name $LAMBDA_NAME --memory-size $(($min + (($mem + 1) % ($max - $min))))
163+
aws lambda update-function-configuration --function-name $LAMBDA_NAME --memory-size 511
164+
aws lambda wait function-updated --function-name $LAMBDA_NAME
165+
aws lambda update-function-configuration --function-name $LAMBDA_NAME --memory-size 512
163166
aws lambda wait function-updated --function-name $LAMBDA_NAME
164167
}
165168

@@ -169,4 +172,8 @@ steps() {
169172
done
170173
}
171174

175+
okify() {
176+
"$@" || true
177+
}
178+
172179
"$@"

Diff for: pom.xml

+18-6
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,18 @@
1010
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1111
<maven.compiler.source>1.8</maven.compiler.source>
1212
<maven.compiler.target>1.8</maven.compiler.target>
13+
<slf4j.version>1.7.36</slf4j.version>
1314
</properties>
1415
<dependencies>
1516
<dependency>
16-
<groupId>io.github.crac.com.amazonaws</groupId>
17-
<artifactId>aws-lambda-java-runtime-interface-client</artifactId>
18-
<version>1.0.0</version>
17+
<groupId>com.amazonaws.serverless</groupId>
18+
<artifactId>aws-serverless-java-container-springboot2</artifactId>
19+
<version>1.8</version>
1920
</dependency>
2021
<dependency>
21-
<groupId>com.amazonaws</groupId>
22-
<artifactId>aws-lambda-java-core</artifactId>
23-
<version>1.2.1</version>
22+
<groupId>io.github.crac.com.amazonaws</groupId>
23+
<artifactId>aws-lambda-java-runtime-interface-client</artifactId>
24+
<version>2.4.1.CRAC.0</version>
2425
</dependency>
2526
<dependency>
2627
<groupId>com.amazonaws</groupId>
@@ -52,6 +53,17 @@
5253
<artifactId>log4j-slf4j18-impl</artifactId>
5354
<version>[2.17.1,)</version>
5455
</dependency>
56+
<dependency>
57+
<groupId>org.slf4j</groupId>
58+
<artifactId>slf4j-api</artifactId>
59+
<version>${slf4j.version}</version>
60+
</dependency>
61+
<dependency>
62+
<groupId>org.slf4j</groupId>
63+
<artifactId>slf4j-simple</artifactId>
64+
<version>${slf4j.version}</version>
65+
</dependency>
66+
5567
<dependency>
5668
<groupId>software.amazon.awssdk</groupId>
5769
<artifactId>lambda</artifactId>

Diff for: prepare-jdk.cmd.sh

-10
This file was deleted.

Diff for: restore.cmd.sh

-7
This file was deleted.

Diff for: seccomp.json

-20
Original file line numberDiff line numberDiff line change
@@ -1277,26 +1277,6 @@
12771277
"action": "SCMP_ACT_ALLOW",
12781278
"args": []
12791279
},
1280-
{
1281-
"name": "shmat",
1282-
"action": "SCMP_ACT_ALLOW",
1283-
"args": []
1284-
},
1285-
{
1286-
"name": "shmctl",
1287-
"action": "SCMP_ACT_ALLOW",
1288-
"args": []
1289-
},
1290-
{
1291-
"name": "shmdt",
1292-
"action": "SCMP_ACT_ALLOW",
1293-
"args": []
1294-
},
1295-
{
1296-
"name": "shmget",
1297-
"action": "SCMP_ACT_ALLOW",
1298-
"args": []
1299-
},
13001280
{
13011281
"name": "shutdown",
13021282
"action": "SCMP_ACT_ALLOW",

0 commit comments

Comments
 (0)