Skip to content

Commit d5f03a6

Browse files
committed
Add ARM64 architecture support
1 parent d5cfe4f commit d5f03a6

13 files changed

+232
-61
lines changed

README.md

+1-2
Original file line numberDiff line numberDiff line change
@@ -159,5 +159,4 @@ If you discover a potential security issue in this project we ask that you notif
159159

160160
## License
161161

162-
This project is licensed under the Apache-2.0 License.
163-
162+
This project is licensed under the Apache-2.0 License.

lib/aws_lambda_ric/version.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33
# frozen_string_literal: true
44

55
module AwsLambdaRuntimeInterfaceClient
6-
VERSION = '1.0.2'
6+
VERSION = '2.0.0'
77
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
version: 0.2
2+
3+
env:
4+
variables:
5+
OS_DISTRIBUTION: alpine
6+
EXECUTABLE: "/usr/local/bundle/bin/aws_lambda_ric"
7+
TEST_NAME: "aws-lambda-ruby-ric-alpine-test"
8+
batch:
9+
build-matrix:
10+
static:
11+
ignore-failure: false
12+
env:
13+
privileged-mode: true
14+
dynamic:
15+
env:
16+
variables:
17+
DISTRO_VERSION:
18+
- "3.12"
19+
RUNTIME_VERSION:
20+
- "2.5"
21+
- "2.6"
22+
- "2.7"
23+
- "3.0"
24+
phases:
25+
pre_build:
26+
commands:
27+
- export IMAGE_TAG="ruby-${OS_DISTRIBUTION}-${DISTRO_VERSION}:${RUNTIME_VERSION}"
28+
- echo "Extracting and including the Runtime Interface Emulator"
29+
- SCRATCH_DIR=".scratch"
30+
- mkdir "${SCRATCH_DIR}"
31+
- ARCHITECTURE=$(arch)
32+
- >
33+
if [[ "$ARCHITECTURE" == "x86_64" ]]; then
34+
RIE="aws-lambda-rie"
35+
elif [[ "$ARCHITECTURE" == "aarch64" ]]; then
36+
RIE="aws-lambda-rie-arm64"
37+
else
38+
echo "Architecture $ARCHITECTURE is not currently supported."
39+
exit 1
40+
fi
41+
- tar -xvf test/integration/resources/${RIE}.tar.gz --directory "${SCRATCH_DIR}"
42+
- >
43+
cp "test/integration/docker/Dockerfile.echo.${OS_DISTRIBUTION}" \
44+
"${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp"
45+
- >
46+
echo "RUN apk add curl" >> \
47+
"${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp"
48+
- >
49+
echo "COPY ${SCRATCH_DIR}/${RIE} /usr/bin/${RIE}" >> \
50+
"${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp"
51+
- >
52+
if [[ -z "${DOCKERHUB_USERNAME}" && -z "${DOCKERHUB_PASSWORD}" ]];
53+
then
54+
echo "DockerHub credentials not set as CodeBuild environment variables. Continuing without docker login."
55+
else
56+
echo "Performing DockerHub login . . ."
57+
docker login -u $DOCKERHUB_USERNAME -p $DOCKERHUB_PASSWORD
58+
fi
59+
- echo "Building image ${IMAGE_TAG}"
60+
- >
61+
docker build . \
62+
-f "${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp" \
63+
-t "${IMAGE_TAG}" \
64+
--build-arg RUNTIME_VERSION="${RUNTIME_VERSION}" \
65+
--build-arg DISTRO_VERSION="${DISTRO_VERSION}"
66+
build:
67+
commands:
68+
- set -x
69+
- echo "Running Image ${IMAGE_TAG}"
70+
- docker network create "${TEST_NAME}-network"
71+
- >
72+
docker run \
73+
--detach \
74+
--name "${TEST_NAME}-app" \
75+
--network "${TEST_NAME}-network" \
76+
--entrypoint="" \
77+
"${IMAGE_TAG}" \
78+
sh -c "/usr/bin/${RIE} "${EXECUTABLE}" "app.App::Handler.process""
79+
- sleep 2
80+
- >
81+
docker run \
82+
--name "${TEST_NAME}-tester" \
83+
--env "TARGET=${TEST_NAME}-app" \
84+
--network "${TEST_NAME}-network" \
85+
--entrypoint="" \
86+
"${IMAGE_TAG}" \
87+
sh -c 'curl -X POST "http://${TARGET}:8080/2015-03-31/functions/function/invocations" -d "{}" --max-time 10'
88+
- actual="$(docker logs --tail 1 "${TEST_NAME}-tester" | xargs)"
89+
- expected='success'
90+
- |
91+
echo "Response: ${actual}"
92+
if [[ "$actual" != "$expected" ]]; then
93+
echo "fail! runtime: $RUNTIME - expected output $expected - got $actual"
94+
exit -1
95+
fi
96+
finally:
97+
- |
98+
echo "---------Container Logs: ${TEST_NAME}-app----------"
99+
echo
100+
docker logs "${TEST_NAME}-app" || true
101+
echo
102+
echo "---------------------------------------------------"
103+
echo "--------Container Logs: ${TEST_NAME}-tester--------"
104+
echo
105+
docker logs "${TEST_NAME}-tester" || true
106+
echo
107+
echo "---------------------------------------------------"
108+
- echo "Cleaning up..."
109+
- docker stop "${TEST_NAME}-app" || true
110+
- docker rm --force "${TEST_NAME}-app" || true
111+
- docker stop "${TEST_NAME}-tester" || true
112+
- docker rm --force "${TEST_NAME}-tester" || true
113+
- docker network rm "${TEST_NAME}-network" || true

