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

בדף הזה מוסבר איך ליצור ולהתחיל עבודות העברה מ-Amazon S3 ל-Cloud Storage.

הגדרת ההרשאות

לפני שיוצרים העברה, צריך להגדיר הרשאות בקטגוריית Amazon S3. פרטים נוספים זמינים במאמר הגדרת גישה למקור: Amazon S3.

צריך גם להגדיר הרשאות לישויות הבאות ב-Google Cloud:

חשבון המשתמש שמשמש ליצירת ההעברה. זהו החשבון שמחוברים אליו במסוף Google Cloud או החשבון שמצוין כשמבצעים אימות ל-CLI של gcloud. חשבון המשתמש יכול להיות חשבון משתמש רגיל או חשבון שירות שמנוהל על ידי משתמש.
סוכן השירות שמשמש את Storage Transfer Service. בדרך כלל, החשבון הזה מזוהה באמצעות כתובת האימייל שלו, בפורמט project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.

הוראות מפורטות מופיעות במאמר הרשאות להעברה ללא סוכן.

אפשרויות של תעבורת נתונים יוצאת (egress)

שירות העברת הנתונים (Storage Transfer Service) מספק כמה אפשרויות להעברת נתונים מ-S3 ל-Cloud Storage.

אפשרות תעבורת נתונים יוצאת (egress) תיאור
ברירת מחדל ללא סוכן האפשרות הזו משתמשת בהעברה מנוהלת ללא סוכן מ-S3. אמזון מחייבת אתכם על תעבורת נתונים יוצאת.

כדי להשתמש באפשרות הזו, צריך לפעול לפי ההוראות שבדף הזה.
הפצה של CloudFront שימוש בהפצה של Amazon CloudFront כנתיב יציאה. העברת נתונים דרך CloudFront עשויה להוביל לעלויות נמוכות יותר של תעבורת נתונים יוצאת ב-AWS בהשוואה להעברה ישירה מ-S3. פרטים נוספים מופיעים במאמרים תמחור של CloudFront וחיובים על תעבורת נתונים יוצאת מ-S3.

פועלים לפי ההוראות במאמר העברה מ-S3 דרך CloudFront כדי להגדיר את ההפצה וליצור העברה.
רשת פרטית שמנוהלת על ידי Google העברת הנתונים ברשת שמנוהלת על ידי Google. לא תחויבו על תעבורת נתונים יוצאת מ-S3, אלא תשלמו ל-Google Cloud תעריף לכל ‎GiB, מה שעשוי להפחית את עלויות ההעברה. פרטים נוספים מופיעים בדף תמחור. יכול להיות שעדיין תחויבו על פעולות מ-AWS (לדוגמה, קריאות ל-LIST או ל-GET). פרטים נוספים זמינים בתמחור שלהם.

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

פרטים נוספים זמינים במאמר בנושא העברה דרך רשת פרטית שמנוהלת על ידי Google.
רשת פרטית בניהול הלקוח העברת הנתונים ברשת פרטית בניהול הלקוח. משתמשים ב-Cross-Cloud Interconnect, ב-Partner Interconnect או רוכשים חיבור חדש ומשתמשים בו. חיבורי Interconnect מספקים חיבור פיזי ייעודי בין Google Cloud לבין Amazon S3 או Azure.

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

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

אזורים נתמכים

‫Storage Transfer Service תומך באזורים הבאים של Amazon S3:
af-south-1
ap-east-1
ap-east-2
ap-northeast-1
ap-northeast-2
ap-northeast-3
ap-south-1
ap-south-2
ap-southeast-1
ap-southeast-2
ap-southeast-3
ap-southeast-4
ap-southeast-5
ca-central-1
ca-west-1
eu-central-1
eu-central-2
eu-north-1
eu-south-1
eu-south-2
eu-west-1
eu-west-2
eu-west-3
il-central-1
me-central-1
me-south-1
sa-east-1
us-east-1
us-east-2
us-west-1
us-west-2
us-gov-east-1
us-gov-west-1
העברות באמצעות הרשת הפרטית שמנוהלת על ידי Google תומכות באזורי AWS הבאים:
ap-east-1
ap-northeast-1
ap-northeast-2
ap-northeast-3
ap-south-1
ap-south-2
ap-southeast-1
ca-central-1
ca-west-1
eu-central-1
eu-central-2
eu-north-1
eu-south-1
eu-south-2
eu-west-1
eu-west-2
eu-west-3
us-east-1
us-east-2
us-west-1
us-west-2
 

