לדלג לתוכן

2.4 cicd תרגול

עליכם
* להקים תשתית בענן בצורה אוטומטית עם Terraform
* לפרוס את התוכנה שלכם על ענן (AWS)
* להפעיל CI/CD Pipeline שמבצע Build, Test ו-Deploy אוטומטית
* לעשות סקיילינג בסיסי באמצעות Auto Scaling ו-Load Balancer


שלב 1 – הכנת Terraform

  1. צרו תיקייה infra/ עם הקבצים הבאים:

  2. main.tf – הגדרת משאבים בענן

  3. variables.tf – משתנים (Region, instance_type, DB details)
  4. outputs.tf – פלטים שימושיים (Public IP, URL)

  5. הגדרת ספק AWS:

provider "aws" {
  region = var.aws_region
}
  1. יצירת EC2 instance בסיסי:
resource "aws_instance" "web_server" {
  ami           = "ami-0c02fb55956c7d316"
  instance_type = var.instance_type

  tags = {
    Name = "TRIP-FastAPI-Server"
  }
}
  1. אפשרות להוסיף S3 bucket לאחסון תמונות:
resource "aws_s3_bucket" "trip_bucket" {
  bucket = "trip-images-${random_id.bucket_id.hex}"
  acl    = "public-read"
}
  1. הגדרת Outputs:
output "ec2_public_ip" {
  value = aws_instance.web_server.public_ip
}
  1. הרצת Terraform:
terraform init
terraform plan
terraform apply

שלב 2 – קונפיגורציית Docker ל-FastAPI

  1. צרו Dockerfile בסיסי:
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
  1. ודאו שהאפליקציה רצה מקומית:
docker build -t trip-fastapi .
docker run -p 8000:8000 trip-fastapi

שלב 3 – CI/CD עם GitHub Actions

  1. צרו קובץ workflow .github/workflows/ci-cd.yml:
name: CI/CD Pipeline

on:
  push:
    branches:
      - main

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: 3.11

      - name: Install dependencies
        run: pip install -r requirements.txt

      - name: Run Tests
        run: pytest

      - name: Build Docker image
        run: docker build -t trip-fastapi .

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v2
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: us-east-1

      - name: Terraform Init & Apply
        working-directory: infra
        run: |
          terraform init
          terraform apply -auto-approve
  • בכל push ל-main:

  • הבדיקות רצות

  • Docker Image נבנה
  • Terraform יוצר או מעדכן את התשתית בענן

שלב 4 – בדיקות ושליפה

  • גשו ל-EC2 Public IP או ל-Load Balancer שהוגדר ב-Terraform
  • ודאו שה-FastAPI רץ ושיש גישה ל-endpoints
  • בדקו את הפייפליין ב-GitHub Actions

שלב 5 – משימות מאתגרות

  1. הוסיפו Auto Scaling Group עם Terraform:
  2. מספר מינימום ומקסימום של EC2
  3. הוסיפו S3 bucket לאחסון קבצים שהמשתמשים מעלים
  4. הוסיפו Secrets ל-GitHub כדי שה-CI/CD יתחבר ל-DynamoDB או RDS (מסד הנתונים שלכם)