יצירת העברות

בדף הזה מוסבר איך ליצור ולהתחיל עבודות העברה.

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

סוכנים ומאגרי סוכנים

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

  • העברות מ-Amazon S3, מ-Microsoft Azure, מרשימות של כתובות URL או מ-Cloud Storage אל Cloud Storage לא דורשות סוכנים ומאגרי סוכנים.

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

לפני שמתחילים

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

אם אתם משתמשים בפקודות gcloud, אתם צריכים להתקין את ה-CLI של gcloud.

יצירת העברה

אל תכללו בשם של עבודת ההעברה מידע רגיש כמו פרטים אישיים מזהים (PII) או נתוני אבטחה. יכול להיות ששמות המשאבים יועברו לשמות של משאבים אחרים ב-Google Cloud, ויוצגו למערכות פנימיות של Google מחוץ לפרויקט שלכם.

מסוף Google Cloud

  1. נכנסים לדף Storage Transfer Service במסוף Google Cloud .

    מעבר אל Storage Transfer Service

  2. לוחצים על Transfer. מוצג הדף Create a transfer job.

  3. בוחרים מקור:

    Cloud Storage

    לחשבון המשתמש צריכה להיות הרשאת storage.buckets.get כדי לבחור את דלי המקור ואת דלי היעד. אפשר גם להקליד ישירות את השם של הקטגוריה. מידע נוסף מופיע במאמר פתרון בעיות בגישה.

    1. בקטע סוג המקור, בוחרים באפשרות Cloud Storage.

    2. בוחרים את סוג היעד.

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

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

    4. לוחצים על השלב הבא.

    5. בוחרים קטגוריה ותיקייה (אופציונלי) בקטגוריה הזו באחת מהדרכים הבאות:

      • בשדה Bucket or folder (קטגוריה או תיקייה), מזינים שם של קטגוריה קיימת ב-Cloud Storage ונתיב, בלי הקידומת gs://. לדוגמה, my-test-bucket/path/to/files. כדי לציין קטגוריה של Cloud Storage מפרויקט אחר, מקלידים את השם בדיוק בשדה Bucket name.

      • לוחצים על Browse, בוחרים קטגוריה ומוסיפים אותה לרשימת הקטגוריות הקיימות בפרויקטים.

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

      • כדי ליצור מאגר חדש, לוחצים על Create new bucket (יצירת מאגר חדש).

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

    6. אם מדובר בהעברה מבוססת-אירועים, מזינים את שם המינוי ל-Pub/Sub, שמופיע בפורמט הבא:

      projects/PROJECT_NAME/subscriptions/SUBSCRIPTION_ID
      
    7. אופציונלי, אפשר לסנן אובייקטים לפי קידומת או לפי תאריך השינוי האחרון. אם ציינתם תיקייה כמיקום המקור, מסנני הקידומות הם יחסיים לתיקייה הזו. לדוגמה, אם המקור הוא my-test-bucket/path/, מסנן include של file כולל את כל הקבצים שמתחילים ב-my-test-bucket/path/file.
    8. לוחצים על השלב הבא.

    Amazon S3

    העברה מ-Amazon S3 ל-Cloud Storage

    אחסון שתואם ל-S3

    העברה מאחסון שתואם ל-S3 ל-Cloud Storage

    Microsoft Azure Blob Storage

    1. בקטע סוג המקור, בוחרים באפשרות Azure Blob Storage או Data Lake Storage Gen2.

    2. לוחצים על השלב הבא.

    3. מציינים את הפרטים הבאים:

      1. שם חשבון האחסון – שם חשבון האחסון של Microsoft Azure כמקור.

        שם החשבון לאחסון מוצג בפורטל Microsoft Azure Storage בקטע All services > Storage > Storage accounts.

      2. שם הקונטיינר – שם הקונטיינר ב-Microsoft Azure Storage.

        שם המאגר מוצג בפורטל Microsoft Azure Storage בקטע Storage explorer > Blob containers.

      3. חתימת גישה משותפת (SAS) – טוקן SAS של Microsoft Azure Storage שנוצר ממדיניות גישה מאוחסנת. מידע נוסף זמין במאמר Grant limited access to Azure Storage resources using shared access signatures (SAS).

        ברירת המחדל של זמן התפוגה של אסימוני SAS היא 8 שעות. כשיוצרים את טוקן ה-SAS, חשוב להגדיר זמן תפוגה סביר שיאפשר להשלים את ההעברה בהצלחה.
    4. אופציונלי, אפשר לסנן אובייקטים לפי קידומת או לפי תאריך השינוי האחרון. אם ציינתם תיקייה כמיקום המקור, מסנני הקידומות הם יחסיים לתיקייה הזו. לדוגמה, אם המקור הוא my-test-bucket/path/, מסנן include של file כולל את כל הקבצים שמתחילים ב-my-test-bucket/path/file.
    5. לוחצים על השלב הבא.

    מערכת קבצים

    1. בקטע סוג המקור, בוחרים באפשרות מערכת קבצים POSIX.

    2. בוחרים את סוג היעד ולוחצים על השלב הבא.

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

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

    5. לוחצים על השלב הבא.

    HDFS

    העברה מ-HDFS ל-Cloud Storage

    רשימת כתובות URL

    1. בקטע סוג המקור, בוחרים באפשרות רשימת כתובות URL ולוחצים על השלב הבא.

    2. בקטע כתובת URL של קובץ TSV, מזינים את כתובת ה-URL של קובץ עם ערכים מופרדים בטאבים (TSV). במאמר יצירת רשימת כתובות URL יש פרטים נוספים על יצירת קובץ ה-TSV.

    3. אופציונלי, אפשר לסנן אובייקטים לפי קידומת או לפי תאריך השינוי האחרון. אם ציינתם תיקייה כמיקום המקור, מסנני הקידומות הם יחסיים לתיקייה הזו. לדוגמה, אם המקור הוא my-test-bucket/path/, מסנן include של file כולל את כל הקבצים שמתחילים ב-my-test-bucket/path/file.
    4. לוחצים על השלב הבא.

  4. בוחרים יעד:

    Cloud Storage​

    1. בשדה Bucket or folder (קטגוריה או תיקייה), מזינים את קטגוריית היעד ואת שם התיקייה (אופציונלי), או לוחצים על Browse (עיון) כדי לבחור קטגוריה מתוך רשימת הקטגוריות הקיימות בפרויקט הנוכחי. כדי ליצור מאגר חדש, לוחצים על Create new bucket (יצירת מאגר חדש).

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

    2. לוחצים על השלב הבא.

    3. בוחרים את אפשרויות התזמון:

      1. ברשימה הנפתחת הפעלה חד-פעמית, בוחרים אחת מהאפשרויות הבאות:

        • הפעלה חד-פעמית: הפעלה של העברה אחת, החל משעה שתבחרו.

        • הפעלה בכל יום: ההעברה תתבצע מדי יום, החל מהשעה שתבחרו.

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

        • הפעלה בכל שבוע: הפעלה של העברה שבועית, החל משעה שתבחרו.

        • הפעלה בתדירות מותאמת אישית: הפעלת העברה בתדירות שבוחרים. אפשר לבחור לחזור על ההעברה במרווחי זמן קבועים של שעות, ימים או שבועות.

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

      2. מהרשימה הנפתחת החל מעכשיו, בוחרים באחת מהאפשרויות הבאות:

        • Starting now (החל מעכשיו): ההעברה תתחיל אחרי שתלחצו על Create (יצירה).

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

    4. לוחצים על השלב הבא.

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

      1. בשדה Description (תיאור), מזינים תיאור של ההעברה. מומלץ להזין תיאור בעל משמעות וייחודי כדי להבחין בין המשרות.

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

      3. בקטע When to overwrite (מתי להחליף), בוחרים באחת מהאפשרויות הבאות:

        • אם שונה: מחליף את קובצי היעד אם לקובץ המקור עם אותו שם יש ערכי Etags או סיכום ביקורת שונים.

        • תמיד: תמיד מחליף את קובצי היעד כשלקובץ המקור יש את אותו שם, גם אם הם זהים.

      4. בקטע When to delete (מתי למחוק), בוחרים באחת מהאפשרויות הבאות:

        • אף פעם: הקבצים לא יימחקו מהמקור או מהיעד.

        • Delete file from source after they're transferred: מחיקת קבצים מהמקור אחרי שהם מועברים ליעד. אם קובץ מקור לא מועבר, למשל כי הוא כבר קיים ביעד, קובץ המקור לא נמחק.

        • מחיקת קבצים מהיעד אם הם לא נמצאים גם במקור: אם קבצים בקטגוריית היעד של Cloud Storage לא נמצאים גם במקור, הקבצים יימחקו מקטגוריית Cloud Storage.

          האפשרות הזו מבטיחה שקטגוריית היעד של Cloud Storage תהיה זהה למקור.

      5. כשמעבירים נתונים בין קטגוריות של Cloud Storage, אפשר לבחור אם להעביר תיקיות מנוהלות.

      6. מפעילים או משביתים את הרישום ביומן של Storage Transfer Service.

      7. בקטע אפשרויות התראה, אפשר לבחור את נושא ה-Pub/Sub ואת האירועים שלגביהם רוצים לקבל התראות. מידע נוסף על התראות Pub/Sub

    6. אם מייפים הרשאות של סוכן שירות לחשבון שירות בניהול המשתמשים, בוחרים באפשרות הזו ומזינים את כתובת האימייל בחשבון השירות בפורמט SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.

    7. לוחצים על יצירה.

    מערכת קבצים​

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

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

    3. לוחצים על השלב הבא.

    4. בוחרים את אפשרויות התזמון:

      1. ברשימה הנפתחת הפעלה חד-פעמית, בוחרים אחת מהאפשרויות הבאות:

        • הפעלה חד-פעמית: הפעלה של העברה אחת, החל משעה שתבחרו.

        • הפעלה בכל יום: ההעברה תתבצע מדי יום, החל מהשעה שתבחרו.

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

        • הפעלה בכל שבוע: הפעלה של העברה שבועית, החל משעה שתבחרו.

        • הפעלה בתדירות מותאמת אישית: הפעלת העברה בתדירות שבוחרים. אפשר לבחור לחזור על ההעברה במרווחי זמן קבועים של שעות, ימים או שבועות.

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

      2. מהרשימה הנפתחת החל מעכשיו, בוחרים באחת מהאפשרויות הבאות:

        • Starting now (החל מעכשיו): ההעברה תתחיל אחרי שתלחצו על Create (יצירה).

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

    5. לוחצים על השלב הבא.

    6. מציינים אם להשתמש בקובץ מניפסט.

    7. בוחרים אם לשמור את המטא-נתונים, מתי להחליף קבצים ומתי למחוק קבצים במקור או ביעד.

    8. בוחרים את אפשרויות הרישום ביומן.

    9. בקטע אפשרויות התראה, אפשר לבחור את נושא ה-Pub/Sub ואת האירועים שלגביהם רוצים לקבל התראות. מידע נוסף על התראות Pub/Sub

    10. אם מייפים הרשאות של סוכן שירות לחשבון שירות בניהול המשתמשים, בוחרים באפשרות הזו ומזינים את כתובת האימייל בחשבון השירות בפורמט SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.

    11. כדי ליצור את עבודת ההעברה, לוחצים על Create (יצירה).