אפשרויות העברה

התכונות הבאות של Storage Transfer Service זמינות להעברות מ-S3 ל-Cloud Storage

העברת קבצים ספציפיים באמצעות מניפסט
אפשר להעביר רשימה של קבצים ל-Storage Transfer Service כדי לבצע פעולות עליהם. פרטים נוספים מופיעים במאמר בנושא העברה של קבצים או אובייקטים ספציפיים באמצעות מניפסט.
סינון אובייקטים במקור לפי קידומת או לפי מועד השינוי האחרון

אתם יכולים לבחור אם לכלול או להחריג אובייקטים מההעברה על סמך שם הקובץ והנתיב, או על סמך זמן השינוי האחרון.

מסננים לפי תחילית מתוארים במאמר מסננים לפי תחילית.

מסננים שמבוססים על זמן כוללים:

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

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

  • במקום להשתמש במסננים שמבוססים על זמן, אפשר להשתמש בהעברות שמבוססות על אירועים כדי להעביר אובייקטים כשהם הופכים לזמינים.
  • כדי למנוע מצב שבו אובייקטים לא יועברו בהעברות חוזרות, חלון הזמן של 'השינוי האחרון' צריך להיות גדול יותר מהתזמון של ההעברה החוזרת. לדוגמה, אם משימה מופעלת כל שעה, חלון מבט לאחור של שעתיים מספק מאגר.
ציון סוג האחסון (storage class)
אתם יכולים לציין את סוג האחסון ב-Cloud Storage שבו ישתמשו עבור הנתונים שלכם בקטגוריית היעד. אפשר לעיין באפשרויות של StorageClass כדי לראות פרטים על REST, או להשתמש בדגל --custom-storage-class עם Google Cloud CLI.

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

שימור מטא-נתונים

כשמעבירים קבצים מ-S3, אפשר להגדיר ב-Storage Transfer Service לשמור מאפיינים מסוימים כמטא-נתונים מותאמים אישית.

בקטע Amazon S3 ל-Cloud Storage במאמר שמירה של מטא-נתונים מוסבר אילו מטא-נתונים אפשר לשמור ואיך להגדיר את ההעברה.

העברות מבוססות-אירועים
Storage Transfer Service יכול להאזין להתראות אירועים של Amazon S3 שנשלחות ל-Amazon SQS כדי להעביר אוטומטית נתונים שנוספו או עודכנו במיקום המקור. מידע נוסף זמין במאמר בנושא העברות מבוססות-אירועים.
רישום ביומן ומעקב
אפשר לראות העברות מ-S3 ב-Cloud Logging וב-Cloud Monitoring. פרטים נוספים זמינים במאמרים Cloud Logging for Storage Transfer Service ומעקב אחרי העברות. אפשר גם להגדיר התראות ב-Pub/Sub.

יצירת העברה

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

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

