Skip to content

Commit 4c28d43

Browse files
committed
chore: to be reviewed
1 parent 048c1e8 commit 4c28d43

4 files changed

Lines changed: 74 additions & 5 deletions

File tree

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,6 @@ __pycache__/
4949
# Misc
5050
lambda-runtime/libtest.rmeta
5151
lambda-integration-tests/target/
52+
53+
# Pre-built RIE binary (built by test-rie.sh)
54+
aws-lambda-rie

Dockerfile.rie

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ RUN dnf install -y gcc
44
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
55
ENV PATH="/root/.cargo/bin:${PATH}"
66

7-
ADD https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie /usr/local/bin/aws-lambda-rie
7+
# TODO: Replace COPY with ADD from release URL once a RIE release includes
8+
# lambda-runtime-invocation-id support (likely v1.36+):
9+
# ADD https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/download/v1.XX/aws-lambda-rie /usr/local/bin/aws-lambda-rie
10+
COPY aws-lambda-rie /usr/local/bin/aws-lambda-rie
811
RUN chmod +x /usr/local/bin/aws-lambda-rie
912

1013
ARG EXAMPLE=basic-lambda
@@ -22,4 +25,4 @@ RUN cargo build --release
2225
RUN cp target/release/${EXAMPLE} ${LAMBDA_RUNTIME_DIR}/bootstrap
2326

2427
ENTRYPOINT []
25-
CMD [ "/usr/local/bin/aws-lambda-rie", "/var/runtime/bootstrap" ]
28+
CMD [ "/usr/local/bin/aws-lambda-rie", "/var/runtime/bootstrap" ]

scripts/test-rie.sh

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,50 @@
11
#!/bin/bash
22
set -euo pipefail
33

4+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5+
6+
# Detect container runtime: prefer finch, fall back to docker if it works
7+
if command -v finch &>/dev/null && finch vm status &>/dev/null; then
8+
CONTAINER_CMD=finch
9+
elif command -v docker &>/dev/null && docker info &>/dev/null 2>&1; then
10+
CONTAINER_CMD=docker
11+
else
12+
echo "Error: no working container runtime found (tried finch, docker)" >&2
13+
exit 1
14+
fi
15+
echo "Using container runtime: $CONTAINER_CMD"
16+
417
EXAMPLE=${1:-basic-lambda}
518
# Optional: set RIE_MAX_CONCURRENCY to enable LMI mode (emulates AWS_LAMBDA_MAX_CONCURRENCY)
619
RIE_MAX_CONCURRENCY=${RIE_MAX_CONCURRENCY:-}
720

21+
echo "Building RIE from source (invocation-id support)..."
22+
if [ ! -f /tmp/aws-lambda-rie ]; then
23+
# Build natively on host to avoid container DNS issues with VPN
24+
if ! command -v go &>/dev/null; then
25+
echo "Error: Go is required to build RIE. Install with: brew install go" >&2
26+
exit 1
27+
fi
28+
RIE_BUILD_DIR=$(mktemp -d)
29+
git clone --depth 50 https://github.com/aws/aws-lambda-runtime-interface-emulator.git "$RIE_BUILD_DIR/rie"
30+
cd "$RIE_BUILD_DIR/rie"
31+
git checkout ddf2bc4f4c95a1c7fdb15633a80e65b9be8ffe46
32+
# Cross-compile for Linux/amd64 (runs inside container)
33+
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o /tmp/aws-lambda-rie ./cmd/aws-lambda-rie
34+
cd "$SCRIPT_DIR/.."
35+
rm -rf "$RIE_BUILD_DIR"
36+
fi
37+
cp /tmp/aws-lambda-rie "$SCRIPT_DIR/../aws-lambda-rie"
38+
839
echo "Building Docker image with RIE for example: $EXAMPLE..."
9-
docker build -f Dockerfile.rie --build-arg EXAMPLE=$EXAMPLE -t rust-lambda-rie-test .
40+
$CONTAINER_CMD build --dns 8.8.8.8 -f Dockerfile.rie --build-arg EXAMPLE=$EXAMPLE -t rust-lambda-rie-test .
1041

1142
echo "Starting RIE container on port 9000..."
1243
if [ -n "$RIE_MAX_CONCURRENCY" ]; then
1344
echo "Enabling LMI mode with AWS_LAMBDA_MAX_CONCURRENCY=$RIE_MAX_CONCURRENCY"
14-
docker run -p 9000:8080 -e AWS_LAMBDA_MAX_CONCURRENCY="$RIE_MAX_CONCURRENCY" rust-lambda-rie-test &
45+
$CONTAINER_CMD run -p 9000:8080 -e AWS_LAMBDA_MAX_CONCURRENCY="$RIE_MAX_CONCURRENCY" rust-lambda-rie-test &
1546
else
16-
docker run -p 9000:8080 rust-lambda-rie-test &
47+
$CONTAINER_CMD run -p 9000:8080 rust-lambda-rie-test &
1748
fi
1849
CONTAINER_PID=$!
1950

test/dockerized/scenarios/concurrent_scenarios.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
HANDLER = "basic-lambda-concurrent"
1212
IMAGE = os.environ.get("TEST_IMAGE", "local/test-base")
1313
DEFAULT_CONCURRENCY = 10
14+
TIMEOUT = 5
1415

1516

1617
def _make_env(concurrency: int = DEFAULT_CONCURRENCY) -> dict:
@@ -21,6 +22,12 @@ def _make_env(concurrency: int = DEFAULT_CONCURRENCY) -> dict:
2122
}
2223

2324

25+
def _invocation_id_env(concurrency: int = DEFAULT_CONCURRENCY, timeout: int = TIMEOUT) -> dict:
26+
return _make_env | {
27+
"AWS_LAMBDA_FUNCTION_TIMEOUT": str(timeout),
28+
}
29+
30+
2431
def get_concurrent_scenarios():
2532
scenarios = []
2633

@@ -62,3 +69,28 @@ def get_concurrent_scenarios():
6269
))
6370

6471
return scenarios
72+
73+
74+
def invoation_id_scenarios():
75+
batches = [
76+
[Request.create(
77+
payload={"name": "invoke-A", "sleep": TIMEOUT + 2},
78+
assertions=[{"transform": ".errorType", "error": "Sandbox.Timedout"}],
79+
headers={"X-Amzn-RequestId": SAME_REQUEST_ID},
80+
)],
81+
[Request.create(
82+
payload={"name": "invoke-B", "sleep": TIMEOUT - 1},
83+
assertions={"response": {"from": "invoke-B"}},
84+
headers={"X-Amzn-RequestId": SAME_REQUEST_ID},
85+
)],
86+
]
87+
88+
89+
return [ConcurrentTest(
90+
name="invocation_id",
91+
handler="invocation-id-concurrent",
92+
environment_variables=_invocation_id_env(timeout=1),
93+
request_batches=batches,
94+
image=IMAGE,
95+
)]
96+

0 commit comments

Comments
 (0)