डेटाबेस से कनेक्ट करने और पुष्टि करने का तरीका

यह सिर्फ़ Cloud Firestore Enterprise वर्शन के लिए काम का है.

कनेक्शन से जुड़ी ज़रूरी शर्तें

MongoDB के साथ काम करने वाले क्लाइंट के लिए, Cloud Firestore का इस्तेमाल करने के लिए ये ज़रूरी हैं:

  • ड्राइवरों को load balanced मोड में कनेक्ट करना होगा. इससे ड्राइवर, उस सर्वर टोपोलॉजी को समझने की कोशिश नहीं करते जिससे वे कनेक्ट हो रहे हैं.
  • ड्राइवरों को एसएसएल चालू करके कनेक्ट करना होगा.
  • ड्राइवर को फिर से लिखने की सुविधा बंद करनी होगी. फ़िलहाल, MongoDB के साथ काम करने वाला Cloud Firestore, फिर से लिखने की सुविधा के साथ काम नहीं करता.

कनेक्शन स्ट्रिंग वापस पाना

डेटाबेस कनेक्शन स्ट्रिंग, डेटाबेस के यूआईडी, डेटाबेस की जगह, और पुष्टि करने के तरीके पर निर्भर करती है. यहां दिए गए निर्देशों में बताया गया है कि कनेक्शन स्ट्रिंग कैसे बनाई जाती है.

कनेक्शन स्ट्रिंग, पुष्टि करने के तरीके पर निर्भर करती है. हालांकि, बुनियादी कनेक्शन स्ट्रिंग इस फ़ॉर्मैट का इस्तेमाल करती है:

mongodb://UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&tls=true&retryWrites=false

इनमें से किसी एक तरीके से, बेस कनेक्शन स्ट्रिंग हासिल की जा सकती है:

Firebase कंसोल
  1. Firebase कंसोल में, Firestore डेटाबेस पेज पर जाएं.

    Firestore डेटाबेस पर जाएं

  2. उस डेटाबेस पर क्लिक करें जिसकी पुष्टि करनी है.
  3. एक्सप्लोरर पैनल में, ज़्यादा देखें पर क्लिक करें.
  4. MongoDB टूल का इस्तेमाल करके कनेक्ट करें को चुनें.
  5. कनेक्शन स्ट्रिंग कॉपी करें.
gcloud

यूआईडी और जगह की जानकारी वापस पाने के लिए, gcloud firestore database describe का इस्तेमाल करें:

gcloud firestore databases describe \
--database=DATABASE_ID \
--format='yaml(locationId, uid)'

DATABASE_ID को डेटाबेस आईडी से बदलें.

आउटपुट में डेटाबेस की जगह और यूआईडी शामिल होता है. इस जानकारी का इस्तेमाल करके, बुनियादी कनेक्शन स्ट्रिंग बनाएं.

अपने डेटाबेस से कनेक्ट करने और पुष्टि करने के लिए, बेस कनेक्शन स्ट्रिंग और इनमें से किसी एक तरीके का इस्तेमाल करें:

उपयोगकर्ता नाम और पासवर्ड (SCRAM) का इस्तेमाल करके कनेक्ट करना

अपने डेटाबेस के लिए उपयोगकर्ता क्रेडेंशियल बनाने और उसे कनेक्ट करने के लिए, यह तरीका अपनाएं.

शुरू करने से पहले

उपयोगकर्ता बनाने के लिए ज़रूरी अनुमतियां पाने के लिए, अपने एडमिन से कहें कि वह आपको आपके डेटाबेस पर userCredsAdmin (roles/datastore.userCredsAdmin) IAM भूमिका असाइन करे. भूमिकाएं असाइन करने के बारे में ज़्यादा जानने के लिए, प्रोजेक्ट, फ़ोल्डर, और संगठनों का ऐक्सेस मैनेज करना लेख पढ़ें.

आपको कस्टम भूमिका या पहले से तय अन्य भूमिकाओं के ज़रिए भी ज़रूरी अनुमतियां मिल सकती हैं.

उपयोगकर्ता बनाना और उसे डेटाबेस से कनेक्ट करना

MongoDB के साथ काम करने वाले Cloud Firestore डेटाबेस के लिए उपयोगकर्ता बनाने के लिए, इनमें से किसी एक तरीके का इस्तेमाल करें:

