במאמר הזה מוסבר איך להגדיר העברות נתונים מבוססות-אירוע מ-Azure Blob Storage או מ-Data Lake Storage Gen2 ל-Cloud Storage באמצעות Storage Transfer Service. העברות מבוססות-אירוע מעבירות באופן אוטומטי אובייקטים חדשים ואובייקטים מעודכנים מהמאגר שלכם ב-Azure אל Cloud Storage. מחיקות של אובייקטים לא מזוהות. מחיקה של אובייקט במקור לא מוחקת את האובייקט המשויך בקטגוריית היעד.
העברות מבוססות-אירועים משתמשות ב-Azure Event Grid וב-Azure Storage Queues כדי להודיע ל-Storage Transfer Service על שינויים במאגר Azure. כשמתרחש אירוע כמו יצירת blob חדש במאגר המקור, Azure Event Grid שולח התראה לתור של Azure Storage שהוגדר. Storage Transfer Service עוקב באופן רציף אחרי התור הזה ומתחיל העברה על סמך האירועים שמתקבלים.
לפני שמתחילים
פועלים לפי ההוראות כדי להעניק את ההרשאות הנדרשות בקטגוריה של Cloud Storage ביעד:
יצירת תור ב-Azure Storage
יוצרים תור של Azure Storage שיקבל התראות מ-Azure Event Grid.
- בפורטל Azure, עוברים לחשבון Azure Storage.
- בתפריט הניווט הימני, בקטע אחסון נתונים, בוחרים באפשרות תורים.
- לוחצים על + Queue כדי ליצור תור חדש.
- נותנים שם לתור (למשל,
transfer-notifications) ולוחצים על OK. - אחרי שיוצרים את התור, מאחזרים את הכתובת שלו ב-Azure. בדרך כלל, הכתובת תהיה בפורמט:
AZURE_STORAGE_ACCOUNT_NAME.queue.core.windows.net/AZURE_QUEUE_NAME.
הפעלה של התראות על אירועים ב-Azure Blob Storage עבור Azure Queue
מגדירים את Azure Event Grid לשליחת התראות על אירועים של אחסון Blob לתור Azure שיצרתם.
- ב-Azure Portal, עוברים לחשבון האחסון שמכיל את מאגר האחסון של ה-Blob שרוצים לנטר.
- בתפריט הניווט השמאלי, בקטע Blob service, בוחרים באפשרות Events.
- לוחצים על + Event Subscription (+ מינוי לאירוע).
מגדירים את המינוי לאירועים:
- פרטי ההרשמה לאירוע:
- מזינים שם של מינוי לאירוע (למשל,
blob-transfer-events). - מציינים שם נושא במערכת (לדוגמה,
my-blob-events-topic).
- מזינים שם של מינוי לאירוע (למשל,
- סוגי אירועים:
- בוחרים את סוגי האירועים הבאים:
- נוצר Blob
- הספרייה נוצרה
- Blob Renamed
- השם של הספרייה השתנה
- רמת ה-Blob השתנתה
- בוחרים את סוגי האירועים הבאים:
- פרטי נקודת הקצה:
- סוג נקודת קצה: בוחרים באפשרות תור אחסון.
- לוחצים על Select an endpoint (בחירת נקודת קצה) ואז בוחרים את תור Azure שיצרתם קודם.
מסננים:
- לוחצים על הפעלת סינון לפי נושא.
מוסיפים את המסנן הבא Subject begins with כדי להגביל את ההתראות למאגר ספציפי:
/blobServices/default/containers/AZURE_CONTAINER_NAME/מחליפים את AZURE_CONTAINER_NAME בשם של מאגר ה-Blob.
(אופציונלי) כדי לסנן אירועים עבור בלובים עם קידומת ספציפית בתוך המאגר, משתמשים בפקודה:
/blobServices/default/containers/AZURE_CONTAINER_NAME/blobs/BLOB_PREFIX
- פרטי ההרשמה לאירוע:
לוחצים על יצירה.
הגדרת גישה לתור של Azure
Storage Transfer Service צריך הרשאה לגשת לתור של Azure ולקרוא את ההודעות שבו. אפשר לבצע אימות באמצעות אסימון חתימת גישה משותפת (SAS) או זהות מאוחדת.
טוקן SAS
פועלים לפי ההוראות לאימות באמצעות אסימון SAS וכוללים את הפריטים הבאים:
- שירותים מותרים: Blob ו-Queue
- הרשאות מותרות: קריאה, רשימה ועיבוד
זהות מאוחדת
פועלים לפי ההוראות לאימות באמצעות זהות מאוחדת. בנוסף למתן גישה לאפליקציה לקונטיינר Azure Storage, צריך גם לתת לה גישה לתור Azure. כדי לעשות זאת, מוסיפים את התפקיד Storage Queue Data Message Processor לאפליקציה לתור של Azure.
יצירת משימת העברה עם זרם אירועים
אחרי שמגדירים את התור ואת ההתראות על אירועים ב-Azure, יוצרים את המשימה של Storage Transfer Service עם זרם אירועים.
אחרי שיוצרים את העברת הנתונים, היא מתחילה לפעול ו-event listener מחכה להודעות בתור של Azure. בדף פרטי המשרה מוצגת פעולה אחת בכל שעה, והוא כולל פרטים על הנתונים שהועברו בכל משרה.
מסוף Google Cloud
נכנסים לדף Create transfer job במסוף Google Cloud .
בשדה Source type, בוחרים באפשרות Azure Blob Storage or Data Lake Storage Gen2.
בשדה Destination type, בוחרים באפשרות Google Cloud Storage.
בקטע מצב תזמון, בוחרים באפשרות מבוסס-אירועים.
בשדה שם מקור האירועים, מזינים את הכתובת של תור Azure.
משלימים את שאר השלבים ליצירת משימת העברה, כולל פרטי המקור והיעד ואימות.
אפשר גם להזין שעת התחלה ושעת סיום להעברה. אם לא מציינים זמן, ההעברה תתחיל באופן מיידי ותפעל עד שתופסק באופן ידני.
Google Cloud CLI
כדי ליצור עבודת העברה מבוססת-אירועים באמצעות ה-CLI של gcloud, משתמשים בפקודה gcloud transfer jobs create עם הדגל --event-stream-name:
gcloud transfer jobs create \
https://AZURE_STORAGE_ACCOUNT_NAME.blob.core.windows.net/AZURE_CONTAINER_NAME \
gs://DESTINATION_BUCKET \
--source-creds-file=SOURCE_CREDS_FILE \
--event-stream-name=AZURE_STORAGE_ACCOUNT_NAME.queue.core.windows.net/AZURE_QUEUE_NAME \
--event-stream-starts=EVENT_STREAM_STARTS \
--event-stream-expires=EVENT_STREAM_EXPIRES
מחליפים את ה-placeholders בערכים בפועל:
- AZURE_STORAGE_ACCOUNT_NAME ו-AZURE_CONTAINER_NAME: שם החשבון ושם המאגר שלכם ב-Azure Blob Storage.
- DESTINATION_BUCKET: קטגוריית Cloud Storage של היעד.
- SOURCE_CREDS_FILE: הנתיב היחסי לקובץ מקומי במחשב שמכיל את אסימון ה-SAS או את הגדרות הזהות המאוחדת.
- AZURE_QUEUE_NAME: השם של תור Azure.
- EVENT_STREAM_STARTS: מתי להתחיל להאזין לאירועים באמצעות פורמט התאריך והשעה %Y-%m-%dT%H:%M:%S%z (לדוגמה,
2020-04-12T06:42:12+04:00). אם לא מוגדר, העבודה מתחילה לפעול ולהאזין לאירועים אחרי שהפקודה ליצירת העבודה נשלחת בהצלחה. - EVENT_STREAM_EXPIRES: מתי להפסיק להאזין לאירועים. אם לא מוגדר, העבודה ממשיכה עד שמפסיקים אותה באופן ידני.
רשימה מלאה של השדות הנתמכים מופיעה במאמר בנושא gcloud transfer jobs create.
API ל-REST
מגדירים משימת העברה מבוססת-אירועים באמצעות פרוטוקול TransferJob:
{
"description": "Test Azure to GCS transfer via event stream.",
"project_id": "PROJECT_ID",
"transfer_spec": {
"azure_blob_storage_data_source": {
"storage_account": "AZURE_STORAGE_ACCOUNT_NAME",
"container": "AZURE_CONTAINER_NAME",
"federated_identity_config": {
"client_id": "CLIENT_ID",
"tenant_id": "TENANT_ID"
}
},
"gcs_data_sink": {
"bucket_name": "DESTINATION_BUCKET"
},
"object_conditions": {
// optional object conditions (include_prefixes, etc)
},
"transfer_options": {}
},
"event_stream": {
"name": "AZURE_STORAGE_ACCOUNT_NAME.queue.core.windows.net/AZURE_QUEUE_NAME",
"event_stream_start_time": EVENT_STREAM_START_TIME,
"event_stream_expiration_time": EVENT_STREAM_EXPIRATION_TIME
},
"status": "ENABLED"
}
השדות של שעת ההתחלה ושעת התפוגה הם אופציונליים:
-
event_stream_start_time: השעה שממנה מתחילים להאזין לאירועים בפורמטYYYY-MM-DDTHH:MM:SSZ. אם לא מציינים את הפרמטר הזה, ההאזנה מתחילה באופן מיידי. -
event_stream_expiration_time: השעה שבה מאזין זרם האירועים יפוג בפורמטYYYY-MM-DDTHH:MM:SSZ. אם לא מציינים את הפרמטר הזה, תהליך ההאזנה נמשך עד שהעברת העבודה מושבתת או נמחקת.