‫CLI של gcloud

כדי ליצור משימת העברה חדשה, משתמשים בפקודה gcloud transfer jobs create. יצירת משימה חדשה מתחילה את ההעברה שצוינה, אלא אם צוין לוח זמנים או --do-not-run.

gcloud transfer jobs create \
  SOURCE DESTINATION

מחליפים את מה שכתוב בשדות הבאים:

  • SOURCE הוא מקור הנתונים להעברה הזו. הפורמט של כל מקור הוא:

    • ‫Cloud Storage: gs://BUCKET_NAME. כדי להעביר מתיקייה ספציפית, מציינים gs://BUCKET_NAME/FOLDER_PATH/, כולל לוכס בסוף.
    • ‫Amazon S3: ‏ s3://BUCKET_NAME/FOLDER_PATH
    • אחסון שתואם ל-S3: ‏ s3://BUCKET_NAME. שם הקטגוריה הוא יחסי לנקודת הקצה. לדוגמה, אם הנתונים נמצאים בכתובת https://us-east-1.example.com/folder1/bucket_a, מזינים s3://folder1/bucket_a.
    • Microsoft Azure Storage: https://myaccount.blob.core.windows.net/CONTAINER_NAME
    • רשימת כתובות URL: ‏ https://PATH_TO_URL_LIST או http://PATH_TO_URL_LIST
    • מערכת קבצים POSIX: ‏ posix:///PATH. הנתיב צריך להיות מוחלט, מהרמה הבסיסית (root) של המכונה המארחת של הסוכן.
    • HDFS: hdfs:///PATH

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

  • DESTINATION הוא אחד מהבאים:

    • ‫Cloud Storage: gs://BUCKET_NAME. כדי להעביר לספרייה ספציפית, מציינים את gs://BUCKET_NAME/FOLDER_PATH/, כולל לוכסן בסוף.
    • מערכת קבצים POSIX: ‏ posix:///PATH. הנתיב צריך להיות מוחלט, מהרמה הבסיסית (root) של המכונה המארחת של הסוכן. אם הנתיב שציינתם לא קיים, סוכן ההעברה ינסה ליצור את מבנה הספרייה במערכת הקבצים של היעד במהלך תהליך ההעברה. לסוכן צריכות להיות הרשאות הכתיבה הנדרשות בספריית האב.

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