Google Cloud कंसोल
  1. Google Cloud Console में, डेटाबेस पेज पर जाएं.

    डेटाबेस पर जाएं

  2. डेटाबेस की सूची में से कोई डेटाबेस चुनें.
  3. नेविगेशन मेन्यू में, Auth पर क्लिक करें.
  4. उपयोगकर्ता जोड़ें पर क्लिक करें.
  5. कोई उपयोगकर्ता नाम डालें.
  6. नए उपयोगकर्ता के लिए कोई भूमिका चुनें.
  7. जोड़ें पर क्लिक करें.

    पुष्टि करने वाले डायलॉग बॉक्स में, नए उपयोगकर्ता का पासवर्ड दिखेगा.

gcloud CLI
  1. SCRAM की मदद से पुष्टि करने के लिए, आपको सबसे पहले उपयोगकर्ता क्रेडेंशियल बनाना होगा. gcloud alpha firestore user-creds निर्देश का इस्तेमाल करें:
    gcloud alpha firestore user-creds create USERNAME --database=DATABASE_ID
    इनकी जगह ये डालें:
    • USERNAME: वह उपयोगकर्ता नाम जिसे बनाना है.
    • DATABASE_ID: डेटाबेस आईडी.

    इस कमांड के आउटपुट में उपयोगकर्ता का पासवर्ड शामिल होता है.

    आउटपुट इस तरह का दिखेगा:

    name: projects/PROJECT_NAME/databases/DATABASE_ID/userCreds/USERNAME
    resourceIdentity:
      principal: principal://firestore.googleapis.com/projects/PROJECT_NUMBER/name/databases/DATABASE_ID/userCreds/USERNAME
    securePassword: PASSWORD
  2. डिफ़ॉल्ट रूप से, इस नए उपयोगकर्ता क्रेडेंशियल के पास कोई अनुमति नहीं होती. डेटाबेस को पढ़ने और उसमें बदलाव करने का ऐक्सेस पाने के लिए, इस डेटाबेस के लिए roles/datastore.user भूमिका जोड़ें:

    gcloud projects add-iam-policy-binding PROJECT_NAME \
    --member='principal://firestore.googleapis.com/projects/PROJECT_NUMBER/name/databases/DATABASE_ID/userCreds/USERNAME' \
    --role=roles/datastore.user \
    --condition='expression=resource.name == "projects/PROJECT_NAME/databases/DATABASE_ID",title="CONDITION_TITLE"'
    इनकी जगह ये डालें:

SCRAM का इस्तेमाल करके अपने डेटाबेस से कनेक्ट करने के लिए, इस कनेक्शन स्ट्रिंग का इस्तेमाल करें:

mongodb://USERNAME:PASSWORD@UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&authMechanism=SCRAM-SHA-256&tls=true&retryWrites=false

इनकी जगह ये डालें:

  • USERNAME: उपयोगकर्ता नाम.
  • PASSWORD: यह वह पासवर्ड है जिसे आपने इस उपयोगकर्ता के लिए जनरेट किया है.
  • UID: डेटाबेस का यूआईडी.
  • LOCATION: डेटाबेस की जगह.
  • DATABASE_ID: डेटाबेस आईडी.

Google Auth Library से कनेक्ट करना

यहां दिए गए कोड के उदाहरण में, ओआईडीसी कॉलबैक हैंडलर रजिस्टर किया गया है. इसमें Google Cloud स्टैंडर्ड OAuth लाइब्रेरी का इस्तेमाल किया गया है.

इस लाइब्रेरी की मदद से, कई तरह की पुष्टि करने की सुविधा का इस्तेमाल किया जा सकता है. जैसे, ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल और वर्कलोड आइडेंटिटी फ़ेडरेशन.

इसके लिए, auth लाइब्रेरी को डिपेंडेंसी के तौर पर जोड़ना ज़रूरी है:

// Maven
<dependency>
  <groupId>com.google.auth</groupId>
  <artifactId>google-auth-library-oauth2-http</artifactId>
  <version>1.19.0</version>
</dependency>

// Gradle
implementation 'com.google.auth:google-auth-library-oauth2-http:1.19.0'

यहां दिए गए कोड सैंपल में, कनेक्ट करने का तरीका बताया गया है:

val db = MongoClients.create(
    clientSettings(
      "DATABASE_UID",
      "LOCATION"
    ).build()
  ).getDatabase("DATABASE_ID")


/**
 * Creates a connection to a Firestore with MongoDB Compatibility database.
 * @param databaseUid The uid of the database to connect to as a string. For example: f116f93a-519c-208a-9a72-3ef6c9a1f081
 * @param locationId The location of the database to connect to, for example: nam5, us-central1, us-east4 etc...
 * @param environment Determines whether to try and fetch an authentication credential from the
 * Compute Engine VM metadata service or whether to call gcloud.
 */
