#!/bin/bash # Set up constants IMAGE_NAME="fastapi-lambda-image" TAG="test" PORT="8000" RIE_DIR="$HOME/.aws-lambda-rie" DOCKER_ENTRYPOINT="$RIE_PATH/aws-lambda-rie" DOCKER_CMD="/usr/local/bin/python -m awslambdaric backend.app.main.handler" ENV_FILE_PATH="backend/.env" AWS_CREDENTIALS_PATH="$HOME/.aws/credentials" # Step 1: Download the AWS Lambda Runtime Interface Emulator if it doesn't exist if [ ! -f "$RIE_PATH/aws-lambda-rie" ]; then echo "Downloading AWS Lambda Runtime Interface Emulator..." mkdir -p $RIE_PATH curl -Lo $RIE_PATH/aws-lambda-rie https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64 chmod +x $RIE_PATH/aws-lambda-rie fi # Step 2: Build the Docker image echo "Building Docker image..." docker build -t $IMAGE_NAME:$TAG -f backend/docker/lambda.Dockerfile . # Step 3: Run the Docker image with the emulator, .env file, and AWS credentials echo "Starting the Docker container..." CONTAINER_ID=$(docker run -d \ --env-file $ENV_FILE_PATH \ -v $AWS_CREDENTIALS_PATH:/root/.aws/credentials \ -v "$RIE_DIR:/aws-lambda" \ -p $PORT:8080 \ --entrypoint "/aws-lambda/aws-lambda-rie" \ $IMAGE_NAME:$TAG $DOCKER_CMD) # Output information echo "Docker container is running. Use the following command to send a request:" echo "curl \"http://localhost:$PORT/2015-03-31/functions/function/invocations\" -d '{}'" # Optional: If you want the script to stop the Docker container after you press a key, you can uncomment the next lines. # echo "Press any key to stop the Docker container..." # read -n 1 -s -r # docker kill $CONTAINER_ID