אם ההעברה דורשת סוכני העברה, האפשרויות הבאות זמינות:

  • --source-agent-pool מציין את מאגר הסוכנים של המקור שישמש להעברה הזו. נדרש להעברות שמקורן במערכת קבצים.

  • --destination-agent-pool מציין את מאגר הסוכנים של היעד שבו יש להשתמש להעברה הזו. נדרש להעברות למערכת קבצים.

  • --intermediate-storage-path הוא הנתיב לקטגוריה של Cloud Storage, בתבנית gs://my-intermediary-bucket. נדרש להעברות בין שתי מערכות קבצים. פרטים על יצירת קטגוריית ביניים זמינים במאמר בנושא יצירת קטגוריה של Cloud Storage כקטגוריית ביניים.

אפשרויות נוספות:

  • --source-creds-file מציין את הנתיב היחסי לקובץ מקומי במחשב שלכם שכולל פרטי כניסה ל-AWS או ל-Azure עבור מקור ההעברה. מידע על הפורמט של קובץ האישורים זמין במאמר בנושא TransferSpec.

  • --do-not-run מונע מ-Storage Transfer Service להריץ את העבודה עם שליחת הפקודה. כדי להריץ את העבודה, מעדכנים אותה כדי להוסיף לוח זמנים, או משתמשים בפקודה jobs run כדי להתחיל אותה באופן ידני.

  • --manifest-file מציין את הנתיב לקובץ CSV ב-Cloud Storage שמכיל רשימה של קבצים להעברה מהמקור. מידע על הפורמט של קובץ המניפסט מופיע במאמר העברה של קבצים או אובייקטים ספציפיים באמצעות מניפסט.

  • פרטי משרה: אפשר לציין את --name,‏ --description ו---source-creds-file. שימו לב: אי אפשר להשתמש ב---name בעבודות שכפול בין מאגרי מידע.

  • תזמון: מציינים --schedule-starts,‏ --schedule-repeats-every ו---schedule-repeats-until, או --do-not-run.

  • תנאים לאובייקטים: משתמשים בתנאים כדי לקבוע אילו אובייקטים יועברו. הם כוללים את --include-prefixes ואת --exclude-prefixes, ואת התנאים מבוססי-הזמן ב---include-modified-[before | after]-[absolute | relative]. אם ציינתם תיקייה עם המקור, מסנני הקידומת הם יחסיים לתיקייה הזו. מידע נוסף מופיע במאמר בנושא סינון אובייקטים של מקור לפי קידומת.

    אין תמיכה בתנאים של אובייקטים בהעברות שכוללות מערכות קבצים.

  • אפשרויות העברה: מציינים אם להחליף קבצים ביעד (--overwrite-when=different או always) ואם למחוק קבצים מסוימים במהלך ההעברה או אחריה (--delete-from=destination-if-unique או source-after-transfer). מציינים אילו ערכי מטא-נתונים לשמור (--preserve-metadata), ואפשר גם להגדיר סוג אחסון לאובייקטים שמועברים (--custom-storage-class).

  • התראות: הגדרה של התראות Pub/Sub להעברות באמצעות --notification-pubsub-topic, --notification-event-types ו---notification-payload-format.

  • Cloud Logging: הפעלת Cloud Logging להעברות ללא סוכן או להעברות ממקורות שתואמים ל-S3, באמצעות --log-actions ו---log-action-states. פרטים נוספים זמינים במאמר Cloud Logging for Storage Transfer Service.