private static MongoClientSettings.Builder clientSettings(
  String databaseUid: String
  String locationId:String
): MongoClientSettings.Builder {
  MongoCredential credential =
    MongoCredential.createOidcCredential(null)
      .withMechanismProperty(
        MongoCredential.OIDC_CALLBACK_KEY,
        new MongoCredential.OidcCallback() {
          @Override
          MongoCredential.OidcCallbackResult onRequest(
MongoCredential.OidcCallbackContext context) {
     // Customize this credential builder for additional credential types.
     GoogleCredentials credentials = GoogleCredentials.getApplicationDefault();
            return new MongoCredential.OidcCallbackResult(
         credentials.getAccessToken().getTokenValue(),
         Duration.between(Instant.now(),
credentials.getAccessToken().getExpirationTime().toInstant()));
          }
        },
      );
  return MongoClientSettings.builder()
    .hosts(listOf(ServerAddress(
        "$databaseUid.$locationId.firestore.goog", 443)))
    .credential(credential)
    .applyToClusterSettings(builder ->
         builder.mode(ClusterConnectionMode.LOAD_BALANCED))
    ).applyToSslSettings(ssl -> ssl.enabled(true)).retryWrites(false);
}

इनकी जगह ये डालें:

  • DATABASE_UID: आपके प्रोजेक्ट का नाम.
  • LOCATION: आपके डेटाबेस की जगह.
  • DATABASE_ID डेटाबेस आईडी.

Compute Engine वीएम से कनेक्ट करना

Compute Engine सेवा खाते का इस्तेमाल करके, अपने डेटाबेस से कनेक्ट किया जा सकता है और उसकी पुष्टि की जा सकती है. इसके लिए, Google Cloud प्रोजेक्ट के लिए IAM नीति बनाएं. इस प्रोजेक्ट में आपका डेटाबेस मौजूद है.

शुरू करने से पहले

अपनी वीएम के लिए, उपयोगकर्ता के मैनेज किए गए सेवा खाते को कॉन्फ़िगर करें:

अपने सेवा खाते का ईमेल पता नोट करें.

क्रेडेंशियल कॉन्फ़िगर करना

सेवा खाते को roles/datastore.user के लिए पढ़ने और लिखने की roles/datastore.user भूमिका देने के लिए, यह कमांड चलाएं:Cloud Firestore

gcloud projects add-iam-policy-binding PROJECT_NAME --member="SERVICE_ACCOUNT_EMAIL" --role=roles/datastore.user

इनकी जगह ये डालें:

  • PROJECT_NAME: आपके प्रोजेक्ट का नाम.
  • SERVICE_ACCOUNT_EMAIL: यह उस सेवा खाते का ईमेल पता है जिसे आपने बनाया है.

कनेक्शन स्ट्रिंग बनाना

कनेक्शन स्ट्रिंग बनाने के लिए, इस फ़ॉर्मैट का इस्तेमाल करें:

mongodb://DATABASE_UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&tls=true&retryWrites=false&authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:FIRESTORE

इनकी जगह ये डालें:

  • DATABASE_UID: आपके प्रोजेक्ट का नाम.
  • LOCATION: आपके डेटाबेस की जगह.
  • DATABASE_ID डेटाबेस आईडी.

यूआईडी और जगह की जानकारी वापस पाने के बारे में ज़्यादा जानने के लिए, कनेक्शन स्ट्रिंग वापस पाना लेख पढ़ें.

कुछ समय के लिए दिए गए ऐक्सेस टोकन से कनेक्ट करना

डाइग्नोस्टिक टूल चलाने के लिए, कुछ समय के लिए Google Cloud ऐक्सेस टोकन का इस्तेमाल किया जा सकता है. जैसे, mongosh. कम समय के लिए उपलब्ध ऐक्सेस टोकन की मदद से पुष्टि करने के लिए, gcloud auth print-access-token का इस्तेमाल किया जा सकता है. यह टोकन एक घंटे के लिए मान्य है.

उदाहरण के लिए, mongosh का इस्तेमाल करके अपने डेटाबेस से कनेक्ट करने के लिए, यह कमांड इस्तेमाल करें:

mongosh --tls \
      --username access_token --password $(gcloud auth print-access-token) \
      'mongodb://UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&authMechanism=PLAIN&authSource=$external&retryWrites=false'

इनकी जगह ये डालें:

  • DATABASE_UID: डेटाबेस का यूआईडी
  • LOCATION: डेटाबेस की जगह
  • DATABASE_ID: डेटाबेस आईडी