מניעת מחיקה של מכונה

בדף הזה מוסבר איך להגן על מכונות Cloud SQL מפני מחיקה לא מכוונת.

סקירה כללית

הגנה מפני מחיקת מופעים מאפשרת לכם למנוע הסרה מקרית של מופעים קיימים וחדשים. באמצעות הגנה מפני מחיקת מופעים, אתם יכולים להגן על מופעים שחשובים לאפליקציות ולשירותים שלכם.

אפשר להגדיר את האפשרות להגנה מפני מחיקה כשיוצרים מכונה. בנוסף, אפשר להגדיר את האפשרות הזו במופע קיים. בשני המקרים, המחיקה נמנעת ברמת המופע. כברירת מחדל, האפשרות 'הגנה מפני מחיקה' מושבתת, אלא אם משתמשים במסוף Google Cloud או ב-Terraform כדי ליצור מופע.

כשמשכפלים מופע, המופע החדש מקבל את האפשרות להגנה מפני מחיקה (מופעלת או מושבתת) ממופע המקור.

תכנון של הגנה מפני מחיקה

אם אתם מתכננים ליצור מופע, אתם צריכים להחליט אם אתם רוצים להגן על המופע החדש מפני מחיקה בטעות. לדוגמה, מומלץ להגן כך על מופע קריטי.

כדאי גם לחשוב אם יש מקרים קיימים שרוצים להגן עליהם מפני מחיקה מקרית. אם יש לכם כמה מקרים להגנה, צריך להגדיר את האפשרות בכל מקרה.

הפעלת הגנה מפני מחיקה של עותקים לקריאה

כשיוצרים רפליקה לקריאה, הרפליקה הזו לא מקבלת הגדרת הגנה מפני מחיקה מהמופע הראשי. ההגדרה הזו נשארת עצמאית. עם זאת, אפשר להפעיל הגנה מפני מחיקה בעותק לקריאה חדש או קיים.

האפשרות להגנה מפני מחיקה ברפליקות לקריאה ב-Cloud SQL פועלת באותו אופן כמו במכונות Cloud SQL.

אישור ההרשאות או התפקידים הנדרשים

כדי להגדיר את האפשרות 'הגנה מפני מחיקה', לחשבון השירות של מופע Cloud SQL צריכות להיות הרשאות או תפקידי IAM מסוימים.

הרשאות או תפקידים ליצירת מכונה

כמו במקרה של פעולות קשורות, האפשרות להגנה מפני מחיקה דורשת את ההרשאה cloudsql.instances.create או את התפקיד cloudsql.admin. לכן, כשיוצרים מופע, לא נדרשות הרשאות נוספות כדי להפעיל הגנה מפני מחיקה.

הרשאות או תפקידים לעריכת מופע

כמו במקרה של פעולות קשורות, כדי לשנות את ההגנה מפני מחיקה צריך את ההרשאה cloudsql.instances.update או את התפקיד cloudsql.editor. לכן, כשעורכים מופע כדי להפעיל את ההגנה מפני מחיקה, לא נדרשות הרשאות נוספות.

תכנון מחיקה של מופעים

אם אתם מתכננים למחוק מכונה, קודם צריך לבצע את הפעולות הבאות:

  • אישור שמחיקת המופע בטוחה
  • מוודאים שההגנה מפני מחיקה מושבתת. אם צריך, עורכים את המופע כדי להשבית את ההגנה מפני מחיקה.

המגבלות של הגנה מפני מחיקה

הגנה מפני מחיקה במופע לא מונעת:

  • הפסקת המכונה
  • הפעלה מחדש של המכונה
  • עריכת המופע
  • מחיקת גיבוי
  • השעיית המופע בגלל בעיות בחיוב
  • מחיקת המופע המושעה בגלל בעיות בחיוב
  • מחיקת המופע בגלל מחיקת פרויקט

הגדרת הגנה מפני מחיקה במופע חדש

אלה הדרכים להגדיר את האפשרות להגנה מפני מחיקה. כברירת מחדל, האפשרות להגנה מפני מחיקה מושבתת, אלא אם משתמשים במסוף Google Cloud או ב-Terraform כדי ליצור מכונה.

אם ההגנה מפני מחיקה מופעלת, ניסיון למחוק את המופע ייכשל.

המסוף

  1. פועלים לפי השלבים כדי ליצור מכונה.
  2. בקטע Customize your instance (התאמה אישית של המופע), לוחצים על החץ לתפריט הנפתח Show configuration options (הצגת אפשרויות ההגדרה).
  3. בקטע הגנה על נתונים, מוודאים שתיבת הסימון הפעלת הגנה מפני מחיקה מסומנת.
  4. בוחרים אפשרויות הגדרה אחרות לפי הצורך עבור המופע.
  5. לוחצים על Create Instance.

