התחברות ל-Cloud Storage באמצעות gRPC

‫gRPC הוא מסגרת RPC אוניברסלית בקוד פתוח עם ביצועים גבוהים שפותחה על ידי Google. אפשר להשתמש בו כדי להגדיר את השירותים באמצעות מאגר אחסון לפרוטוקולים. אתם יכולים להשתמש ב-gRPC כדי לבצע פעולות ב-Cloud Storage. ב-gRPC נעשה שימוש בקישוריות ישירה בין מכונות Compute Engine לבין קטגוריות של Cloud Storage, תוך עקיפת ממשקי הקצה של Google ‏ (GFE).

אפשר להתחבר ל-Cloud Storage באמצעות gRPC דרך הלקוחות הנתמכים הבאים:

הפעלת gRPC בספריית לקוח

C++‎

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

  1. ודאו שהגרסאות הבאות מותקנות:

    • ‫gRPC מגרסה 1.65.1 ואילך

    • ספריית הלקוח C++‎ בגרסה v2.30.0 ואילך

    • ‫C++‎ בגרסה 14 ואילך

    הוראות להתקנה מופיעות במאמר הגדרת סביבת פיתוח בשפת C++‎.

  2. הגדרת אימות

  3. חשוב לוודא שלכל מכונה ב-Compute Engine מצורף חשבון שירות, גם אם אין לחשבון השירות הרשאות. חשבון השירות הזה משמש לייצוג של מופע Compute Engine בתהליך לחיצת היד של אבטחת שכבת התעבורה של אפליקציה (ALTS), והוא נדרש לקישוריות ישירה.

הגדרת ספריית הלקוח C++‎

  1. יצירת לקוח gRPC באמצעות gcs::MakeGrpcClient():

      namespace gcs = google::cloud::storage;
      void App() {
       auto client = gcs::MakeGrpcClient();
    
      // application code
    
      }
    

    ספריית הלקוח של C++‎ משתמשת אוטומטית בקישוריות ישירה כשהיא מזהה שהאפליקציה פועלת ב- Google Cloud.

  2. כדי להגדיר את ספריית הלקוח ב-C++‎ לשימוש ב-gRPC, צריך להפעיל את לקוח ה-gRPC של Cloud Storage כדי לעדכן את הגדרת מערכת ה-build ל-CMake או ל-Bazel.

    CMake

    1. הפעלת הפלאגין של לקוח gRPC של Cloud Storage בזמן הקימפול.

      cmake -DGOOGLE_CLOUD_CPP_ENABLE=storage_grpc [other options here]
      
    2. בבסיס הקוד, בפקודה target_link_libraries() מחליפים את google-cloud-cpp::storage ב-google-cloud-cpp::storage_grpc

      לדוגמה, בתוכנית למתחילים של gRPC משתמשים בקוד הבא:

      add_executable(quickstart_grpc quickstart_grpc.cc)
      target_link_libraries(quickstart_grpc google-cloud-cpp::storage_grpc)
      

    Bazel

    מחליפים את יחסי התלות מ-@google_cloud_cpp//:storage ל-@google_cloud_cpp//:storage_grpc.

    לדוגמה, בתוכנית למתחילים של gRPC משתמשים בקוד הבא:

      cc_binary(
          name = "quickstart",
          srcs = [
              "quickstart.cc",
          ],
          deps = [
              "@com_github_googleapis_google_cloud_cpp//:storage_grpc",
          ],
      )
    

Java

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

  1. ודאו שהגרסאות הבאות מותקנות:

    • ספריות לקוח של Java:

      • com.google.cloud:google-cloud-storage:2.43.1 או מאוחר יותר.
      • ‫com.google.cloud:libraries-bom:26.48 ואילך.
    • ‫Java 8 ואילך

    הוראות להתקנה מופיעות במאמר הגדרת סביבת פיתוח ב-Java.

  2. הגדרת אימות

  3. חשוב לוודא שלכל מכונה של Compute Engine מצורף חשבון שירות, גם אם אין לו הרשאות. חשבון השירות הזה משמש לייצוג של מופע Compute Engine בתהליך לחיצת היד של אבטחת שכבת התעבורה של אפליקציה (ALTS), והוא נדרש לקישוריות ישירה.