ההעברות ממקורות שתואמים ל-S3 משתמשות גם באפשרויות הבאות:

  • --source-endpoint (חובה) מציין את נקודת הקצה של מערכת האחסון. לדוגמה, s3.example.com. כדאי לפנות לספק כדי לקבל את הפורמט הנכון. אל תציינו את הפרוטוקול (http:// או https://).
  • --source-signing-region מציין אזור לחתימה על בקשות. אם ספק שירותי האחסון לא דורש אזור חתימה, השמיטו את הדגל הזה.
  • --source-auth-method מציין את שיטת האימות שבה יש להשתמש. הערכים התקינים הם AWS_SIGNATURE_V2 או AWS_SIGNATURE_V4. מידע נוסף זמין במאמרי העזרה של אמזון בנושא SigV4 ו-SigV2.
  • --source-request-model מציין את סגנון הכתובת שבו יש להשתמש. הערכים המותרים הם PATH_STYLE או VIRTUAL_HOSTED_STYLE. הפורמט של סגנון הנתיב הוא https://s3.example.com/BUCKET_NAME/KEY_NAME. בפורמט של מארח וירטואלי משתמשים בכתובת `https://BUCKET_NAME.s3.example.com/KEY_NAME.
  • --source-network-protocol מציינת את פרוטוקול הרשת שסוכנים צריכים להשתמש בו עבור העבודה הזו. הערכים התקינים הם HTTP או HTTPS.
  • --source-list-api מציין את הגרסה של S3 listing API להחזרת אובייקטים מהקטגוריה. הערכים התקינים הם LIST_OBJECTS או LIST_OBJECTS_V2. מידע נוסף זמין במאמרי העזרה של Amazon בנושא ListObjectsV2 ו-ListObjects.

כדי לראות את כל האפשרויות, מריצים את הפקודה gcloud transfer jobs create --help או מעיינים במאמרי העזרה בנושא gcloud.

דוגמאות

‫Amazon S3 ל-Cloud Storage

העברה מ-Amazon S3 ל-Cloud Storage

אחסון שתואם ל-S3 ל-Cloud Storage

העברה מאחסון שתואם ל-S3 ל-Cloud Storage

ממערכת קבצים ל-Cloud Storage

העברה ממערכת קבצים ל-Cloud Storage

‫Cloud Storage למערכת קבצים

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

gcloud transfer jobs create \
  gs://my-storage-bucket posix:///tmp/destination \
  --destination-agent-pool=my-destination-agent-pool

ממערכת קבצים למערכת קבצים

כדי להעביר נתונים בין שתי מערכות קבצים, צריך לציין מאגר סוכנים של המקור, מאגר סוכנים של היעד וקטגוריה של Cloud Storage שמשמשת כשלב ביניים להעברת הנתונים.

פרטים על הקטגוריה הזמנית מופיעים במאמר בנושא יצירת קטגוריה של Cloud Storage כקטגוריה זמנית.

לאחר מכן, מציינים את 3 המשאבים האלה כשקוראים ל-transfer jobs create:

gcloud transfer jobs create \
  posix:///tmp/source/on/systemA posix:///tmp/destination/on/systemB \
  --source-agent-pool=source_agent_pool \
  --destination-agent-pool=destination_agent_pool \
  --intermediate-storage-path=gs://my-intermediary-bucket

REST

בדוגמאות הבאות מוסבר איך להשתמש ב-Storage Transfer Service באמצעות REST API.

כשמגדירים או עורכים משימות העברה באמצעות Storage Transfer Service API, צריך לציין את השעה ב-UTC. מידע נוסף על הגדרת לוח הזמנים של עבודת העברה זמין במאמר בנושא תזמון.

העברה בין קטגוריות של Cloud Storage

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

בקשה באמצעות transferJobs create:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  "description": "YOUR DESCRIPTION",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "schedule": {
      "scheduleStartDate": {
          "day": 1,
          "month": 1,
          "year": 2015
      },
      "startTimeOfDay": {
          "hours": 1,
          "minutes": 1
      }
  },
  "transferSpec": {
      "gcsDataSource": {
          "bucketName": "GCS_SOURCE_NAME"
      },
      "gcsDataSink": {
          "bucketName": "GCS_SINK_NAME"
      },
      "transferOptions": {
          "deleteObjectsFromSourceAfterTransfer": true
      }
  }
}
תשובה:
200 OK
{
  "transferJob": [
      {
          "creationTime": "2015-01-01T01:01:00.000000000Z",
          "description": "YOUR DESCRIPTION",
          "name": "transferJobs/JOB_ID",
          "status": "ENABLED",
          "lastModificationTime": "2015-01-01T01:01:00.000000000Z",
          "projectId": "PROJECT_ID",
          "schedule": {
              "scheduleStartDate": {
                  "day": 1,
                  "month": 1,
                  "year": 2015
              },
              "startTimeOfDay": {
                  "hours": 1,
                  "minutes": 1
              }
          },
          "transferSpec": {
              "gcsDataSource": {
                  "bucketName": "GCS_SOURCE_NAME",
              },
              "gcsDataSink": {
                  "bucketName": "GCS_NEARLINE_SINK_NAME"
              },
              "objectConditions": {
                  "minTimeElapsedSinceLastModification": "2592000.000s"
              },
              "transferOptions": {
                  "deleteObjectsFromSourceAfterTransfer": true
              }
          }
      }
  ]
}

העברה מ-Amazon S3 ל-Cloud Storage

העברה מ-Amazon S3 ל-Cloud Storage

העברה בין Microsoft Azure Blob Storage לבין Cloud Storage

בדוגמה הזו נסביר איך להעביר קבצים מ-Microsoft Azure Storage לקטגוריה של Cloud Storage באמצעות אסימון חתימת גישה משותפת (SAS) של Microsoft Azure Storage.

מידע נוסף על Microsoft Azure Storage SAS זמין במאמר Grant limited access to Azure Storage resources using shared access signatures (SAS) (מתן גישה מוגבלת למשאבי Azure Storage באמצעות חתימות של גישה משותפת (SAS)).

לפני שמתחילים, כדאי לעיין במאמרים הגדרת גישה ל-Microsoft Azure Storage ותמחור כדי להבין את ההשלכות של העברת נתונים מ-Microsoft Azure Storage ל-Cloud Storage.

בקשה באמצעות transferJobs create:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  "description": "YOUR DESCRIPTION",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "schedule": {
      "scheduleStartDate": {
          "day": 14,
          "month": 2,
          "year": 2020
      },
      "scheduleEndDate": {
          "day": 14
          "month": 2,
          "year": 2020
      },
      "startTimeOfDay": {
          "hours": 1,
          "minutes": 1
      }
  },
  "transferSpec": {
      "azureBlobStorageDataSource": {
          "storageAccount": "AZURE_SOURCE_NAME",
          "azureCredentials": {
              "sasToken": "AZURE_SAS_TOKEN",
          },
          "container": "AZURE_CONTAINER",
      },
      "gcsDataSink": {
          "bucketName": "GCS_SINK_NAME"
      }
  }
}
תשובה:
200 OK
{
  "transferJob": [
      {
          "creationTime": "2020-02-14T01:01:00.000000000Z",
          "description": "YOUR DESCRIPTION",
          "name": "transferJobs/JOB_ID",
          "status": "ENABLED",
          "lastModificationTime": "2020-02-14T01:01:00.000000000Z",
          "projectId": "PROJECT_ID",
          "schedule": {
              "scheduleStartDate": {
                  "day": 14
                  "month": 2,
                  "year": 2020
              },
              "scheduleEndDate": {
                  "day": 14,
                  "month": 2,
                  "year": 2020
              },
              "startTimeOfDay": {
                  "hours": 1,
                  "minutes": 1
              }
          },
          "transferSpec": {
              "azureBlobStorageDataSource": {
                  "storageAccount": "AZURE_SOURCE_NAME",
                  "azureCredentials": {
                      "sasToken": "AZURE_SAS_TOKEN",
                  },
                  "container": "AZURE_CONTAINER",
              },
              "objectConditions": {},
              "transferOptions": {}
          }
      }
  ]
}

העברה ממערכת קבצים

העברה ממערכת קבצים ל-Cloud Storage

ספריות לקוח

בדוגמאות הבאות מוצגות דרכים לשימוש ב-Storage Transfer Service באופן פרוגרמטי באמצעות Go,‏ Java,‏ Node.js ו-Python.

