writeonce/reference/writeonce-api/DockerfileLambda
2026-04-05 00:45:02 +02:00

38 lines
1.3 KiB
Text

# Stage 1: Build the Rust application using the official Rust image
FROM rust:bullseye AS builder
# Install required dependencies for cargo-lambda and Zig (if needed)
RUN apt-get update && apt-get install -y \
curl \
build-essential \
gcc \
libc-dev \
pkg-config \
libssl-dev \
gcc-aarch64-linux-gnu \
&& rm -rf /var/lib/apt/lists/*
# Install Zig (only if needed for cross-compiling or complex setups)
RUN curl -sSf https://ziglang.org/builds/zig-linux-x86_64-0.15.0-dev.377+f01833e03.tar.xz | tar -xJf - -C /usr/local/bin --strip-components=1
RUN rustup target add aarch64-unknown-linux-gnu
# Install cargo-lambda via cargo for building AWS Lambda-compatible binaries
RUN cargo install cargo-lambda
# Create a working directory for the project
WORKDIR /app
# Copy the entire Rust project into the container
COPY . .
# Build the Rust application with cargo-lambda, targeting Lambda-compatible format
RUN cargo lambda build --release --bin lambda-post-article --arm64
# Copy the Lambda-compatible binary from the build stage into the Lambda runtime directory
RUN cd target/lambda/lambda-post-article && zip function.zip bootstrap
# Stage 2: Extract just the zip artifact
FROM alpine:latest AS artifact
# Copy only the zip file out of the builder
COPY --from=builder /app/target/lambda/lambda-post-article/function.zip /function.zip