מסוף Google Cloud

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

    מעבר אל Storage Transfer Service

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

  3. בקטע סוג המקור, בוחרים באפשרות Amazon S3.

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

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

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

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

  7. בשדה Bucket or folder name, מזינים את שם קטגוריית המקור.

    שם ה-bucket הוא השם שמופיע במסוף הניהול של AWS.

  8. אם אתם משתמשים בהפצה של CloudFront כדי להעביר מ-S3, צריך להזין את שם הדומיין של ההפצה בשדה CloudFront domain. לדוגמה, https://dy1h2n3l4ob56.cloudfront.net. כדי להגדיר הפצה של CloudFront, אפשר לעיין במאמר העברה מ-S3 באמצעות CloudFront.

  9. בוחרים את שיטת האימות של Amazon Web Services ‏ (AWS). פרטים נוספים זמינים במאמר בנושא הגדרת גישה למקור: Amazon S3.

    • Secret resource: בוחרים באפשרות הזו כדי להשתמש בפרטי כניסה של Amazon שנשמרו ב-Secret Manager. בוחרים סוד מהרשימה או מזינים סוד באופן ידני בפורמט projects/PROJECT_NUMBER/secrets/SECRET_NAME.

    • מפתח גישה: מזינים את מפתח הגישה בשדה מזהה מפתח הגישה ואת הסוד שמשויך למפתח הגישה בשדה מפתח גישה סודי.

    • תפקיד AWS IAM לאיחוד שירותי אימות הזהות: מזינים את ה-ARN בשדה AWS IAM role ARN, עם התחביר הבא:

      • אזורים רגילים של AWS:

        arn:aws:iam::AWS_ACCOUNT:role/AWS_ROLE_NAME
      • אזורי AWS GovCloud:

        arn:aws-us-gov:iam::AWS_ACCOUNT:role/AWS_ROLE_NAME

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

      • AWS_ACCOUNT: מזהה החשבון ב-AWS ללא מקפים.
      • AWS_ROLE_NAME: שם התפקיד ב-AWS. אם בארגון שלכם משתמשים בנתיבים כדי לארגן את התפקידים, צריך לכלול את הנתיב עם שם התפקיד. לדוגמה, developers/transfer_user.

      מידע נוסף על מספרי ARN זמין במאמר מספרי ARN ב-IAM.

  10. אם מדובר בהעברה מבוססת-אירועים, מזינים את ה-ARN של תור Amazon SQS בפורמט הבא:

    • אזורים רגילים של AWS:

      arn:aws:sqs:us-east-1:1234567890:event-queue
    • אזורי AWS GovCloud:

      arn:aws-us-gov:sqs:us-gov-east-1:1234567890:event-queue
  11. אופציונלי, אפשר לסנן אובייקטים לפי קידומת או לפי תאריך השינוי האחרון. אם ציינתם תיקייה כמיקום המקור, מסנני הקידומת הם יחסיים לתיקייה הזו. לדוגמה, אם המקור הוא my-test-bucket/path/, מסנן include של file כולל את כל הקבצים שמתחילים ב-my-test-bucket/path/file.

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

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

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

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

    הערה: שירות העברת נתונים מאחסון מציג את לוחות הזמנים של העברות נתונים באזור הזמן המקומי שלכם, אבל הוא שומר את השעות האלה לפי זמן אוניברסלי מתואם (UTC). אם אתם מושפעים משעון קיץ (DST), יכול להיות שתחוו שינוי בלוח הזמנים של העברת נתונים כששעון הקיץ מתחיל או מסתיים.

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

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

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

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

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

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

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

  17. בוחרים את ההגדרות של עבודת ההעברה.

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

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

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

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

      • אף פעם: לא דורס קובץ יעד אם לקובץ המקור יש את אותו שם. המערכת מדלגת על קובץ המקור.
      • אם שונה: מחליף את קובצי היעד אם לקובץ המקור עם אותו שם יש ערכי ETag או סיכום ביקורת שונים.
      • תמיד: תמיד מחליף את קובצי היעד אם לקובץ המקור יש את אותו שם, גם אם הם זהים.
    5. בקטע When to delete (מתי למחוק), בוחרים באחת מהאפשרויות הבאות:

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

        חשוב: אם אין לכם גיבוי מקומי, הפעולה הזו היא בלתי הפיכה.

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

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

    6. בחירת אפשרויות ניתוב ברשת:

      • שימוש ברשת ציבורית: העברות נתונים דרך מסלולי פירינג סטנדרטיים באינטרנט הציבורי בין Amazon S3 ל-Google Cloud. כל פקודות ה-API, כותרות האימות וזרמי נתוני האובייקטים מוצפנים מקצה לקצה בזמן ההעברה באמצעות HTTPS עם Transport Layer Security ‏ (TLS 1.3).
      • שימוש ברשת פרטית מנוהלת: זרימת הנתונים עוברת דרך ניתוב פרטי מאובטח שמוקצה אוטומטית על ידי Google, מה שמפחית את עלויות תעבורת הנתונים היוצאת (egress) של AWS מהאינטרנט ועוקף את נקודות הקצה של האינטרנט הציבורי בלי לדרוש הגדרה של חיבור פיזי. אפשר לקרוא את המאמר בנושא העברה דרך רשת פרטית בניהול Google.
      • שימוש ברשת פרטית משלכם: הנתונים עוברים דרך תשתית קישוריות היברידית שהוגדרה מראש (כמו Cloud Interconnect,‏ Cloud VPN או AWS Direct Connect) באמצעות כתובות IP פרטיות. מידע נוסף זמין במאמר בנושא העברה דרך רשת פרטית בניהול הלקוח.
    7. בקטע אפשרויות רישום ביומן, בוחרים באפשרות הפעלת רישום ביומן ב-Cloud Logging אם רוצים ליצור רשומה מפורטת של הפעולות שבוצעו בכל קובץ שהועבר. חלים חיובים על Cloud Logging. פרטים נוספים זמינים במאמר בנושא פעולות העברת יומנים.

    8. אפשר גם לבחור באפשרות Get transfer operation status updates via Cloud Pub/Sub notifications (קבלת עדכונים על סטטוס פעולת ההעברה באמצעות התראות Cloud Pub/Sub), לבחור את נושא ה-Pub/Sub ולבחור אילו אירועים יפעילו התראות. פרטים נוספים מופיעים במאמר בנושא התראות Pub/Sub.

    9. בקטע Choose service account type (בחירת סוג חשבון שירות), בוחרים את הזהות שרוצים להשתמש בה:

      • סוכן השירות של Storage Transfer Service: סוכן השירות שמוגדר כברירת מחדל ומנוהל על ידי Google מקבל באופן אוטומטי גישה למאגרי המקור והיעד.
      • סוכן שירות שמנוהל על ידי משתמש: שימוש בחשבון שירות בהתאמה אישית שיצרתם. לפני שבוחרים באפשרות הזו, צריך לוודא שלחשבון השירות הוענקה גישה למאגר המקור, למאגר היעד ול-Pub/Sub. איך משתמשים בסוכן שירות שמנוהל על ידי משתמש
  18. לוחצים על Create (יצירה) כדי ליצור את עבודת ההעברה.

