38 lines
1.3 KiB
Text
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
|