כשמגדירים או עורכים משימות העברה באופן פרוגרמטי, צריך לציין את השעה ב-UTC. מידע נוסף על הגדרת לוח הזמנים של עבודת העברה זמין במאמר בנושא תזמון.

מידע נוסף על ספריות הלקוח של Storage Transfer Service זמין במאמר תחילת העבודה עם ספריות הלקוח של Storage Transfer Service.

העברה בין קטגוריות של Cloud Storage

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

המשך

import (
	"context"
	"fmt"
	"io"
	"time"

	"google.golang.org/genproto/googleapis/type/date"
	"google.golang.org/genproto/googleapis/type/timeofday"
	"google.golang.org/protobuf/types/known/durationpb"

	storagetransfer "cloud.google.com/go/storagetransfer/apiv1"
	"cloud.google.com/go/storagetransfer/apiv1/storagetransferpb"
)

func transferToNearline(w io.Writer, projectID string, gcsSourceBucket string, gcsNearlineSinkBucket string) (*storagetransferpb.TransferJob, error) {
	// Your Google Cloud Project ID
	// projectID := "my-project-id"

	// The name of the GCS bucket to transfer objects from
	// gcsSourceBucket := "my-source-bucket"

	// The name of the Nearline GCS bucket to transfer objects to
	// gcsNearlineSinkBucket := "my-sink-bucket"

	ctx := context.Background()
	client, err := storagetransfer.NewClient(ctx)
	if err != nil {
		return nil, fmt.Errorf("storagetransfer.NewClient: %w", err)
	}
	defer client.Close()

	// A description of this job
	jobDescription := "Transfers objects that haven't been modified in 30 days to a Nearline bucket"

	// The time to start the transfer
	startTime := time.Now().UTC()

	req := &storagetransferpb.CreateTransferJobRequest{
		TransferJob: &storagetransferpb.TransferJob{
			ProjectId:   projectID,
			Description: jobDescription,
			TransferSpec: &storagetransferpb.TransferSpec{
				DataSink: &storagetransferpb.TransferSpec_GcsDataSink{
					GcsDataSink: &storagetransferpb.GcsData{BucketName: gcsNearlineSinkBucket}},
				DataSource: &storagetransferpb.TransferSpec_GcsDataSource{
					GcsDataSource: &storagetransferpb.GcsData{BucketName: gcsSourceBucket},
				},
				ObjectConditions: &storagetransferpb.ObjectConditions{
					MinTimeElapsedSinceLastModification: &durationpb.Duration{Seconds: 2592000 /*30 days */},
				},
				TransferOptions: &storagetransferpb.TransferOptions{DeleteObjectsFromSourceAfterTransfer: true},
			},
			Schedule: &storagetransferpb.Schedule{
				ScheduleStartDate: &date.Date{
					Year:  int32(startTime.Year()),
					Month: int32(startTime.Month()),
					Day:   int32(startTime.Day()),
				},
				ScheduleEndDate: &date.Date{
					Year:  int32(startTime.Year()),
					Month: int32(startTime.Month()),
					Day:   int32(startTime.Day()),
				},
				StartTimeOfDay: &timeofday.TimeOfDay{
					Hours:   int32(startTime.Hour()),
					Minutes: int32(startTime.Minute()),
					Seconds: int32(startTime.Second()),
				},
			},
			Status: storagetransferpb.TransferJob_ENABLED,
		},
	}
	resp, err := client.CreateTransferJob(ctx, req)
	if err != nil {
		return nil, fmt.Errorf("failed to create transfer job: %w", err)
	}
	if _, err = client.RunTransferJob(ctx, &storagetransferpb.RunTransferJobRequest{
		ProjectId: projectID,
		JobName:   resp.Name,
	}); err != nil {
		return nil, fmt.Errorf("failed to run transfer job: %w", err)
	}
	fmt.Fprintf(w, "Created and ran transfer job from %v to %v with name %v", gcsSourceBucket, gcsNearlineSinkBucket, resp.Name)
	return resp, nil
}

Java

מחפשים דוגמאות ישנות יותר? מדריך להעברת נתונים באמצעות Storage Transfer Service

import com.google.protobuf.Duration;
import com.google.storagetransfer.v1.proto.StorageTransferServiceClient;
import com.google.storagetransfer.v1.proto.TransferProto.CreateTransferJobRequest;
import com.google.storagetransfer.v1.proto.TransferTypes.GcsData;
import com.google.storagetransfer.v1.proto.TransferTypes.ObjectConditions;
import com.google.storagetransfer.v1.proto.TransferTypes.Schedule;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferJob;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferJob.Status;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferOptions;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferSpec;
import com.google.type.Date;
import com.google.type.TimeOfDay;
import java.io.IOException;
import java.util.Calendar;

public class TransferToNearline {
  /**
   * Creates a one-off transfer job that transfers objects in a standard GCS bucket that are more
   * than 30 days old to a Nearline GCS bucket.
   */
  public static void transferToNearline(
      String projectId,
      String jobDescription,
      String gcsSourceBucket,
      String gcsNearlineSinkBucket,
      long startDateTime)
      throws IOException {

    // Your Google Cloud Project ID
    // String projectId = "your-project-id";

    // A short description of this job
    // String jobDescription = "Sample transfer job of old objects to a Nearline GCS bucket.";

    // The name of the source GCS bucket to transfer data from
    // String gcsSourceBucket = "your-gcs-source-bucket";

    // The name of the Nearline GCS bucket to transfer old objects to
    // String gcsSinkBucket = "your-nearline-gcs-bucket";

    // What day and time in UTC to start the transfer, expressed as an epoch date timestamp.
    // If this is in the past relative to when the job is created, it will run the next day.
    // long startDateTime =
    //     new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2000-01-01 00:00:00").getTime();

    // Parse epoch timestamp into the model classes
    Calendar startCalendar = Calendar.getInstance();
    startCalendar.setTimeInMillis(startDateTime);
    // Note that this is a Date from the model class package, not a java.util.Date
    Date date =
        Date.newBuilder()
            .setYear(startCalendar.get(Calendar.YEAR))
            .setMonth(startCalendar.get(Calendar.MONTH) + 1)
            .setDay(startCalendar.get(Calendar.DAY_OF_MONTH))
            .build();
    TimeOfDay time =
        TimeOfDay.newBuilder()
            .setHours(startCalendar.get(Calendar.HOUR_OF_DAY))
            .setMinutes(startCalendar.get(Calendar.MINUTE))
            .setSeconds(startCalendar.get(Calendar.SECOND))
            .build();

    TransferJob transferJob =
        TransferJob.newBuilder()
            .setDescription(jobDescription)
            .setProjectId(projectId)
            .setTransferSpec(
                TransferSpec.newBuilder()
                    .setGcsDataSource(GcsData.newBuilder().setBucketName(gcsSourceBucket))
                    .setGcsDataSink(GcsData.newBuilder().setBucketName(gcsNearlineSinkBucket))
                    .setObjectConditions(
                        ObjectConditions.newBuilder()
                            .setMinTimeElapsedSinceLastModification(
                                Duration.newBuilder().setSeconds(2592000 /* 30 days */)))
                    .setTransferOptions(
                        TransferOptions.newBuilder().setDeleteObjectsFromSourceAfterTransfer(true)))
            .setSchedule(Schedule.newBuilder().setScheduleStartDate(date).setStartTimeOfDay(time))
            .setStatus(Status.ENABLED)
            .build();

    // Create a Transfer Service client
    StorageTransferServiceClient storageTransfer = StorageTransferServiceClient.create();

    // Create the transfer job
    TransferJob response =
        storageTransfer.createTransferJob(
            CreateTransferJobRequest.newBuilder().setTransferJob(transferJob).build());

    System.out.println("Created transfer job from standard bucket to Nearline bucket:");
    System.out.println(response.toString());
  }
}