gcloud

כדי להגדיר הגנה מפני מחיקה במהלך יצירת המכונה, משתמשים בפקודה שדומה לפקודה הבאה:

gcloud sql instances create [INSTANCE_NAME] \
    --deletion-protection

REST v1

כדי להגדיר הגנה מפני מחיקה במהלך יצירת המכונה, מציינים את הערך true בשדה deletionProtection.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • project-id: מזהה הפרויקט
  • instance-id: מזהה המכונה הרצוי
  • database-version: גרסת מסד הנתונים
  • region: האזור הרצוי
  • machine-type: סוג המכונה הרצוי

ה-method של ה-HTTP וכתובת ה-URL:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances

תוכן בקשת JSON:

{
  "name": "instance-id",
  "region": "region",
  "databaseVersion": "database-version",
  "settings": {
    "tier": "machine-type",
    "deletionProtectionEnabled": true
  }
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2022-05-24T15:34:10.929Z",
  "operationType": "CREATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

REST v1beta4

כדי להגדיר הגנה מפני מחיקה במהלך יצירת המכונה, מציינים את הערך true בשדה deletionProtection.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • project-id: מזהה הפרויקט
  • instance-id: מזהה המכונה הרצוי
  • database-version: גרסת מסד הנתונים
  • region: האזור הרצוי
  • machine-type: סוג המכונה הרצוי

ה-method של ה-HTTP וכתובת ה-URL:

POST https://sqladmin.googleapis.com/v1beta4/projects/project-id/instances

תוכן בקשת JSON:

{
  "name": "instance-id",
  "region": "region",
  "databaseVersion": "database-version",
  "settings": {
    "tier": "machine-type",
    "deletionProtectionEnabled": true
  }
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2022-05-26T15:37:10.929Z",
  "operationType": "CREATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
כדי לראות איך בקשת API בארכיטקטורת REST הבסיסית בנויה עבור המשימה הזו, אפשר לעיין ב-APIs Explorer בדף instances:insert.

הגדרה או הסרה של הגנה מפני מחיקה במופע קיים

אלה הדרכים לערוך מופע כדי להפעיל את ההגנה מפני מחיקה. אם תפעילו את האפשרות, ניסיון למחוק את המופע ייכשל.

המסוף

  1. פועלים לפי השלבים כדי להתחיל לערוך מופע.
  2. אחרי שלוחצים על עריכה, מחפשים את הקטע התאמה אישית של המופע.
  3. בקטע הגנה על נתונים, מסמנים או מבטלים את הסימון בתיבה הפעלת הגנה מפני מחיקה.
  4. עורכים את אפשרויות ההגדרה האחרות לפי הצורך במכונה.
  5. לוחצים על Save.

gcloud

כדי להפעיל הגנה מפני מחיקה כשמעדכנים מופע, משתמשים בפקודה שדומה לפקודה הבאה:

gcloud sql instances patch [INSTANCE_NAME] \
    --deletion-protection

כדי להשבית את ההגנה מפני מחיקה כשמעדכנים מופע, משתמשים בפקודה דומה לזו:

gcloud sql instances patch [INSTANCE_NAME] \
    --no-deletion-protection

REST v1

כדי להגדיר הגנה מפני מחיקה כשמעדכנים מכונה, מציינים true בשדה deletionProtection. כדי להסיר את ההגנה מפני מחיקה, מציינים false בשדה הזה.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • project-id: מזהה הפרויקט
  • instance-id: מזהה המכונה הרצוי

ה-method של ה-HTTP וכתובת ה-URL:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

תוכן בקשת JSON:

{
  "settings": {
    "deletionProtectionEnabled": true
  }
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2022-06-1T03:42:12.281Z",
  "operationType": "CREATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

REST v1beta4

כדי להגדיר הגנה מפני מחיקה כשמעדכנים מכונה, מציינים true בשדה deletionProtection. כדי להסיר את ההגנה מפני מחיקה, מציינים false בשדה הזה.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • project-id: מזהה הפרויקט
  • instance-id: מזהה המכונה הרצוי

ה-method של ה-HTTP וכתובת ה-URL:

PATCH https://sqladmin.googleapis.com/v1beta4/projects/project-id/instances/instance-id

תוכן בקשת JSON:

{
  "settings": {
    "deletionProtectionEnabled": true
  }
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2022-06-1T03:32:12.281Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
כדי לראות איך בקשת API בארכיטקטורת REST הבסיסית בנויה עבור המשימה הזו, אפשר לעיין ב-APIs Explorer בדף instances:patch.