2.4 cicd תרגול
עליכם
* להקים תשתית בענן בצורה אוטומטית עם Terraform
* לפרוס את התוכנה שלכם על ענן (AWS)
* להפעיל CI/CD Pipeline שמבצע Build, Test ו-Deploy אוטומטית
* לעשות סקיילינג בסיסי באמצעות Auto Scaling ו-Load Balancer
שלב 1 – הכנת Terraform¶
-
צרו תיקייה
infra/עם הקבצים הבאים: -
main.tf– הגדרת משאבים בענן variables.tf– משתנים (Region, instance_type, DB details)-
outputs.tf– פלטים שימושיים (Public IP, URL) -
הגדרת ספק AWS:
- יצירת EC2 instance בסיסי:
resource "aws_instance" "web_server" {
ami = "ami-0c02fb55956c7d316"
instance_type = var.instance_type
tags = {
Name = "TRIP-FastAPI-Server"
}
}
- אפשרות להוסיף S3 bucket לאחסון תמונות:
resource "aws_s3_bucket" "trip_bucket" {
bucket = "trip-images-${random_id.bucket_id.hex}"
acl = "public-read"
}
- הגדרת Outputs:
- הרצת Terraform:
שלב 2 – קונפיגורציית Docker ל-FastAPI¶
- צרו
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"]
- ודאו שהאפליקציה רצה מקומית:
שלב 3 – CI/CD עם GitHub Actions¶
- צרו קובץ 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 – משימות מאתגרות¶
- הוסיפו Auto Scaling Group עם Terraform:
- מספר מינימום ומקסימום של EC2
- הוסיפו S3 bucket לאחסון קבצים שהמשתמשים מעלים
- הוסיפו Secrets ל-GitHub כדי שה-CI/CD יתחבר ל-DynamoDB או RDS (מסד הנתונים שלכם)