יצירת העברות

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

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

נציגים ומאגרי נציגים

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

  • העברות מ-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. בוחרים קטגוריה ותיקייה (אופציונלי) בקטגוריה הזו באחת מהדרכים הבאות:

      • מזינים את השם והנתיב של קטגוריה קיימת ב-Cloud Storage בשדה Bucket or folder (קטגוריה או תיקייה) בלי הקידומת 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 שנוצר ממדיניות גישה מאוחסנת. מידע נוסף זמין במאמר בנושא הענקת גישה מוגבלת למשאבי Azure Storage באמצעות חתימות של גישה משותפת (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. זה חייב להיות נתיב מוחלט מהשורש של המכונה המארחת של הסוכן.
    • HDFS: hdfs:///PATH
  • DESTINATION הוא אחד מהבאים:

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

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

  • --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 ל-Storage Transfer Service.

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

  • --source-endpoint (חובה) מציין את נקודת הקצה של מערכת האחסון. לדוגמה, s3.example.com. כדאי לפנות לספק כדי לקבל מידע על הפורמט הנכון. אל תציינו את הפרוטוקול (http:// או https://).
  • --source-signing-region מציין אזור לחתימה על בקשות. אם ספק שירותי האחסון לא דורש אזור חתימה, אפשר להשמיט את הדגל הזה.
  • --source-auth-method מציין את שיטת האימות שבה יש להשתמש. הערכים התקינים הם AWS_SIGNATURE_V2 או AWS_SIGNATURE_V4. מידע נוסף זמין במאמרי העזרה של Amazon בנושא 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).

לפני שמתחילים, כדאי לעיין במאמרים הגדרת גישה ל-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

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

נתיבי המקור והיעד מאפשרים לכם לציין ספריות מקור ויעד כשאתם מעבירים נתונים לקטגוריה של Cloud Storage. לדוגמה, נניח שיש לכם קבצים בשם file1.txt ו-file2.txt וקטגוריה של Cloud Storage בשם B. אם הגדרתם נתיב יעד בשם my-stuff, אחרי שההעברה תסתיים הקבצים ימוקמו בנתיבים gs://B/my-stuff/file1.txt ו-gs://B/my-stuff/file2.txt.

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

כדי לציין נתיב מקור כשיוצרים עבודת העברה, מוסיפים שדה path לשדה gcsDataSource במפרט TransferSpec:

{
gcsDataSource: {
  bucketName: "SOURCE_BUCKET",
  path: "SOURCE_PATH/",
},
}

בדוגמה הזו:

  • SOURCE_BUCKET: קטגוריית Cloud Storage של המקור.
  • SOURCE_PATH: נתיב המקור ב-Cloud Storage.

ציון נתיב יעד

כדי לציין תיקיית יעד כשיוצרים עבודת העברה, מוסיפים שדה path לשדה gcsDataSink במפרט TransferSpec:

{
gcsDataSink: {
  bucketName: "DESTINATION_BUCKET",
  path: "DESTINATION_PATH/",
},
}

בדוגמה הזו:

  • DESTINATION_BUCKET: קטגוריית היעד ב-Cloud Storage.
  • DESTINATION_PATH: נתיב היעד ב-Cloud Storage.

דוגמה מלאה לבקשה

דוגמה לבקשה מלאה:

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",
          "path": "GCS_SOURCE_PATH",
      },
      "gcsDataSink": {
          "bucketName": "GCS_SINK_NAME",
          "path": "GCS_SINK_PATH",
      },
      "objectConditions": {
          "minTimeElapsedSinceLastModification": "2592000s"
      },
      "transferOptions": {
          "deleteObjectsFromSourceAfterTransfer": true
      }
  }

}

ספריות לקוח

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

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

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

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

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

Go

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).

לפני שמתחילים, כדאי לעיין במאמרים הגדרת גישה ל-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