Node.js


// Imports the Google Cloud client library
const {
  StorageTransferServiceClient,
} = require('@google-cloud/storage-transfer');

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// The ID of the Google Cloud Platform Project that owns the job
// projectId = 'my-project-id'

// A useful description for your transfer job
// description = 'My transfer job'

// Google Cloud Storage source bucket name
// gcsSourceBucket = 'my-gcs-source-bucket'

// Google Cloud Storage destination bucket name
// gcsSinkBucket = 'my-gcs-destination-bucket'

// Date to start daily migration
// startDate = new Date()

// Creates a client
const client = new StorageTransferServiceClient();

/**
 * Create a daily migration from a GCS bucket to another GCS bucket for
 * objects untouched for 30+ days.
 */
async function createDailyNearline30DayMigration() {
  // Runs the request and creates the job
  const [transferJob] = await client.createTransferJob({
    transferJob: {
      projectId,
      description,
      status: 'ENABLED',
      schedule: {
        scheduleStartDate: {
          day: startDate.getDate(),
          month: startDate.getMonth() + 1,
          year: startDate.getFullYear(),
        },
      },
      transferSpec: {
        gcsDataSource: {
          bucketName: gcsSourceBucket,
        },
        gcsDataSink: {
          bucketName: gcsSinkBucket,
        },
        objectConditions: {
          minTimeElapsedSinceLastModification: {
            seconds: 2592000, // 30 days
          },
        },
        transferOptions: {
          deleteObjectsFromSourceAfterTransfer: true,
        },
      },
    },
  });

  console.log(`Created transferJob: ${transferJob.name}`);
}

createDailyNearline30DayMigration();

Python

מחפשים דוגמאות ישנות יותר? מדריך להעברת נתונים באמצעות Storage Transfer Service

from datetime import datetime

from google.cloud import storage_transfer
from google.protobuf.duration_pb2 import Duration


def create_daily_nearline_30_day_migration(
    project_id: str,
    description: str,
    source_bucket: str,
    sink_bucket: str,
    start_date: datetime,
):
    """Create a daily migration from a GCS bucket to a Nearline GCS bucket
    for objects untouched for 30 days."""

    client = storage_transfer.StorageTransferServiceClient()

    # The ID of the Google Cloud Platform Project that owns the job
    # project_id = 'my-project-id'

    # A useful description for your transfer job
    # description = 'My transfer job'

    # Google Cloud Storage source bucket name
    # source_bucket = 'my-gcs-source-bucket'

    # Google Cloud Storage destination bucket name
    # sink_bucket = 'my-gcs-destination-bucket'

    transfer_job_request = storage_transfer.CreateTransferJobRequest(
        {
            "transfer_job": {
                "project_id": project_id,
                "description": description,
                "status": storage_transfer.TransferJob.Status.ENABLED,
                "schedule": {
                    "schedule_start_date": {
                        "day": start_date.day,
                        "month": start_date.month,
                        "year": start_date.year,
                    }
                },
                "transfer_spec": {
                    "gcs_data_source": {
                        "bucket_name": source_bucket,
                    },
                    "gcs_data_sink": {
                        "bucket_name": sink_bucket,
                    },
                    "object_conditions": {
                        "min_time_elapsed_since_last_modification": Duration(
                            seconds=2592000  # 30 days
                        )
                    },
                    "transfer_options": {
                        "delete_objects_from_source_after_transfer": True
                    },
                },
            }
        }
    )

    result = client.create_transfer_job(transfer_job_request)
    print(f"Created transferJob: {result.name}")

העברה מ-Amazon S3 ל-Cloud Storage

העברה מ-Amazon S3 ל-Cloud Storage

העברה בין Microsoft Azure Blob Storage לבין Cloud Storage

בדוגמה הזו נסביר איך להעביר קבצים מ-Microsoft Azure Storage לקטגוריה של Cloud Storage באמצעות אסימון חתימת גישה משותפת (SAS) של Microsoft Azure Storage.

מידע נוסף על Microsoft Azure Storage SAS זמין במאמר Grant limited access to Azure Storage resources using shared access signatures (SAS) (מתן גישה מוגבלת למשאבי Azure Storage באמצעות חתימות של גישה משותפת (SAS)).

לפני שמתחילים, כדאי לעיין במאמרים הגדרת גישה ל-Microsoft Azure Storage ותמחור כדי להבין את ההשלכות של העברת נתונים מ-Microsoft Azure Storage ל-Cloud Storage.

Go

מידע על התקנת ספריית הלקוח של Storage Transfer Service והשימוש בה מופיע במאמר ספריות הלקוח של Storage Transfer Service. למידע נוסף, קראו את מאמרי העזרה של Storage Transfer Service Go API.

כדי לבצע אימות ב-Storage Transfer Service, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.

import (
	"context"
	"fmt"
	"io"
	"os"

	storagetransfer "cloud.google.com/go/storagetransfer/apiv1"
	"cloud.google.com/go/storagetransfer/apiv1/storagetransferpb"
)

