เกี่ยวข้องกับ Cloud Firestore Enterprise Edition เท่านั้น |
ข้อกำหนดในการเชื่อมต่อ
ต่อไปนี้คือสิ่งที่จำเป็นสำหรับไคลเอ็นต์ที่เข้ากันได้กับ Cloud Firestore และ MongoDB
- ผู้ขับขี่ต้องเชื่อมต่อในโหมด
load balanced
ซึ่งจะช่วยป้องกันไม่ให้ไดรเวอร์พยายามทำความเข้าใจโทโพโลยีเซิร์ฟเวอร์ที่แน่นอน ที่เชื่อมต่ออยู่ - ไดรเวอร์ต้องเชื่อมต่อโดยเปิดใช้ SSL
- ไดรเวอร์ต้องปิดใช้การเขียนที่ลองใหม่ได้ ปัจจุบัน Cloud Firestore ที่มีความเข้ากันได้กับ MongoDB ยังไม่รองรับการเขียนที่ลองใหม่ได้
เรียกข้อมูลสตริงการเชื่อมต่อ
สตริงการเชื่อมต่อฐานข้อมูลขึ้นอยู่กับ UID ของฐานข้อมูล ตำแหน่งของฐานข้อมูล และกลไกการตรวจสอบสิทธิ์ คำสั่งต่อไปนี้จะอธิบายวิธีสร้างสตริงการเชื่อมต่อ
สตริงการเชื่อมต่อที่แน่นอนจะขึ้นอยู่กับกลไกการตรวจสอบสิทธิ์ แต่สตริงการเชื่อมต่อฐานจะใช้รูปแบบต่อไปนี้
mongodb://UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&tls=true&retryWrites=false
คุณขอรับสตริงการเชื่อมต่อฐานได้ด้วยวิธีใดวิธีหนึ่งต่อไปนี้
Firebase คอนโซล
-
ในFirebaseคอนโซล ให้ไปที่หน้าฐานข้อมูล Firestore
- คลิกฐานข้อมูลที่ต้องการตรวจสอบสิทธิ์
- ในแผงสำรวจ ให้คลิก ดูเพิ่มเติม
- เลือกเชื่อมต่อโดยใช้เครื่องมือ MongoDB
- คัดลอกสตริงการเชื่อมต่อ
gcloud
ใช้ gcloud firestore database describe
เพื่อดึงข้อมูล UID และตำแหน่ง
gcloud firestore databases describe \ --database=DATABASE_ID \ --format='yaml(locationId, uid)'
แทนที่ DATABASE_ID ด้วยรหัสฐานข้อมูล
เอาต์พุตประกอบด้วยตำแหน่งและ UID ของฐานข้อมูล ใช้ข้อมูลนี้ เพื่อสร้างสตริงการเชื่อมต่อฐาน
ใช้สตริงการเชื่อมต่อฐานและวิธีใดวิธีหนึ่งต่อไปนี้เพื่อตรวจสอบสิทธิ์ และเชื่อมต่อกับฐานข้อมูล
เชื่อมต่อด้วยชื่อผู้ใช้และรหัสผ่าน (SCRAM)
ทําตามขั้นตอนต่อไปนี้เพื่อสร้างข้อมูลเข้าสู่ระบบของผู้ใช้สําหรับฐานข้อมูลและ เชื่อมต่อกับฐานข้อมูล
ก่อนเริ่มต้น
หากต้องการรับสิทธิ์ที่จำเป็นในการสร้างผู้ใช้ ให้ขอให้ผู้ดูแลระบบ มอบบทบาท IAM userCredsAdmin (roles/datastore.userCredsAdmin
) ให้คุณใน
ฐานข้อมูล ดูข้อมูลเพิ่มเติมเกี่ยวกับการให้บทบาทได้ที่หัวข้อจัดการการเข้าถึงโปรเจ็กต์ โฟลเดอร์ และองค์กร
นอกจากนี้ คุณยังอาจได้รับสิทธิ์ที่จำเป็นผ่านบทบาทที่กำหนดเอง หรือบทบาทที่กำหนดไว้ล่วงหน้าอื่นๆ
สร้างผู้ใช้และเชื่อมต่อกับฐานข้อมูล
หากต้องการสร้างผู้ใช้สำหรับฐานข้อมูล Cloud Firestore ที่เข้ากันได้กับ MongoDB ให้ใช้วิธีใดวิธีหนึ่งต่อไปนี้
คอนโซล Google Cloud
-
ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล
- เลือกฐานข้อมูลจากรายการฐานข้อมูล
- ในเมนูการนำทาง ให้คลิกการตรวจสอบสิทธิ์
- คลิก Add User
- ป้อนชื่อผู้ใช้
- เลือกบทบาทสำหรับผู้ใช้ใหม่
-
คลิกเพิ่ม
รหัสผ่านของผู้ใช้ใหม่จะแสดงในกล่องโต้ตอบการยืนยัน
gcloud CLI
-
หากต้องการตรวจสอบสิทธิ์ด้วย 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
-
โดยค่าเริ่มต้น ข้อมูลเข้าสู่ระบบของผู้ใช้ใหม่นี้จะไม่มีสิทธิ์ใดๆ หากต้องการสิทธิ์อ่านและเขียนในฐานข้อมูล ให้เพิ่มบทบาท
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"'
- PROJECT_NAME: ชื่อโปรเจ็กต์
- PROJECT_NUMBER: หมายเลขโปรเจ็กต์
- DATABASE_ID: รหัสฐานข้อมูล
- USERNAME: ชื่อผู้ใช้ที่คุณสร้างไว้ก่อนหน้านี้
- 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: UID ของฐานข้อมูล
- LOCATION: ตำแหน่งของฐานข้อมูล
- DATABASE_ID: รหัสฐานข้อมูล
เชื่อมต่อกับไลบรารีการตรวจสอบสิทธิ์ของ Google
ตัวอย่างโค้ดต่อไปนี้จะลงทะเบียนตัวแฮนเดิลการเรียกกลับของ OIDC โดยใช้ไลบรารี OAuth มาตรฐาน Google Cloud
ไลบรารีนี้ช่วยให้คุณใช้การตรวจสอบสิทธิ์ได้หลายประเภท (ข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชัน, การรวมข้อมูลประจำตัวของเวิร์กโหลด)
ซึ่งต้องเพิ่มไลบรารีการตรวจสอบสิทธิ์เป็นทรัพยากร Dependency ดังนี้
// 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 รหัสฐานข้อมูล
เชื่อมต่อจาก VM ของ Compute Engine
คุณตรวจสอบสิทธิ์และเชื่อมต่อกับฐานข้อมูลได้โดยใช้Compute Engineบัญชีบริการ โดยสร้างนโยบาย IAM สำหรับโปรเจ็กต์ Google Cloud ที่มีฐานข้อมูล
ก่อนเริ่มต้น
วิธีกำหนดค่าบัญชีบริการที่ผู้ใช้จัดการสำหรับ VM
- หากต้องการกำหนดค่าบัญชีบริการระหว่างการสร้าง VM โปรดดูสร้าง VM ที่ใช้บัญชีบริการที่ผู้ใช้จัดการ
- หากต้องการกำหนดค่าบัญชีบริการใน VM ที่มีอยู่ โปรดดูเปลี่ยนบัญชีบริการที่แนบ
จดอีเมลบัญชีบริการ
กำหนดค่าข้อมูลเข้าสู่ระบบ
หากต้องการให้สิทธิ์บัญชีบริการใน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 รหัสฐานข้อมูล
ดูข้อมูลเพิ่มเติมเกี่ยวกับการดึง UID และตำแหน่งได้ที่ ดึงข้อมูลสตริงการเชื่อมต่อ
เชื่อมต่อด้วยโทเค็นเพื่อการเข้าถึงชั่วคราว
คุณสามารถใช้โทเค็นเพื่อเข้าถึงชั่วคราว Google Cloud เพื่อเรียกใช้เครื่องมือวินิจฉัย
เช่น mongosh
คุณใช้
gcloud auth print-access-token
เพื่อตรวจสอบสิทธิ์ด้วยโทเค็นเพื่อการเข้าถึงระยะสั้นได้ โทเค็นนี้มีอายุการใช้งาน 1 ชั่วโมง
เช่น ใช้คำสั่งต่อไปนี้เพื่อเชื่อมต่อกับฐานข้อมูลด้วย
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: UID ของฐานข้อมูล
- LOCATION: ตำแหน่งของฐานข้อมูล
- DATABASE_ID: รหัสฐานข้อมูล