‫CLI של gcloud

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

ב-CLI של gcloud אין תמיכה בהעברות דרך CloudFront או רשת פרטית מנוהלת.

gcloud transfer jobs create \
  s3://S3_BUCKET_NAME gs://STORAGE_BUCKET_NAME \
  --source-creds-file="relative_path/to/creds.json"

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

  • S3_BUCKET_NAME הוא מקור הנתונים להעברה הזו. אפשר לכלול נתיב: s3://S3_BUCKET_NAME/S3_FOLDER_PATH

  • STORAGE_BUCKET_NAME היא הקטגוריה של Cloud Storage שאליה רוצים להעביר את הנתונים. כדי להעביר לספרייה ספציפית, מציינים את gs://STORAGE_BUCKET_NAME/STORAGE_FOLDER_PATH/, כולל לוכסן בסוף.

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

    {
      "accessKeyId": string,
      "secretAccessKey": string
    }

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

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

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

  • פרטי המשרה: אפשר לציין את --name ו--description.

  • תזמון: מציינים --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 באמצעות --log-actions ו---log-action-states. פרטים נוספים זמינים במאמר Cloud Logging for Storage Transfer Service.

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

REST

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

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

כשיוצרים עבודות העברה, לא כוללים את הקידומת s3:// עבור bucketName בשמות של קטגוריות מקור ב-Amazon S3.

העברה ללא סוכן

בדוגמה הבאה נוצרת משימת העברה באמצעות ההגדרה הרגילה ללא סוכן. פרטים נוספים זמינים במאמר בנושא transferJobs.create.

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  "description": "DESCRIPTION",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "transferSpec": {
      "awsS3DataSource": {
          "bucketName": "AWS_SOURCE_NAME",
          "awsAccessKey": {
            "accessKeyId": "AWS_ACCESS_KEY_ID",
            "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
          }
      },
      "gcsDataSink": {
          "bucketName": "GCS_SINK_NAME"
      }
  }
}