test/integration/codebuild/buildspec.os.alpine.yml renamed to test/integration/codebuild/buildspec.os.alpine.2.yml

+19-11
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,12 @@ batch:
1010
static:
1111
ignore-failure: false
1212
env:
13-
type: LINUX_CONTAINER
1413
privileged-mode: true
1514
dynamic:
1615
env:
1716
variables:
1817
DISTRO_VERSION:
1918
- "3.11"
20-
- "3.12"
2119
RUNTIME_VERSION:
2220
- "2.5"
2321
- "2.6"
@@ -29,15 +27,25 @@ phases:
2927
- echo "Extracting and including the Runtime Interface Emulator"
3028
- SCRATCH_DIR=".scratch"
3129
- mkdir "${SCRATCH_DIR}"
32-
- tar -xvf test/integration/resources/aws-lambda-rie.tar.gz --directory "${SCRATCH_DIR}"
30+
- ARCHITECTURE=$(arch)
31+
- >
32+
if [[ "$ARCHITECTURE" == "x86_64" ]]; then
33+
RIE="aws-lambda-rie"
34+
elif [[ "$ARCHITECTURE" == "aarch64" ]]; then
35+
RIE="aws-lambda-rie-arm64"
36+
else
37+
echo "Architecture $ARCHITECTURE is not currently supported."
38+
exit 1
39+
fi
40+
- tar -xvf test/integration/resources/${RIE}.tar.gz --directory "${SCRATCH_DIR}"
3341
- >
3442
cp "test/integration/docker/Dockerfile.echo.${OS_DISTRIBUTION}" \
3543
"${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp"
3644
- >
3745
echo "RUN apk add curl" >> \
3846
"${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp"
3947
- >
40-
echo "COPY ${SCRATCH_DIR}/aws-lambda-rie /usr/bin/aws-lambda-rie" >> \
48+
echo "COPY ${SCRATCH_DIR}/${RIE} /usr/bin/${RIE}" >> \
4149
"${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp"
4250
- >
4351
if [[ -z "${DOCKERHUB_USERNAME}" && -z "${DOCKERHUB_PASSWORD}" ]];
@@ -62,12 +70,11 @@ phases:
6270
- >
6371
docker run \
6472
--detach \
65-
--env "EXECUTABLE=${EXECUTABLE}" \
6673
--name "${TEST_NAME}-app" \
6774
--network "${TEST_NAME}-network" \
6875
--entrypoint="" \
6976
"${IMAGE_TAG}" \
70-
sh -c '/usr/bin/aws-lambda-rie "${EXECUTABLE}" "app.App::Handler.process"'
77+
sh -c "/usr/bin/${RIE} "${EXECUTABLE}" "app.App::Handler.process""
7178
- sleep 2
7279
- >
7380
docker run \
@@ -83,19 +90,20 @@ phases:
8390
echo "Response: ${actual}"
8491
if [[ "$actual" != "$expected" ]]; then
8592
echo "fail! runtime: $RUNTIME - expected output $expected - got $actual"
93+
exit -1
94+
fi
95+
finally:
96+
- |
8697
echo "---------Container Logs: ${TEST_NAME}-app----------"
8798
echo
88-
docker logs "${TEST_NAME}-app"
99+
docker logs "${TEST_NAME}-app" || true
89100
echo
90101
echo "---------------------------------------------------"
91102
echo "--------Container Logs: ${TEST_NAME}-tester--------"
92103
echo
93-
docker logs "${TEST_NAME}-tester"
104+
docker logs "${TEST_NAME}-tester" || true
94105
echo
95106
echo "---------------------------------------------------"
96-
exit -1
97-
fi
98-
finally:
99107
- echo "Cleaning up..."
100108
- docker stop "${TEST_NAME}-app" || true
101109
- docker rm --force "${TEST_NAME}-app" || true