func transferFromAzure(w io.Writer, projectID string, azureStorageAccountName string, azureSourceContainer string, gcsSinkBucket string) (*storagetransferpb.TransferJob, error) {
	// Your Google Cloud Project ID.
	// projectID := "my-project-id"

	// The name of your Azure Storage account.
	// azureStorageAccountName := "my-azure-storage-acc"

	// The name of the Azure container to transfer objects from.
	// azureSourceContainer := "my-source-container"

	// The name of the GCS bucket to transfer objects to.
	// gcsSinkBucket := "my-sink-bucket"

	ctx := context.Background()
	client, err := storagetransfer.NewClient(ctx)
	if err != nil {
		return nil, fmt.Errorf("storagetransfer.NewClient: %w", err)
	}
	defer client.Close()

	// The Azure SAS token, should be accessed via environment variable for security
	azureSasToken := os.Getenv("AZURE_SAS_TOKEN")

	req := &storagetransferpb.CreateTransferJobRequest{
		TransferJob: &storagetransferpb.TransferJob{
			ProjectId: projectID,
			TransferSpec: &storagetransferpb.TransferSpec{
				DataSource: &storagetransferpb.TransferSpec_AzureBlobStorageDataSource{
					AzureBlobStorageDataSource: &storagetransferpb.AzureBlobStorageData{
						StorageAccount: azureStorageAccountName,
						AzureCredentials: &storagetransferpb.AzureCredentials{
							SasToken: azureSasToken,
						},
						Container: azureSourceContainer,
					},
				},
				DataSink: &storagetransferpb.TransferSpec_GcsDataSink{
					GcsDataSink: &storagetransferpb.GcsData{BucketName: gcsSinkBucket}},
			},
			Status: storagetransferpb.TransferJob_ENABLED,
		},
	}
	resp, err := client.CreateTransferJob(ctx, req)
	if err != nil {
		return nil, fmt.Errorf("failed to create transfer job: %w", err)
	}
	if _, err = client.RunTransferJob(ctx, &storagetransferpb.RunTransferJobRequest{
		ProjectId: projectID,
		JobName:   resp.Name,
	}); err != nil {
		return nil, fmt.Errorf("failed to run transfer job: %w", err)
	}
	fmt.Fprintf(w, "Created and ran transfer job from %v to %v with name %v", azureSourceContainer, gcsSinkBucket, resp.Name)
	return resp, nil
}

Java

מידע על התקנת ספריית הלקוח של Storage Transfer Service והשימוש בה מופיע במאמר ספריות הלקוח של Storage Transfer Service. למידע נוסף, קראו את מאמרי העזרה של Storage Transfer Service Java API.

כדי לבצע אימות ב-Storage Transfer Service, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.

import com.google.storagetransfer.v1.proto.StorageTransferServiceClient;
import com.google.storagetransfer.v1.proto.TransferProto;
import com.google.storagetransfer.v1.proto.TransferProto.RunTransferJobRequest;
import com.google.storagetransfer.v1.proto.TransferTypes.AzureBlobStorageData;
import com.google.storagetransfer.v1.proto.TransferTypes.AzureCredentials;
import com.google.storagetransfer.v1.proto.TransferTypes.GcsData;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferJob;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferJob.Status;
import com.google.storagetransfer.v1.proto.TransferTypes.TransferSpec;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

public class TransferFromAzure {
  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException {
    // TODO(developer): Replace these variables before running the sample.
    // Your Google Cloud Project ID
    String projectId = "my-project-id";

    // Your Azure Storage Account name
    String azureStorageAccount = "my-azure-account";

    // The Azure source container to transfer data from
    String azureSourceContainer = "my-source-container";

    // The GCS bucket to transfer data to
    String gcsSinkBucket = "my-sink-bucket";

    transferFromAzureBlobStorage(
        projectId, azureStorageAccount, azureSourceContainer, gcsSinkBucket);
  }

  /**
   * Creates and runs a transfer job to transfer all data from an Azure container to a GCS bucket.
   */
  public static void transferFromAzureBlobStorage(
      String projectId,
      String azureStorageAccount,
      String azureSourceContainer,
      String gcsSinkBucket)
      throws IOException, ExecutionException, InterruptedException {

    // Your Azure SAS token, should be accessed via environment variable
    String azureSasToken = System.getenv("AZURE_SAS_TOKEN");

    TransferSpec transferSpec =
        TransferSpec.newBuilder()
            .setAzureBlobStorageDataSource(
                AzureBlobStorageData.newBuilder()
                    .setAzureCredentials(
                        AzureCredentials.newBuilder().setSasToken(azureSasToken).build())
                    .setContainer(azureSourceContainer)
                    .setStorageAccount(azureStorageAccount))
            .setGcsDataSink(GcsData.newBuilder().setBucketName(gcsSinkBucket).build())
            .build();

    TransferJob transferJob =
        TransferJob.newBuilder()
            .setProjectId(projectId)
            .setStatus(Status.ENABLED)
            .setTransferSpec(transferSpec)
            .build();

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources,
    // or use "try-with-close" statement to do this automatically.
    try (StorageTransferServiceClient storageTransfer = StorageTransferServiceClient.create()) {
      // Create the transfer job
      TransferJob response =
          storageTransfer.createTransferJob(
              TransferProto.CreateTransferJobRequest.newBuilder()
                  .setTransferJob(transferJob)
                  .build());

      // Run the created job
      storageTransfer
          .runTransferJobAsync(
              RunTransferJobRequest.newBuilder()
                  .setProjectId(projectId)
                  .setJobName(response.getName())
                  .build())
          .get();

      System.out.println(
          "Created and ran a transfer job from "
              + azureSourceContainer
              + " to "
              + gcsSinkBucket
              + " with "
              + "name "
              + response.getName());
    }
  }
}

Node.js

מידע על התקנת ספריית הלקוח של Storage Transfer Service והשימוש בה מופיע במאמר ספריות הלקוח של Storage Transfer Service. למידע נוסף, קראו את מאמרי העזרה של Storage Transfer Service Node.js API.

כדי לבצע אימות ב-Storage Transfer Service, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.


// Imports the Google Cloud client library
const {
  StorageTransferServiceClient,
} = require('@google-cloud/storage-transfer');

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// The ID of the Google Cloud Platform Project that owns the job
// projectId = 'my-project-id'