אפשרויות אימות אחרות מפורטות במאמר הגדרת גישה למקור: Amazon S3.

הפצה של CloudFront

אם אתם מעבירים מ-S3 דרך הפצה של CloudFront, צריך לציין את שם הדומיין של ההפצה כערך של השדה transferSpec.awsS3DataSource.cloudfrontDomain:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  "description": "DESCRIPTION",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "transferSpec": {
      "awsS3DataSource": {
          "bucketName": "AWS_SOURCE_NAME",
          "cloudfrontDomain": "https://dy1h2n3l4ob56.cloudfront.net",
          "awsAccessKey": {
            "accessKeyId": "AWS_ACCESS_KEY_ID",
            "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
          }
      },
      "gcsDataSink": {
          "bucketName": "GCS_SINK_NAME"
      }
  }
}

רשת פרטית מנוהלת

כדי להעביר מ-S3 באמצעות רשת פרטית שמנוהלת על ידי Google, מציינים את השדה transferSpec.awsS3DataSource.managedPrivateNetwork:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  "description": "DESCRIPTION",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "transferSpec": {
      "awsS3DataSource": {
          "bucketName": "AWS_SOURCE_NAME",
          "managedPrivateNetwork": TRUE,
          "awsAccessKey": {
            "accessKeyId": "AWS_ACCESS_KEY_ID",
            "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
          }
      },
      "gcsDataSink": {
          "bucketName": "GCS_SINK_NAME"
      }
  }
}

ספריות לקוח

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

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

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

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

בדוגמה הזו תלמדו איך להעביר קבצים מ-Amazon S3 לקטגוריה של Cloud Storage.

כשיוצרים עבודות העברה, לא כוללים את הקידומת s3:// עבור bucketName בשמות של קטגוריות מקור ב-Amazon S3.

ספריות הלקוח של Storage Transfer Service לא תומכות בהעברות דרך CloudFront או רשת פרטית מנוהלת.

