שימוש בהקשרים של אובייקטים

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

בדף הזה מוסבר איך לצרף הקשרים לאובייקטים ב-Cloud Storage ואיך לנהל אותם.

קבלת התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות ליצירה ולניהול של הקשרים של אובייקטים, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים באובייקט:

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

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

ההרשאות הנדרשות

כדי ליצור ולנהל הקשרים של אובייקטים, נדרשות ההרשאות הבאות:

  • יצירת אובייקט עם הקשרים של האובייקט:
    • storage.objects.create
    • storage.objects.createContext
  • צירוף, עדכון ומחיקה של הקשרים של אובייקטים:
    • storage.objects.update
    • storage.objects.createContext
    • storage.objects.updateContext
    • storage.objects.deleteContext
  • הקשרים של הורדת אובייקט: storage.objects.dropContexts
  • הצגת ההקשרים של האובייקט:
    • storage.objects.get
    • storage.objects.list

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

דרישות למתן שמות לצמדי מפתח/ערך

גם המפתחות וגם הערכים של הקשרים המותאמים אישית צריכים לעמוד בדרישות הבאות:

  • האורך צריך להיות בין תו אחד ל-256 תווים, כולל.

  • חייב להתחיל בתו אלפאנומרי.

  • חייב להיות תו תקף בקידוד UTF-8. רוב התווים בתקן UTF-8 נתמכים, למעט התווים הבאים:

    • גרש (')

    • מירכאות כפולות (")

    • לוכסן הפוך (\)

    • קו נטוי (/)

צירוף הקשרים לאובייקטים חדשים

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

המסוף

  1. במסוף Google Cloud , נכנסים לדף Buckets של Cloud Storage.

    כניסה לדף Buckets

  2. העלאת האובייקט.

  3. פועלים לפי השלבים לצירוף הקשרים לאובייקט.

שורת הפקודה

כדי לצרף הקשרים כשמעלים אובייקטים באמצעות הפקודה gcloud storage cp, משתמשים בדגל --custom-contexts:

gcloud storage cp OBJECT_LOCATION gs://DESTINATION_BUCKET_NAME --custom-contexts=KEY=VALUE,...

כאשר:

  • OBJECT_LOCATION הוא הנתיב המקומי לאובייקט. לדוגמה, Desktop/employees.txt.
  • DESTINATION_BUCKET_NAME הוא שם הקטגוריה שאליה מעלים את האובייקט. לדוגמה, my-bucket.
  • KEY הוא מפתח ההקשר לצירוף לאובייקט. לדוגמה, Department. אפשר לציין כמה צמדים של מפתח/ערך ולהפריד ביניהם באמצעות פסיקים.
  • VALUE הוא הערך שרוצים לשייך למפתח ההקשר. לדוגמה, Human resources.

אפשר גם ליצור קובץ JSON שמכיל את ההקשרים שרוצים לצרף לאובייקטים, ולהשתמש בדגל --custom-contexts-file:

  {
    "KEY": {
      "value": "VALUE"
    },
    ...
  }

כאשר:

  • KEY הוא מפתח ההקשר לצירוף לאובייקט. לדוגמה, Department. אפשר לציין כמה צמדים של מפתח/ערך.
  • VALUE הוא הערך שרוצים לשייך למפתח ההקשר. לדוגמה, Human resources.

כדי לצרף הקשרים כשמעלים ספריות באמצעות הפקודה gcloud storage rsync, משתמשים בדגל --custom-contexts או בדגל --custom-contexts-file:

gcloud storage rsync DIRECTORY_LOCATION gs://DESTINATION_BUCKET_NAME --recursive --custom-contexts=KEY=VALUE,...

כאשר:

  • DIRECTORY_LOCATION הוא הנתיב המקומי לספרייה. לדוגמה, ~/my_directory.
  • DESTINATION_BUCKET_NAME הוא שם הקטגוריה שאליה מעלים את הספרייה. לדוגמה, my-bucket.
  • KEY הוא מפתח ההקשר לצירוף לאובייקטים. לדוגמה, Department. אפשר לציין כמה צמדים של מפתח/ערך ולהפריד ביניהם באמצעות פסיקים.
  • VALUE הוא הערך שרוצים לשייך למפתח ההקשר. לדוגמה, Human resources.

‫API בפורמט JSON

כדי לצרף הקשרים לאובייקטים כשמעלים אובייקטים חדשים, אפשר להשתמש בכל אחת מהשיטות הבאות:

כחלק מהמטא-נתונים של האובייקט בפורמט JSON, כוללים את השדה contexts:

  {
    "contexts": {
      "custom": {
        "KEY": {
          "value": "VALUE"
        },
        ...
      }
    }
  }

כאשר:

  • KEY הוא מפתח ההקשר לצירוף לאובייקט. לדוגמה, Department. אפשר לציין כמה צמדים של מפתח/ערך באובייקט custom.
  • VALUE הוא הערך שרוצים לשייך למפתח ההקשר. לדוגמה, Human resources.

צירוף הקשרים לאובייקט קיים או שינוי שלהם

אתם יכולים לצרף הקשרים חדשים לאובייקטים הקיימים שלכם בקטגוריות של Cloud Storage.

המסוף

  1. במסוף Google Cloud , נכנסים לדף Buckets של Cloud Storage.

    כניסה לדף Buckets

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

  3. עוברים לאובייקט ולוחצים על אפשרויות נוספות של האובייקט.

  4. לוחצים על עריכת ההקשרים.

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

    • הוספת הקשר אובייקט חדש:

      1. לוחצים על הוספת הקשר מותאם אישית.

      2. בשדות Object context key ו-Object context value, מזינים צמד חדש של מפתח וערך.

      3. לוחצים על סיום.

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

    • כדי לערוך הקשר של אובייקט:

      1. לוחצים על ההקשר של האובייקט.

      2. מעדכנים את השדה Object context key (מפתח הקשר של האובייקט), את השדה Object context value (ערך ההקשר של האובייקט) או את שניהם.

      3. לוחצים על סיום ואז על שמירה.

    • מחיקת הקשר של אובייקט:

      לוחצים על מחיקה ואז על שמירה.

שורת הפקודה

משתמשים בפקודה gcloud storage objects update:

gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME CUSTOM_CONTEXTS_FLAG

כאשר:

  • BUCKET_NAME הוא שם הקטגוריה שמכילה את האובייקט שרוצים לערוך את ההקשר שלו. לדוגמה, my-bucket.
  • OBJECT_NAME הוא שם האובייקט. לדוגמה, employees.txt.
  • CUSTOM_CONTEXTS_FLAG הוא אחד מהדגלים הבאים:

    • כדי להחליף את כל ההקשרים הקיימים, משתמשים בפקודה --custom-contexts=KEY=VALUE,... או בפקודה --custom-contexts-file=CUSTOM_CONTEXTS_FILE

      כאשר:

      • KEY הוא מפתח ההקשר לצירוף לאובייקט. לדוגמה, Department. אפשר לציין כמה צמדים של מפתח/ערך ולהפריד ביניהם באמצעות פסיקים.
      • VALUE הוא הערך שרוצים לשייך למפתח ההקשר. לדוגמה, Human resources.
      • CUSTOM_CONTEXTS_FILE הוא הנתיב לקובץ JSON או YAML שמכיל את ההקשרים שרוצים לצרף לאובייקט.
    • כדי למחוק את כל ההקשרים הקיימים, משתמשים בדגל --clear-custom-contexts.

    • כדי להוסיף, לשנות או למחוק הקשרים ספציפיים, משתמשים בשילוב של --update-custom-contexts=KEY=VALUE,... ו---remove-custom-contexts=KEY,...

      כאשר:

      • KEY הוא מפתח ההקשר שרוצים לצרף לאובייקט או למחוק ממנו. לדוגמה, Department.
      • VALUE הוא הערך שרוצים לשייך למפתח ההקשר שרוצים לצרף לאובייקט או למחוק ממנו. לדוגמה, Human resources.

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

Patching gs://my-bucket/employees.txt#1560574162144861...
  Completed 1

ספריות לקוח

Java

למידע נוסף, קראו את מאמרי העזרה של Cloud Storage Java API.

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


import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.BlobInfo.ObjectContexts;
import com.google.cloud.storage.BlobInfo.ObjectCustomContextPayload;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import com.google.common.collect.Maps;
import java.util.Map;

public class SetObjectContexts {
  public static void setObjectContexts(
      String projectId, String bucketName, String objectName, String key, String value)
      throws Exception {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of your GCS bucket
    // String bucketName = "your-unique-bucket-name";

    // The ID of your GCS object
    // String objectName = "your-object-name";

    // The context key-value you want to add
    // String key = "your-context-key";
    // String value = "your-context-value";

    try (Storage storage =
        StorageOptions.newBuilder().setProjectId(projectId).build().getService()) {
      BlobId blobId = BlobId.of(bucketName, objectName);
      Blob blob = storage.get(blobId);
      if (blob == null) {
        System.out.println("The object " + objectName + " was not found in " + bucketName);
        return;
      }

      // Recommended: Set a generation-match precondition to avoid potential race
      // conditions and data corruptions. The request to update returns a 412 error if
      // the object's generation number does not match your precondition.
      Storage.BlobTargetOption precondition = Storage.BlobTargetOption.generationMatch();

      // This section demonstrates how to upsert, delete all, and delete a specific context.

      // To upsert a context (if the key already exists, its value is replaced;
      // otherwise, a new key-value pair is added):
      ObjectCustomContextPayload payload =
          ObjectCustomContextPayload.newBuilder().setValue(value).build();
      Map<String, ObjectCustomContextPayload> custom = Maps.newHashMap();
      custom.put(key, payload);
      ObjectContexts contexts = ObjectContexts.newBuilder().setCustom(custom).build();

      /*
       * To delete all existing contexts:
       * ObjectContexts contexts = ObjectContexts.newBuilder().setCustom(null).build();
       */

      /*
       * To delete a specific key from the context:
       * Map<String, ObjectCustomContextPayload> custom = Maps.newHashMap();
       * custom.put(key, null);
       * ObjectContexts contexts = ObjectContexts.newBuilder().setCustom(custom).build();
       */
      BlobInfo pendingUpdate =