עדכון הפרויקט לשימוש ב-BOM

כדי לוודא שבפרויקטים שלכם יש גרסאות תואמות של ספריות הלקוח של Google Cloud , השתמשו בגרסאות שמצוינות בGoogle Cloud רשימת החומרים (BOM) של הספריות. כדי לעדכן את הפרויקט כך שישתמש ב-BOM, אפשר להשתמש בכל אחת מהשיטות הבאות:

‫Cloud Storage עצמאי

אם אתם משתמשים בספריית הלקוח של Cloud Storage באופן עצמאי (בלי ספריות אחרות שלGoogle Cloud ), השתמשו ב-BOM הספציפי לספריית הלקוח של Cloud Storage.

Maven

מייבאים את ה-BOM בקטע dependencyManagement של קובץ pom.xml.

בדוגמה הבאה אפשר לראות איך מייבאים את ה-BOM וכוללים את פריט המידע שנוצר בתהליך הפיתוח (artifact) של google-cloud-storage.

<dependencyManagement>
  <dependencies>
  <dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-storage-bom</artifactId>
   <version>2.43.1</version>
   <type>pom</type>
   <scope>import</scope>
  </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-storage</artifactId>
  </dependency>
</dependencies>

Gradle

מוסיפים תלות בפלטפורמה ב-com.google.cloud:google-cloud-storage-bom:

implementation platform('com.google.cloud:google-cloud-storage-bom:2.43.1')
implementation 'com.google.cloud:google-cloud-storage'

‫Cloud Storage עם ספריות אחרות של Google Cloud

אם אתם משתמשים בספריית הלקוח של Cloud Storage יחד עם ספריות אחרות Google Cloud , אתם צריכים להשתמש ב-BOM של ספריות הלקוח Google Cloud .

Maven

מייבאים את ה-BOM בקטע dependencyManagement של קובץ pom.xml.

בדוגמה הבאה אפשר לראות איך מייבאים את ה-BOM וכוללים את פריט המידע שנוצר בתהליך הפיתוח (Artifact) של libraries-bom.

<dependencyManagement>
  <dependencies>
  <dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>libraries-bom</artifactId>
   <version>26.48.0</version>
   <type>pom</type>
   <scope>import</scope>
  </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-storage</artifactId>
  </dependency>
</dependencies>

Gradle

הוספת תלות בפלטפורמה ב-com.google.cloud:libraries-bom:

implementation platform('com.google.cloud:libraries-bom:26.48.0')
implementation 'com.google.cloud:google-cloud-storage'

יצירת לקוח gRPC

בדוגמה הבאה נעשה שימוש בבונה שמתמקד ב-gRPC. לקוח gRPC Java משתמש באופן אוטומטי בקישוריות ישירה כשהוא מזהה שהאפליקציה פועלת ב- Google Cloud.

// Imports the Google Cloud client library
import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.BucketInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class QuickstartGrpcSample {
  public static void main(String... args) throws Exception {

    // Create an instance of options which will use the Google Cloud Storage gRPC API for all
    // operations
    StorageOptions options = StorageOptions.grpc().build();

    // Instantiates a client in a try-with-resource to automatically cleanup underlying resources
    try (Storage storage = options.getService()) {
      // The name for the new bucket
      String bucketName = args[0]; // "my-new-bucket";

      // Creates the new bucket using a request to the gRPC API
      Bucket bucket = storage.create(BucketInfo.of(bucketName));

      System.out.printf("Bucket %s created.%n", bucket.getName());
    }
  }
}

המשך

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

  1. הגדרת סביבת הפיתוח.

  2. חשוב להשתמש בגרסה 1.46.0 ואילך של ספריית הלקוח של Cloud Storage Go.

  3. הגדרת אימות

  4. חשוב לוודא שלכל מכונה של Compute Engine מצורף חשבון שירות, גם אם אין לו הרשאות. חשבון השירות הזה משמש לייצוג של מופע Compute Engine בתהליך לחיצת היד של אבטחת שכבת התעבורה של אפליקציה (ALTS), והוא נדרש לקישוריות ישירה.

יצירת לקוח gRPC

