במאמר הזה מוסבר איך להגדיר העברות נתונים מבוססות-אירוע מ-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) ולוחצים על אישור. - אחרי שיוצרים את התור, מאחזרים את הכתובת שלו ב-Azure. בדרך כלל, הכתובת תהיה בפורמט:
AZURE_STORAGE_ACCOUNT_NAME.queue.core.windows.net/AZURE_QUEUE_NAME.
הפעלה של התראות על אירועים ב-Azure Blob Storage עבור Azure Queue
מגדירים את Azure Event Grid לשליחת התראות על אירועים ב-Blob Storage לתור Azure שיצרתם.
- ב-Azure portal, עוברים לחשבון האחסון שמכיל את מאגר ה-Blob Storage שרוצים לנטר.
- בתפריט הניווט השמאלי, בקטע Blob service, בוחרים באפשרות Events.
- לוחצים על + Event Subscription (+ מינוי לאירוע).
מגדירים את המינוי לאירוע:
- פרטי ההרשמה לאירוע:
- מזינים שם של מינוי לאירוע (למשל,
blob-transfer-events). - מציינים שם נושא מערכת (לדוגמה,
my-blob-events-topic).
- מזינים שם של מינוי לאירוע (למשל,
- סוגי אירועים:
- בוחרים את סוגי האירועים הבאים:
- נוצר Blob
- הספרייה נוצרה
- שם ה-Blob שונה
- הספרייה שונה
- רמת ה-Blob השתנתה
- בוחרים את סוגי האירועים הבאים:
- פרטי נקודת הקצה:
- סוג נקודת הקצה: בוחרים באפשרות תור אחסון.
- לוחצים על Select an endpoint (בחירת נקודת קצה) ואז בוחרים את תור Azure שיצרתם קודם.
מסננים:
- לוחצים על הפעלת סינון לפי נושא.
מוסיפים את המסנן הבא Subject begins with כדי להגביל את ההתראות לקונטיינר ספציפי:
/blobServices/default/containers/AZURE_CONTAINER_NAME/מחליפים את AZURE_CONTAINER_NAME בשם של קונטיינר אחסון ה-Blob.
(אופציונלי) כדי לסנן אירועים של כתובות 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.
בקטע סוג היעד, בוחרים באפשרות 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 (לדוגמה,
my-queue). - 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": "Event-driven Azure to Cloud Storage transfer",
"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. אם לא מציינים את הפרמטר הזה, תהליך ההאזנה נמשך עד שהעברת העבודה מושבתת או נמחקת.