Deploy FastAPI on AWS with GitHub Actions

⚡ FastAPI ☁️ Amazon Web Services ⚙️ GitHub Actions

Configuration Files

2 files
Production-ready configuration files with detailed comments and best practices. Each file works together as a complete deployment solution.
Multi-stage Docker build for FastAPI
dockerfile
FROM python:3.11-slim as builder

WORKDIR /app

# Install dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir --user -r requirements.txt

FROM python:3.11-slim

WORKDIR /app

# Copy dependencies from builder
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH

# Copy application
COPY . .

# Run as non-root user
RUN useradd -m appuser && chown -R appuser:appuser /app
USER appuser

EXPOSE 8000

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Python dependencies
text
fastapi==0.109.0
uvicorn[standard]==0.27.0
pydantic==2.5.3
python-multipart==0.0.6

Prerequisites

  • AWS account with ECS and ECR access
  • GitHub repository
  • Docker installed locally for testing
  • AWS CLI configured

Deployment Steps

  • Create ECR repository: aws ecr create-repository --repository-name fastapi-app
  • Create ECS cluster: aws ecs create-cluster --cluster-name production
  • Create task definition with your container configuration
  • Create ECS service: aws ecs create-service --cluster production --service-name fastapi-service
  • Add AWS credentials to GitHub Secrets (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
  • Push to main branch to trigger deployment

Additional Notes

  • FastAPI provides automatic API documentation at /docs
  • Use environment variables for configuration
  • Consider using AWS Application Load Balancer for HTTPS
  • Enable CloudWatch logs for monitoring