כדי להשתמש בלקוח, צריך להפעיל את ה-constructor‏ NewGRPCClient באפליקציה במקום NewClient.


// Sample storage-quickstart creates a Google Cloud Storage bucket using
// gRPC API.
package main

import (
	"context"
	"fmt"
	"log"
	"time"

	"cloud.google.com/go/storage"
)

func main() {
	ctx := context.Background()

	// Use your Google Cloud Platform project ID and Cloud Storage bucket
	projectID := "project-id"
	bucketName := "bucket-name"

	// Creates a gRPC enabled client.
	client, err := storage.NewGRPCClient(ctx)
	if err != nil {
		log.Fatalf("Failed to create client: %v", err)
	}
	defer client.Close()

	// Creates the new bucket.
	ctx, cancel := context.WithTimeout(ctx, time.Second*10)
	defer cancel()
	if err := client.Bucket(bucketName).Create(ctx, projectID, nil); err != nil {
		log.Fatalf("Failed to create bucket: %v", err)
	}

	fmt.Printf("Bucket %v created.\n", bucketName)
}

ספריית הלקוח של Go משתמשת באופן אוטומטי בקישוריות ישירה כשהיא מזהה שהאפליקציה פועלת ב- Google Cloud.

במאמר gRPC API מוסבר איך משתמשים בלקוח gRPC.

הגדרת VPC Service Controls

אם אתם משתמשים בענן וירטואלי פרטי עם כתובות IP וירטואליות מוגבלות (VPC Service Controls) כדי לשפר את האבטחה של הרשת, אתם צריכים לעדכן את כללי חומת האש כדי לאפשר קישוריות ישירה לביצועים אופטימליים בין מופע Compute Engine לבין קטגוריית Cloud Storage.

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

  • לתנועת IPv4: 34.126.0.0/18
  • לתנועת IPv6: 2001:4860:8040::/42

בנוסף לכללים הקודמים, שומרים את כלל רשימת ההיתרים הקיים עבור 199.36.153.4/30.

אם יש לכם הגבלות על שינויים בכללי חומת האש ואתם לא יכולים לעדכן אותם, אתם יכולים להשתמש ב-storage.googleapis.com כנקודת הקצה של Cloud Storage במקום ב-google-c2p://storage.googleapis.com כדי לאלץ את התנועה להימנע מקישוריות ישירה.

לדוגמה, ב-C++‎ משתמשים ב-.set<google::cloud::EndpointOption>(storage.googleapis.com) במקום ב-google-c2p:///storage.googleapis.com.

אתם יכולים להגדיר את ספריות הלקוח של Cloud Storage כך שייצרו מדדים שקשורים ל-gRPC ב-Cloud Monitoring. המדדים שקשורים ל-gRPC יכולים לעזור לכם:

  • מעקב אחרי הביצועים של בקשות gRPC ל-Cloud Storage ושיפור שלהם.

  • לפתור בעיות ולנפות באגים.

  • לקבל תובנות לגבי השימוש באפליקציה וההתנהגות שלה.

במאמר שימוש במדדים בצד הלקוח מוסבר איך ליצור מדדים שקשורים ל-gRPC.

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

מגבלות

  • אי אפשר לשלוח בקשות IPv6 דרך רשתות מדור קודם.

  • קישוריות ישירה לא נתמכת כשמשתמשים בגרסאות GKE הבאות באשכולות IPv4 בלבד:

    • ‫1.28, ‏‎1.28.0-gke.100 ואילך עד ‎1.28.5-gke.1199000
    • ‫1.27, ‏1.27.4-gke.1900 ואילך
    • ‫1.26, ‏1.26.10-gke.1238000 ואילך
    • ‫1.25, ‏ 1.25.15-gke.1045000 ואילך
  • ‫gRPC לא תומך ב-methods‏ notifications,‏ hmacKeys ו-serviceAccount.

  • אפשרויות של בנאי לקוח ספציפיות ל-HTTP, כמו WithHTTPClient, לא נתמכות בספריית הלקוח של Go.

  • ה-API של gRPC לא נתמך בנקודות קצה אזוריות.

פתרון בעיות בקישוריות ישירה

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

המאמרים הבאים