המשך

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

	storagetransfer "cloud.google.com/go/storagetransfer/apiv1"
	"cloud.google.com/go/storagetransfer/apiv1/storagetransferpb"
	"google.golang.org/genproto/googleapis/type/date"
	"google.golang.org/genproto/googleapis/type/timeofday"
)

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

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

	// 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()

	// A description of this job
	jobDescription := "Transfers objects from an AWS bucket to a GCS bucket"

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

	// The AWS access key credential, should be accessed via environment variable for security
	awsAccessKeyID := os.Getenv("AWS_ACCESS_KEY_ID")

	// The AWS secret key credential, should be accessed via environment variable for security
	awsSecretKey := os.Getenv("AWS_SECRET_ACCESS_KEY")

	req := &storagetransferpb.CreateTransferJobRequest{
		TransferJob: &storagetransferpb.TransferJob{
			ProjectId:   projectID,
			Description: jobDescription,
			TransferSpec: &storagetransferpb.TransferSpec{
				DataSource: &storagetransferpb.TransferSpec_AwsS3DataSource{
					AwsS3DataSource: &storagetransferpb.AwsS3Data{
						BucketName: awsSourceBucket,
						AwsAccessKey: &storagetransferpb.AwsAccessKey{
							AccessKeyId:     awsAccessKeyID,
							SecretAccessKey: awsSecretKey,
						}},
				},
				DataSink: &storagetransferpb.TransferSpec_GcsDataSink{
					GcsDataSink: &storagetransferpb.GcsData{BucketName: gcsSinkBucket}},
			},
			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", awsSourceBucket, gcsSinkBucket, resp.Name)
	return resp, nil
}

Java

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


import com.google.storagetransfer.v1.proto.StorageTransferServiceClient;
import com.google.storagetransfer.v1.proto.TransferProto.CreateTransferJobRequest;
import com.google.storagetransfer.v1.proto.TransferTypes.AwsAccessKey;
import com.google.storagetransfer.v1.proto.TransferTypes.AwsS3Data;
import com.google.storagetransfer.v1.proto.TransferTypes.GcsData;
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.TransferSpec;
import com.google.type.Date;
import com.google.type.TimeOfDay;
import java.io.IOException;
import java.util.Calendar;

public class TransferFromAws {

  // Creates a one-off transfer job from Amazon S3 to Google Cloud Storage.
  public static void transferFromAws(
      String projectId,
      String jobDescription,
      String awsSourceBucket,
      String gcsSinkBucket,
      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 from S3 to GCS.";

    // The name of the source AWS bucket to transfer data from
    // String awsSourceBucket = "yourAwsSourceBucket";

    // The name of the GCS bucket to transfer data to
    // String gcsSinkBucket = "your-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();

    // The ID used to access your AWS account. Should be accessed via environment variable.
    String awsAccessKeyId = System.getenv("AWS_ACCESS_KEY_ID");

    // The Secret Key used to access your AWS account. Should be accessed via environment variable.
    String awsSecretAccessKey = System.getenv("AWS_SECRET_ACCESS_KEY");

    // Set up source and sink
    TransferSpec transferSpec =
        TransferSpec.newBuilder()
            .setAwsS3DataSource(
                AwsS3Data.newBuilder()
                    .setBucketName(awsSourceBucket)
                    .setAwsAccessKey(
                        AwsAccessKey.newBuilder()
                            .setAccessKeyId(awsAccessKeyId)
                            .setSecretAccessKey(awsSecretAccessKey)))
            .setGcsDataSink(GcsData.newBuilder().setBucketName(gcsSinkBucket))
            .build();

    // 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 startDate =
        Date.newBuilder()
            .setYear(startCalendar.get(Calendar.YEAR))
            .setMonth(startCalendar.get(Calendar.MONTH) + 1)
            .setDay(startCalendar.get(Calendar.DAY_OF_MONTH))
            .build();
    TimeOfDay startTime =
        TimeOfDay.newBuilder()
            .setHours(startCalendar.get(Calendar.HOUR_OF_DAY))
            .setMinutes(startCalendar.get(Calendar.MINUTE))
            .setSeconds(startCalendar.get(Calendar.SECOND))
            .build();
    Schedule schedule =
        Schedule.newBuilder()
            .setScheduleStartDate(startDate)
            .setScheduleEndDate(startDate)
            .setStartTimeOfDay(startTime)
            .build();

    // Set up the transfer job
    TransferJob transferJob =
        TransferJob.newBuilder()
            .setDescription(jobDescription)
            .setProjectId(projectId)
            .setTransferSpec(transferSpec)
            .setSchedule(schedule)
            .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 AWS to GCS:");
    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'

// AWS S3 source bucket name
// awsSourceBucket = 'my-s3-source-bucket'

// AWS Access Key ID
// awsAccessKeyId = 'AKIA...'

// AWS Secret Access Key
// awsSecretAccessKey = 'HEAoMK2.../...ku8'

// 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 Amazon S3 to Google Cloud Storage.
 */
async function transferFromS3() {
  // 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: {
        awsS3DataSource: {
          bucketName: awsSourceBucket,
          awsAccessKey: {
            accessKeyId: awsAccessKeyId,
            secretAccessKey: awsSecretAccessKey,
          },
        },
        gcsDataSink: {
          bucketName: gcsSinkBucket,
        },
      },
    },
  });

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

transferFromS3();

Python

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

from datetime import datetime

from google.cloud import storage_transfer


def create_one_time_aws_transfer(
    project_id: str,
    description: str,
    source_bucket: str,
    aws_access_key_id: str,
    aws_secret_access_key: str,
    sink_bucket: str,
):
    """Creates a one-time transfer job from Amazon S3 to Google Cloud
    Storage."""

    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'

    # AWS S3 source bucket name
    # source_bucket = 'my-s3-source-bucket'

    # AWS Access Key ID
    # aws_access_key_id = 'AKIA...'

    # AWS Secret Access Key
    # aws_secret_access_key = 'HEAoMK2.../...ku8'

    # 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": {
                    "aws_s3_data_source": {
                        "bucket_name": source_bucket,
                        "aws_access_key": {
                            "access_key_id": aws_access_key_id,
                            "secret_access_key": aws_secret_access_key,
                        },
                    },
                    "gcs_data_sink": {
                        "bucket_name": sink_bucket,
                    },
                },
            }
        }
    )

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