test/integration/codebuild/buildspec.os.amazonlinux.yml

+20-10
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ batch:
1010
static:
1111
ignore-failure: false
1212
env:
13-
type: LINUX_CONTAINER
1413
privileged-mode: true
1514
dynamic:
1615
env:
@@ -21,19 +20,30 @@ batch:
2120
- "2.5"
2221
- "2.6"
2322
- "2.7"
23+
- "3.0"
2424
phases:
2525
pre_build:
2626
commands:
2727
- export IMAGE_TAG="ruby-${OS_DISTRIBUTION}-${DISTRO_VERSION}:${RUNTIME_VERSION}"
2828
- echo "Extracting and including the Runtime Interface Emulator"
2929
- SCRATCH_DIR=".scratch"
3030
- mkdir "${SCRATCH_DIR}"
31-
- tar -xvf test/integration/resources/aws-lambda-rie.tar.gz --directory "${SCRATCH_DIR}"
31+
- ARCHITECTURE=$(arch)
32+
- >
33+
if [[ "$ARCHITECTURE" == "x86_64" ]]; then
34+
RIE="aws-lambda-rie"
35+
elif [[ "$ARCHITECTURE" == "aarch64" ]]; then
36+
RIE="aws-lambda-rie-arm64"
37+
else
38+
echo "Architecture $ARCHITECTURE is not currently supported."
39+
exit 1
40+
fi
41+
- tar -xvf test/integration/resources/${RIE}.tar.gz --directory "${SCRATCH_DIR}"
3242
- >
3343
cp "test/integration/docker/Dockerfile.echo.${OS_DISTRIBUTION}" \
3444
"${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp"
3545
- >
36-
echo "COPY ${SCRATCH_DIR}/aws-lambda-rie /usr/bin/aws-lambda-rie" >> \
46+
echo "COPY ${SCRATCH_DIR}/${RIE} /usr/bin/${RIE}" >> \
3747
"${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp"
3848
- >
3949
if [[ -z "${DOCKERHUB_USERNAME}" && -z "${DOCKERHUB_PASSWORD}" ]];
@@ -58,12 +68,11 @@ phases:
5868
- >
5969
docker run \
6070
--detach \
61-
--env "EXECUTABLE=${EXECUTABLE}" \
6271
--name "${TEST_NAME}-app" \
6372
--network "${TEST_NAME}-network" \
6473
--entrypoint="" \
6574
"${IMAGE_TAG}" \
66-
sh -c '/usr/bin/aws-lambda-rie "${EXECUTABLE}" "app.App::Handler.process"'
75+
sh -c "/usr/bin/${RIE} "${EXECUTABLE}" "app.App::Handler.process""
6776
- sleep 2
6877
- >
6978
docker run \
@@ -79,19 +88,20 @@ phases:
7988
echo "Response: ${actual}"
8089
if [[ "$actual" != "$expected" ]]; then
8190
echo "fail! runtime: $RUNTIME - expected output $expected - got $actual"
91+
exit -1
92+
fi
93+
finally:
94+
- |
8295
echo "---------Container Logs: ${TEST_NAME}-app----------"
8396
echo
84-
docker logs "${TEST_NAME}-app"
97+
docker logs "${TEST_NAME}-app" || true
8598
echo
8699
echo "---------------------------------------------------"
87100
echo "--------Container Logs: ${TEST_NAME}-tester--------"
88101
echo
89-
docker logs "${TEST_NAME}-tester"
102+
docker logs "${TEST_NAME}-tester" || true
90103
echo
91104
echo "---------------------------------------------------"
92-
exit -1
93-
fi
94-
finally:
95105
- echo "Cleaning up..."
96106
- docker stop "${TEST_NAME}-app" || true
97107
- docker rm --force "${TEST_NAME}-app" || true

