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

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

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

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

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

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

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

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

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

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

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

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

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

כדי להשתמש באפשרות הזו, פועלים לפי ההוראות שבדף הזה. מציינים את האפשרות Managed private network במסוף Google Cloud או את השדה managedPrivateNetwork ב-API בארכיטקטורת REST. ה-CLI של gcloud וספריות לקוח לא תומכים בהעברות של רשתות פרטיות מנוהלות. כאן אפשר לראות את האזורים הנתמכים.
רשת פרטית בניהול הלקוח העברת הנתונים ברשת פרטית בניהול הלקוח. שימוש ב-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-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
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
העברות באמצעות הרשת הפרטית המנוהלת תומכות באזורי 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)
אתם יכולים לציין את סוג האחסון (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. לדוגמה, https://dy1h2n3l4ob56.cloudfront.net. במאמר העברה מ-S3 באמצעות CloudFront מוסבר איך להגדיר הפצה של CloudFront.

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

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

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

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

      arn:aws:iam::ACCOUNT:role/ROLE-NAME-WITH-PATH
      

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

      • ACCOUNT: מזהה החשבון ב-AWS ללא מקפים.
      • ROLE-NAME-WITH-PATH: שם התפקיד ב-AWS, כולל הנתיב.

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

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

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

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

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

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

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

    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. בקטע Notification options, בוחרים את נושא ה-Pub/Sub ואת האירועים שרוצים לקבל עליהם התראות. מידע נוסף זמין במאמר התראות Pub/Sub.

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

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

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

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

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

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

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

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

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

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

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

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

    3. כדי ליצור את עבודת ההעברה, לוחצים על 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 ל-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 או רשת פרטית מנוהלת.

Go

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}")