// A useful description for your transfer job
// description = 'My transfer job'

// Azure Storage Account name
// azureStorageAccount = 'accountname'

// Azure Storage Account name
// azureSourceContainer = 'my-azure-source-bucket'

// Azure Shared Access Signature token
// azureSASToken = '?sv=...'

// Google Cloud Storage destination bucket name
// gcsSinkBucket = 'my-gcs-destination-bucket'

// Creates a client
const client = new StorageTransferServiceClient();

/**
 * Creates a one-time transfer job from Azure Blob Storage to Google Cloud Storage.
 */
async function transferFromBlobStorage() {
  // Setting the start date and the end date as the same time creates a
  // one-time transfer
  const now = new Date();
  const oneTimeSchedule = {
    day: now.getDate(),
    month: now.getMonth() + 1,
    year: now.getFullYear(),
  };

  // Runs the request and creates the job
  const [transferJob] = await client.createTransferJob({
    transferJob: {
      projectId,
      description,
      status: 'ENABLED',
      schedule: {
        scheduleStartDate: oneTimeSchedule,
        scheduleEndDate: oneTimeSchedule,
      },
      transferSpec: {
        azureBlobStorageDataSource: {
          azureCredentials: {
            sasToken: azureSASToken,
          },
          container: azureSourceContainer,
          storageAccount: azureStorageAccount,
        },
        gcsDataSink: {
          bucketName: gcsSinkBucket,
        },
      },
    },
  });

  console.log(
    `Created and ran a transfer job from '${azureSourceContainer}' to '${gcsSinkBucket}' with name ${transferJob.name}`
  );
}

transferFromBlobStorage();

Python

מידע על התקנת ספריית הלקוח של Storage Transfer Service והשימוש בה מופיע במאמר ספריות הלקוח של Storage Transfer Service. למידע נוסף, קראו את מאמרי העזרה של Storage Transfer Service Python API.

כדי לבצע אימות ב-Storage Transfer Service, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.

from datetime import datetime

from google.cloud import storage_transfer


def create_one_time_azure_transfer(
    project_id: str,
    description: str,
    azure_storage_account: str,
    azure_sas_token: str,
    source_container: str,
    sink_bucket: str,
):
    """Creates a one-time transfer job from Azure Blob Storage to Google Cloud
    Storage."""

    # Initialize client that will be used to create storage transfer requests.
    # This client only needs to be created once, and can be reused for
    # multiple requests.
    client = storage_transfer.StorageTransferServiceClient()

    # The ID of the Google Cloud Platform Project that owns the job
    # project_id = 'my-project-id'

    # A useful description for your transfer job
    # description = 'My transfer job'

    # Azure Storage Account name
    # azure_storage_account = 'accountname'

    # Azure Shared Access Signature token
    # azure_sas_token = '?sv=...'

    # Azure Blob source container name
    # source_container = 'my-azure-source-bucket'

    # Google Cloud Storage destination bucket name
    # sink_bucket = 'my-gcs-destination-bucket'

    now = datetime.utcnow()
    # Setting the start date and the end date as
    # the same time creates a one-time transfer
    one_time_schedule = {"day": now.day, "month": now.month, "year": now.year}

    transfer_job_request = storage_transfer.CreateTransferJobRequest(
        {
            "transfer_job": {
                "project_id": project_id,
                "description": description,
                "status": storage_transfer.TransferJob.Status.ENABLED,
                "schedule": {
                    "schedule_start_date": one_time_schedule,
                    "schedule_end_date": one_time_schedule,
                },
                "transfer_spec": {
                    "azure_blob_storage_data_source": {
                        "storage_account": azure_storage_account,
                        "azure_credentials": {"sas_token": azure_sas_token},
                        "container": source_container,
                    },
                    "gcs_data_sink": {
                        "bucket_name": sink_bucket,
                    },
                },
            }
        }
    )

    result = client.create_transfer_job(transfer_job_request)
    print(f"Created transferJob: {result.name}")

העברה ממערכת קבצים

העברה ממערכת קבצים ל-Cloud Storage

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

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

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

אפשר לציין נתיבי מקור לכל מקורות הנתונים.

דוגמאות

ציון נתיב יעד בלבד

נניח שיש לכם קובץ בשם object.txt בתיקיית הבסיס של קטגוריה של Cloud Storage בשם bucketA.

אם מעבירים אל bucketB ומגדירים נתיב יעד בשם alpha/, הקובץ מועתק אל bucketB/alpha/object.txt.

ציון נתיבי מקור ונתיבי יעד

נניח שרוצים להעביר נתונים בין שתי קטגוריות של Cloud Storage:

  • קטגוריית מקור: bucketA עם הנתיב alpha/
  • באקט היעד: bucketB עם הנתיב bravo/

אובייקט ב-gs://bucketA/alpha/object מועבר אל gs://bucketB/bravo/object.

נתיב המקור alpha/ מוסר משם האובייקט, ונשאר רק object. נתיב היעד bravo/ מתווסף לפניו.

ציון נתיב מקור

כדי לציין נתיב מקור כשיוצרים העברה:

  • במסוף Google Cloud , מזינים את הנתיב בשדה Bucket or folder (קטגוריה או תיקייה).
  • כשמשתמשים ב-CLI של gcloud, מציינים את הנתיב כחלק מ-URI המקור. לדוגמה, gs://SOURCE_BUCKET/SOURCE_PATH/.
  • באמצעות ה-API בארכיטקטורת REST או ספריות הלקוח, מוסיפים שדה path למפרט של מקור הנתונים. לדוגמה, השדה gcsDataSource במפרט TransferSpec. העברות של מערכת קבצים משתמשות ב-rootDirectory במקום ב-path.

ציון נתיב יעד

כדי לציין נתיב יעד כשיוצרים העברה:

  • במסוף Google Cloud , מזינים את הנתיב בשדה Bucket or folder (קטגוריה או תיקייה).
  • כשמשתמשים ב-CLI של gcloud, מציינים את הנתיב כחלק מ-URI של היעד. לדוגמה, gs://DESTINATION_BUCKET/DESTINATION_PATH/.
  • באמצעות API בארכיטקטורת REST או ספריות לקוח, מוסיפים שדה path למפרט של מקור הנתונים. לדוגמה, השדה gcsDataSource או gcsDataSink במפרט TransferSpec. העברות של מערכת קבצים משתמשות ב-rootDirectory במקום ב-path.