test/integration/codebuild/buildspec.os.centos.yml

+20-10
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ batch:
1010
static:
1111
ignore-failure: false
1212
env:
13-
type: LINUX_CONTAINER
1413
privileged-mode: true
1514
dynamic:
1615
env:
@@ -22,19 +21,30 @@ batch:
2221
- "2.7"
2322
- "2.6"
2423
- "2.5"
24+
- "3.0"
2525
phases:
2626
pre_build:
2727
commands:
2828
- export IMAGE_TAG="ruby-${OS_DISTRIBUTION}-${DISTRO_VERSION}:${RUNTIME_VERSION}"
2929
- echo "Extracting and including the Runtime Interface Emulator"
3030
- SCRATCH_DIR=".scratch"
3131
- mkdir "${SCRATCH_DIR}"
32-
- tar -xvf test/integration/resources/aws-lambda-rie.tar.gz --directory "${SCRATCH_DIR}"
32+
- ARCHITECTURE=$(arch)
33+
- >
34+
if [[ "$ARCHITECTURE" == "x86_64" ]]; then
35+
RIE="aws-lambda-rie"
36+
elif [[ "$ARCHITECTURE" == "aarch64" ]]; then
37+
RIE="aws-lambda-rie-arm64"
38+
else
39+
echo "Architecture $ARCHITECTURE is not currently supported."
40+
exit 1
41+
fi
42+
- tar -xvf test/integration/resources/${RIE}.tar.gz --directory "${SCRATCH_DIR}"
3343
- >
3444
cp "test/integration/docker/Dockerfile.echo.${OS_DISTRIBUTION}" \
3545
"${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp"
3646
- >
37-
echo "COPY ${SCRATCH_DIR}/aws-lambda-rie /usr/bin/aws-lambda-rie" >> \
47+
echo "COPY ${SCRATCH_DIR}/${RIE} /usr/bin/${RIE}" >> \
3848
"${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp"
3949
- >
4050
if [[ -z "${DOCKERHUB_USERNAME}" && -z "${DOCKERHUB_PASSWORD}" ]];
@@ -59,12 +69,11 @@ phases:
5969
- >
6070
docker run \
6171
--detach \
62-
--env "EXECUTABLE=${EXECUTABLE}" \
6372
--name "${TEST_NAME}-app" \
6473
--network "${TEST_NAME}-network" \
6574
--entrypoint="" \
6675
"${IMAGE_TAG}" \
67-
sh -c '/usr/bin/aws-lambda-rie "${EXECUTABLE}" "app.App::Handler.process"'
76+
sh -c "/usr/bin/${RIE} "${EXECUTABLE}" "app.App::Handler.process""
6877
- sleep 2
6978
- >
7079
docker run \
@@ -80,19 +89,20 @@ phases:
8089
echo "Response: ${actual}"
8190
if [[ "$actual" != "$expected" ]]; then
8291
echo "fail! runtime: $RUNTIME - expected output $expected - got $actual"
92+
exit -1
93+
fi
94+
finally:
95+
- |
8396
echo "---------Container Logs: ${TEST_NAME}-app----------"
8497
echo
85-
docker logs "${TEST_NAME}-app"
98+
docker logs "${TEST_NAME}-app" || true
8699
echo
87100
echo "---------------------------------------------------"
88101
echo "--------Container Logs: ${TEST_NAME}-tester--------"
89102
echo
90-
docker logs "${TEST_NAME}-tester"
103+
docker logs "${TEST_NAME}-tester" || true
91104
echo
92105
echo "---------------------------------------------------"
93-
exit -1
94-
fi
95-
finally:
96106
- echo "Cleaning up..."
97107
- docker stop "${TEST_NAME}-app" || true
98108
- docker rm --force "${TEST_NAME}-app" || true

0 commit comments

Comments
 (0)