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

gRPC היא מסגרת RPC אוניברסלית בקוד פתוח עם ביצועים גבוהים שפותחה על ידי Google. אפשר להשתמש בה כדי להגדיר את השירותים באמצעות Protocol Buffers. אפשר להשתמש ב-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 , צריך להשתמש בגרסאות שמצוינות ברשימת החומרים (BOM) של ספריותGoogle Cloud . כדי לעדכן את הפרויקט כך שישתמש ב-BOM, אפשר להשתמש באחת מהשיטות הבאות:

אחסון בענן עצמאי

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

Maven

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

בדוגמה הבאה אפשר לראות איך מייבאים את ה-BOM וכוללים את ארטיפקט 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 יחד עם ספריות אחרות, אתם צריכים להשתמש ב-BOM של ספריות הלקוח. Google Cloud Google Cloud

Maven

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

בדוגמה הבאה אפשר לראות איך מייבאים את ה-BOM וכוללים את ארטיפקט 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());
    }
  }
}

Go

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

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

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

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

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

יצירת לקוח gRPC

כדי להשתמש בלקוח, צריך לקרוא לבונה 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 מופיע במאמר gRPC API.

הגדרת 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 לא תומך בשיטות notifications,‏ hmacKeys ו-serviceAccount.

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

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

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

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

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