במדריך הזה נסביר איך אפשר לתזמן גיבויים של מופעי Filestore באמצעות Cloud Scheduler ופונקציות Cloud Run.
מידע על יצירת גיבויים באמצעות מתזמן שירות מנוהל זמין במאמר גיבויים משופרים של Filestore.
מטרות
- יוצרים חשבון שירות לקוח עבור Cloud Scheduler עם פרטי הכניסה שנדרשים להפעלת פונקציה של Cloud Run.
- יוצרים חשבון שירות לקוח לפונקציות Cloud Run עם פרטי הכניסה לקריאה לנקודת הקצה של Filestore.
- יצירת פונקציה של Cloud Functions ב-Cloud Run שיוצרת גיבוי של מופע Filestore.
- יצירה של פונקציית Cloud Run שמוחקת גיבוי של מופע Filestore.
- יוצרים משימה של Cloud Scheduler שמריצה את אחת מהפונקציות במרווחי זמן קבועים.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
- Artifact Registry API
- Cloud Build API
- Filestore API
- Cloud Functions API
- Cloud Logging API
- Pub/Sub API
- Cloud Run Admin API
- Cloud Scheduler API
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Artifact Registry, Cloud Build, Filestore, Cloud Run functions, Cloud Logging, Pub/Sub, Cloud Run, and Cloud Scheduler APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Artifact Registry, Cloud Build, Filestore, Cloud Run functions, Cloud Logging, Pub/Sub, Cloud Run, and Cloud Scheduler APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init - אם אין לכם מופע Filestore בפרויקט, אתם צריכים קודם ליצור אחד.
יצירת חשבונות שירות של לקוחות לפונקציות של Cloud Scheduler ו-Cloud Run
אם עוד לא עשיתם זאת, במסוף, לוחצים על Activate Cloud Shell. Google Cloud
יוצרים חשבון שירות של לקוח ש-Cloud Scheduler פועל דרכו כדי להפעיל פונקציה של Cloud Run Functions. בדוגמה הזו, משתמשים בפקודה
iam service-accounts createכדי לתת לחשבון את השםschedulerunnerולהגדיר את השם המוצג 'Service Account for FS Backups-Scheduler':gcloud iam service-accounts create schedulerunner \ --display-name="Service Account for FS Backups-Scheduler"יוצרים חשבון שירות של לקוח שפונקציות Cloud Run פועלות דרכו כדי להתקשר לנקודת הקצה של Filestore. בדוגמה הזו, אנחנו קוראים לחשבון
backupagentומגדירים את השם המוצג כ-Service Account for FS Backups-GCF:gcloud iam service-accounts create backupagent \ --display-name="Service Account for FS Backups-GCF"כדי לבדוק אם חשבון השירות נוצר, מריצים את הפקודה
iam service-accounts list:gcloud iam service-accounts listהפקודה מחזירה תשובה שדומה לדוגמה הבאה:
NAME EMAIL DISABLED Service Account for FS Backups-GCF backupagent@$PROJECT_ID.iam.gserviceaccount.com False Service Account for FS Backups-Scheduler schedulerunner@$PROJECT_ID.iam.gserviceaccount.com False
הגדרה של משתני סביבה
מגדירים את משתני הסביבה הבאים בסביבה המקומית:
Google Cloud מזהה פרויקט ו-project:
export PROJECT_ID=`gcloud config get-value core/project` export PROJECT_NUMBER=`gcloud projects describe $PROJECT_ID --format="value(projectNumber)"`סוכן השירות של Cloud Scheduler וחשבונות השירות של הלקוח עבור פונקציות של Cloud Scheduler ו-Cloud Run:
export SCHEDULER_SA=service-$PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com export SCHEDULER_CLIENT_SA=schedulerunner@$PROJECT_ID.iam.gserviceaccount.com export GCF_CLIENT_SA=backupagent@$PROJECT_ID.iam.gserviceaccount.comמופע Filestore:
export SOURCE_INSTANCE_LOCATION=fs-location export SOURCE_INSTANCE_NAME=instance-id export SHARE_NAME=file-share-nameמחליפים את מה שכתוב בשדות הבאים:
- fs-location עם האזור שבו נמצא מופע Filestore של המקור.
- instance-id במזהה המופע של מופע Filestore המקור.
- file-share-name עם השם שציינתם לשיתוף קבצים ב-NFS שמוגש מהמופע.
מגדירים משתני סביבה לגיבוי Filestore:
export BACKUP_REGION=backup-regionמחליפים את backup-region באזור שבו רוצים לאחסן את הגיבוי.
יצירת פונקציה שיוצרת גיבוי
נכנסים לדף Cloud Run functions במסוף Google Cloud .
לוחצים על Write a function (כתיבת פונקציה) ומגדירים את הפונקציה באופן הבא:
- הגדרה:
- שם השירות: בדוגמה הזו, נותנים לפונקציה את השם
fsbackup. - אזור: בדוגמה הזו, בוחרים באפשרות
us-central1. - Runtime: בתפריט בוחרים כל Runtime נתמך של Python 3 שנתמך באופן מלא על ידי פונקציות Cloud Run.
- שם השירות: בדוגמה הזו, נותנים לפונקציה את השם
- טריגר:
- בדוגמה הזו אין צורך להגדיר טריגר.
- אימות: בוחרים באפשרות
Require authentication. - Ingress: בוחרים באפשרות
All. - קונטיינרים, נפחים, רישות, אבטחה
- עוברים לכרטיסייה אבטחה ובוחרים באפשרות
Service Account for FS Backups-GCF(backupagent@$PROJECT_ID.iam.gserviceaccount.com) בתפריט.
- עוברים לכרטיסייה אבטחה ובוחרים באפשרות
- הגדרה:
לוחצים על יצירה וממשיכים בהגדרה באופן הבא:
- Function entry point: מזינים
create_backup. מוסיפים את יחסי התלות הבאים לקובץ
requirements.txt:functions-framework==3.* google-auth==2.29.0 requests==2.31.0בהתאם לתרחיש השימוש, יכול להיות שתצטרכו לציין תלויות אחרות יחד עם מספרי הגרסה המתאימים שלהן. מידע נוסף מופיע במאמר בנושא חבילות שהותקנו מראש.
מעתיקים את דוגמת הקוד הבאה של Python לקובץ
main.pyבאמצעות העורך המוטבע:יצירת גיבוי
דוגמת הקוד הזו יוצרת גיבוי בשם
mybackup-עם הזמן שבו הוא נוצר.PROJECT_ID = 'project-id' SOURCE_INSTANCE_LOCATION = 'fs-location' SOURCE_INSTANCE_NAME = 'instance-id' SOURCE_FILE_SHARE_NAME = 'file-share-name' BACKUP_REGION = 'backup-region' import functions_framework import google.auth import google.auth.transport.requests from google.auth.transport.requests import AuthorizedSession import time import requests import json credentials, project = google.auth.default() request = google.auth.transport.requests.Request() credentials.refresh(request) authed_session = AuthorizedSession(credentials) def get_backup_id(): return "mybackup-" + time.strftime("%Y%m%d-%H%M%S") @functions_framework.http def create_backup(request): trigger_run_url = "https://file.googleapis.com/v1/projects/{}/locations/{}/backups?backupId={}".format(PROJECT_ID, BACKUP_REGION, get_backup_id()) headers = { 'Content-Type': 'application/json' } post_data = { "description": "my new backup", "source_instance": "projects/{}/locations/{}/instances/{}".format(PROJECT_ID, SOURCE_INSTANCE_LOCATION, SOURCE_INSTANCE_NAME), "source_file_share": "{}".format(SOURCE_FILE_SHARE_NAME) } print("Making a request to " + trigger_run_url) r = authed_session.post(url=trigger_run_url, headers=headers, data=json.dumps(post_data)) data = r.json() print(data) if r.status_code == requests.codes.ok: print(str(r.status_code) + ": The backup is uploading in the background.") else: raise RuntimeError(data['error']) return "Backup creation has begun!"מחליפים את מה שכתוב בשדות הבאים:
- project-id במזהה הפרויקט של Google Cloud מופע Filestore של המקור.
- fs-location באזור או בתחום של מופע Filestore של המקור.
- instance-id בשם של מופע Filestore של המקור.
- file-share-name מחליפים בשם של שיתוף הקבצים.
- backup-region בשם האזור שבו רוצים לאחסן את הגיבוי.
לוחצים על בדיקה.
סשן חדש בכרטיסייה נפתח ב-Cloud Shell. אם הפעולה תצליח, תוחזר ההודעה הבאה:
Backup creation has begun!לוחצים על שמירה ופריסה מחדש ומחכים שהפריסה תסתיים.
חוזרים לכרטיסייה הקודמת של Cloud Shell.
מחיקת גיבוי
בדוגמת הקוד הזו נמחקים גיבויים ישנים יותר מתקופה מוגדרת מראש.
אפשר למחוק רק גיבוי אחד לכל מופע מקור בכל פעם. מידע נוסף זמין במאמר בנושא גיבויים.
מגדירים את הפונקציה הזו באותו אופן שבו הגדרתם את הפונקציה שבה השתמשתם כדי ליצור גיבוי, עם השינויים הבאים:
- שם הפונקציה:
deletefsbackup. - נקודת כניסה:
delete_backup.
PROJECT_ID = 'project-id' BACKUP_REGION = 'region' BACKUP_RETENTION_TIME_HRS = hours import functions_framework import google.auth import google.auth.transport.requests from google.auth.transport.requests import AuthorizedSession import time import requests import json credentials, project = google.auth.default() request = google.auth.transport.requests.Request() credentials.refresh(request) authed_session = AuthorizedSession(credentials) retention_seconds = BACKUP_RETENTION_TIME_HRS * 60 * 60 @functions_framework.http def delete_backup(request): now = time.time() backup_list = [] trigger_run_url = "https://file.googleapis.com/v1/projects/{}/locations/{}/backups".format(PROJECT_ID, BACKUP_REGION) r = authed_session.get(trigger_run_url) data = r.json() if not data: print("No backups to delete.") return "No backups to delete." else: backup_list.extend(data['backups']) while "nextPageToken" in data.keys(): nextPageToken = data['nextPageToken'] trigger_run_url_next = "https://file.googleapis.com/v1/projects/{}/locations/{}/backups?pageToken={}".format(PROJECT_ID, BACKUP_REGION, nextPageToken) r = authed_session.get(trigger_run_url_next) data = r.json() backup_list.extend(data['backups']) for i in backup_list: backup_time = i['createTime'] backup_time = backup_time[:-4] backup_time = float(time.mktime(time.strptime(backup_time, "%Y-%m-%dT%H:%M:%S.%f"))) i['backup_timestamp'] = backup_time sorted_backup_list = sorted(backup_list, key=lambda d: d['backup_timestamp']) oldest_backup = sorted_backup_list[0] if now - oldest_backup['backup_timestamp'] > retention_seconds: print(oldest_backup['name'] + " is older than the indicated retention time.") r = authed_session.delete("https://file.googleapis.com/v1/{}".format(oldest_backup['name'])) data = r.json() print(data) if r.status_code == requests.codes.ok: print(str(r.status_code) + ": Deleting " + oldest_backup['name'] + " in the background.") else: raise RuntimeError(data['error']) return "Backup deletion has begun!" return "All backups are within the indicated retention period."מחליפים את מה שכתוב בשדות הבאים:
- project-id במזהה הפרויקט של הגיבוי. Google Cloud
- region באזור שבו הגיבוי נמצא. הגיבוי, משימת המתזמן והפונקציה צריכים להיות באותו מיקום.
- מחליפים את hours במספר השעות שבהן הגיבויים יישמרו. לדוגמה, אם רוצים לשמור גיבויים למשך 10 ימים, מזינים
240.
- Function entry point: מזינים
הקצאת תפקידי IAM לחשבונות השירות של הלקוח
מוסיפים את סוכן השירות של Cloud Scheduler למדיניות IAM של חשבון השירות של לקוח Cloud Scheduler עם התפקיד
roles/cloudscheduler.serviceAgent. כך סוכן השירות יכול להתחזות לחשבון השירות של הלקוח כדי להפעיל את הפונקציה שיוצרת גיבוי. מריצים את הפקודהiam service-accounts add-iam-policy-binding:gcloud iam service-accounts add-iam-policy-binding $SCHEDULER_CLIENT_SA \ --member=serviceAccount:$SCHEDULER_SA \ --role=roles/cloudscheduler.serviceAgentנותנים לחשבון השירות של הלקוח של פונקציות Cloud Run את התפקיד
roles/file.editorכדי שהוא יוכל לבצע קריאות לנקודת הקצה של Filestore. מריצים את הפקודהprojects add-iam-policy-binding:gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:$GCF_CLIENT_SA \ --role=roles/file.editorמקצים לחשבון השירות של הלקוח ב-Cloud Scheduler את התפקיד
roles/run.invokerעבור הפונקציה שבה רוצים להשתמש. מריצים את הפקודה הבאהrun services add-iam-policy-binding:יצירת גיבוי
gcloud run services add-iam-policy-binding fsbackup \ --member serviceAccount:$SCHEDULER_CLIENT_SA \ --role roles/run.invoker \ --region=us-central1מעכשיו, רק חשבון השירות של הלקוח ב-Cloud Scheduler יכול להפעיל את
fsbackup.מחיקת גיבוי
gcloud run services add-iam-policy-binding deletefsbackup \ --member serviceAccount:$SCHEDULER_CLIENT_SA \ --role roles/run.invokerמעכשיו, רק חשבון השירות של הלקוח ב-Cloud Scheduler יכול להפעיל את
deletefsbackup.
יצירת משימה ב-Cloud Scheduler שמפעילה את הפונקציה לפי לוח זמנים שצוין
יצירת גיבוי
בדוגמה שלנו במדריך הזה, אם רוצים לתזמן גיבוי בכל יום חול בשעה 22:00, משתמשים בפקודה
scheduler jobs create http:gcloud scheduler jobs create http fsbackupschedule \ --schedule "0 22 * * 1-5" \ --http-method=GET \ --uri=https://fsbackup-$PROJECT_NUMBER.us-central1.run.app \ --oidc-service-account-email=$SCHEDULER_CLIENT_SA \ --location=us-central1בדגל
--scheduleמציינים את התדירות שבה העבודה מופעלת באמצעות פורמט unix-cron. פרטים נוספים מופיעים במאמר הגדרת לוחות זמנים של משימות cron.אפשר ליצור עד שש גיבויים לכל מופע בשעה.
מפעילים את משימת Cloud Scheduler שנוצרה בשלב הקודם. בדוגמה שלנו, משתמשים בפקודה
scheduler jobs runsכדי להריץ אותה באופן מיידי:gcloud scheduler jobs run fsbackupscheduleהג'וב
fsbackupscheduleמפעיל את הפונקציהfsbackupמיד אחרי שמריצים את הפקודה, ואז מפעיל אותה שוב בכל יום עבודה בשעה 22:00 עד שהג'וב מושהה.בודקים את היומנים של הפונקציה
fsbackupכדי לראות אם היא מופעלת בצורה תקינה ומחזירהstatus 200.כדי לראות את היומנים במסוף Google Cloud , משתמשים ב-Logs Explorer:
-
במסוף Google Cloud , נכנסים לדף Logs Explorer:
אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Logging.
היומנים האחרונים מוצגים בחלונית Query results.
-
בודקים את הסטטוס של הגיבויים הקיימים באמצעות הפקודה
backups list:gcloud filestore backups listהפקודה מחזירה פלט שדומה לזה:
NAME LOCATION SRC_INSTANCE SRC_FILE_SHARE STATE mybackup-20201123-184500 us-central1 us-central1-c/instances/nfs-server vol1 READY
מחיקת גיבוי
בדוגמה שלנו במדריך הזה, אם רוצים לתזמן פעולה למחיקת גיבוי בכל יום חול בשעה 22:00, משתמשים בפקודה
scheduler jobs create http:gcloud scheduler jobs create http deletefsbackupschedule \ --schedule "0 22 * * 1-5" \ --http-method=GET \ --uri=https://us-central1-$PROJECT_ID.cloudfunctions.net/deletefsbackup \ --oidc-service-account-email=$SCHEDULER_CLIENT_SA \ --oidc-token-audience=https://us-central1-$PROJECT_ID.cloudfunctions.net/deletefsbackupבדגל
--scheduleמציינים את התדירות שבה העבודה מופעלת באמצעות פורמט unix-cron. פרטים נוספים מופיעים במאמר הגדרת לוחות זמנים של משימות cron.פעולות גיבוי
deleteשמשויכות לאותו מופע מקור צריכות להתבצע אחת בכל פעם. מידע נוסף זמין במאמר בנושא גיבויים.מפעילים את משימת Cloud Scheduler שנוצרה בשלב הקודם. בדוגמה שלנו, אנחנו משתמשים בפקודה
scheduler jobs runsכדי להריץ אותה באופן מיידי:gcloud scheduler jobs run deletefsbackupscheduleהג'וב
deletefsbackupscheduleמפעיל את הפונקציהdeletefsbackupמיד אחרי שמריצים את הפקודה, ואז מפעיל אותה שוב בכל יום עבודה בשעה 22:00 עד שהג'וב מושהה.בודקים את היומנים של הפונקציה
deletefsbackupכדי לראות אם היא מופעלת בצורה תקינה ומחזירהstatus 200.כדי לראות את היומנים במסוף Google Cloud , משתמשים ב-Logs Explorer:
-
במסוף Google Cloud , נכנסים לדף Logs Explorer:
אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Logging.
היומנים האחרונים מוצגים בחלונית Query results.
-
בודקים את הסטטוס של הגיבויים הקיימים באמצעות הפקודה
backups list:gcloud filestore backups listהפקודה מחזירה פלט שדומה לזה:
NAME LOCATION SRC_INSTANCE SRC_FILE_SHARE STATE mybackup-20201123-184500 us-central1 us-central1-c/instances/nfs-server vol1 READY
התראות על מכסת נפח אחסון נמוכה לגיבויים
אם ההטמעה של גיבויים מתוזמנים עלולה לגרום לכם לחרוג ממכסת הגיבויים, מומלץ להגדיר התראות על מכסת גיבויים נמוכה. כך תקבלו התראה כשהמכסה של הגיבויים תהיה נמוכה.
הסרת המשאבים
אחרי שמסיימים את המדריך, אפשר למחוק את המשאבים שנוצרו, כדי שהם יפסיקו להשתמש במכסה ולצבור חיובים. בסעיפים הבאים מוסבר איך למחוק או להשבית את המשאבים האלו.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך הזה.
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.