โปรเจ็กต์ Firebase จริงๆ แล้วก็คือโปรเจ็กต์ Google Cloud ที่เปิดใช้ การกำหนดค่าและบริการเฉพาะของ Firebase เพิ่มเติม ซึ่ง หมายความว่าคุณจะเข้าถึงที่เก็บข้อมูล Cloud Storage ทุกรายการที่ใช้กับ Cloud Storage for Firebase ได้ใน Google Cloud (รวมถึงคอนโซลและ API ของ Google Cloud)
ข้อควรพิจารณาสำหรับบัญชีบริการ
Firebase ใช้บัญชีบริการ Google Cloud เพื่อดำเนินการและจัดการบริการ
โดยไม่แชร์ข้อมูลเข้าสู่ระบบของผู้ใช้ เมื่อสร้างโปรเจ็กต์ Firebase ที่ใช้
Cloud Storage คุณอาจสังเกตเห็นว่าบัญชีบริการที่เกี่ยวข้องพร้อมใช้งานในโปรเจ็กต์แล้ว
ดูข้อมูลเพิ่มเติมได้ที่
ภาพรวมบัญชีบริการของ Firebase
Google Cloud Storage
คุณสามารถใช้ Google Cloud Storage API เพื่อเข้าถึงไฟล์ที่อัปโหลดผ่าน Firebase SDK สำหรับ Cloud Storage โดยเฉพาะอย่างยิ่งเพื่อ ดำเนินการที่ซับซ้อนมากขึ้น เช่น การคัดลอกหรือย้ายไฟล์ หรือแสดงรายการ ไฟล์ทั้งหมดที่พร้อมใช้งานในการอ้างอิง
โปรดทราบว่าคำขอเหล่านี้ใช้ Google Cloud Storage ตัวเลือกการควบคุมการเข้าถึง แทนที่จะใช้ Firebase Authentication และ Cloud Storage Security Rules
API
นอกเหนือจาก SDK ของ Firebase สำหรับ Cloud Storage แล้ว ยังมีวิธีอื่นๆ อีกมากมาย
ในการเข้าถึงข้อมูลที่จัดเก็บไว้ในที่เก็บข้อมูล Cloud Storage ทั้งนี้ขึ้นอยู่กับสิ่งที่คุณ
ต้องการทำ หากคุณเข้าถึงข้อมูลในเซิร์ฟเวอร์ เรามีไลบรารีฝั่งเซิร์ฟเวอร์
รวมถึง RESTful API ที่เข้ากันได้กับ JSON และ S3 XML หรือหากคุณ
ต้องการเขียนสคริปต์การเปลี่ยนแปลงหรือทำงานด้านการดูแลระบบอื่นๆ เราก็มี
เครื่องมือบรรทัดคำสั่งที่จะเป็นประโยชน์
SDK ของเซิร์ฟเวอร์ Google Cloud
Google Cloud มี SDK ของเซิร์ฟเวอร์คุณภาพสูงสำหรับผลิตภัณฑ์ระบบคลาวด์จำนวนมาก รวมถึง Cloud Storage ไลบรารีเหล่านี้พร้อมใช้งานใน Node.js, Java, Go, Python, PHP, และ Ruby
โปรดดูข้อมูลเพิ่มเติม รวมถึงวิธีการติดตั้ง การตรวจสอบสิทธิ์ และการแก้ปัญหาได้ในเอกสารเฉพาะแพลตฟอร์มที่ลิงก์ไว้ด้านบน
ตัวอย่างการใช้งาน SDK ของ Google Cloud Storage แสดงไว้ด้านล่าง
Node.js
// Require gcloud var gcloud = require('google-cloud'); // Enable Cloud Storage var gcs = gcloud.storage({ projectId: 'grape-spaceship-123', keyFilename: '/path/to/keyfile.json' }); // Reference an existing bucket. var bucket = gcs.bucket('my-existing-bucket'); // Upload a local file to a new file to be created in your bucket. bucket.upload('/photos/zoo/zebra.jpg', function(err, file) { if (!err) { // "zebra.jpg" is now in your bucket. } }); // Download a file from your bucket. bucket.file('giraffe.jpg').download({ destination: '/photos/zoo/giraffe.jpg' }, function(err) {});
Java
// Enable Cloud Storage Storage storage = StorageOptions.builder() .authCredentials(AuthCredentials.createForJson(new FileInputStream("/path/to/my/key.json")) .build() .service(); // Upload a local file to a new file to be created in your bucket. InputStream uploadContent = ... BlobId blobId = BlobId.of("my-existing-bucket", "zebra.jpg"); BlobInfo blobInfo = BlobInfo.builder(blobId).contentType("text/plain").build(); Blob zebraBlob = storage.create(blobInfo, content); // Download a file from your bucket. Blob giraffeBlob = storage.get("my-existing-bucket", "giraffe.jpg", null); InputStream downloadContent = giraffeBlob.getInputStream();
Go
// Enable Cloud Storage client, err := storage.NewClient(ctx, option.WithServiceAccountFile("path/to/keyfile.json")) if err != nil { log.Fatal(err) } // Download a file from your bucket. rc, err := client.Bucket("my-existing-bucket").Object("giraffe.jpg").NewReader(ctx) if err != nil { log.Fatal(err) } defer rc.Close() body, err := ioutil.ReadAll(rc) if err != nil { log.Fatal(err) }
Python
# Import gcloud from google.cloud import storage # Enable Cloud Storage client = storage.Client() # Reference an existing bucket. bucket = client.get_bucket('my-existing-bucket') # Upload a local file to a new file to be created in your bucket. zebraBlob = bucket.get_blob('zebra.jpg') zebraBlob.upload_from_filename(filename='/photos/zoo/zebra.jpg') # Download a file from your bucket. giraffeBlob = bucket.get_blob('giraffe.jpg') giraffeBlob.download_as_string()
PHP
// Require gcloud require 'vendor/autoload.php'; use Google\Cloud\Storage\StorageClient; // Enable Cloud Storage $storage = new StorageClient([ 'projectId' => 'grape-spaceship-123' ]); // Reference an existing bucket. $bucket = $storage->bucket('my-existing-bucket'); // Upload a file to the bucket. $bucket->upload( fopen('/photos/zoo/zebra.jpg', 'r') ); // Download a file from your bucket. $object = $bucket->object('giraffe.jpg'); $object->downloadToFile('/photos/zoo/giraffe.jpg');
Ruby
# Require gcloud require "google/cloud" # Enable Cloud Storage gcloud = Google::Cloud.new "grape-spaceship-123", "/path/to/keyfile.json" storage = gcloud.storage # Reference an existing bucket. bucket = storage.bucket "my-existing-bucket" # Upload a file to the bucket. bucket.create_file "/photos/zoo/zebra.jpg", "zebra.jpg" # Download a file from your bucket. file = bucket.file "giraffe.jpg" file.download "/photos/zoo/#{file.name}"
REST API
หากคุณใช้ภาษาที่ไม่มีไลบรารีของไคลเอ็นต์ ต้องการทำสิ่งที่ ไลบรารีของไคลเอ็นต์ทำไม่ได้ หรือเพียงแค่มีไคลเอ็นต์ HTTP ที่คุณชื่นชอบและต้องการใช้ Google Cloud Storage มี API สำหรับทั้ง JSON และ XML
นอกเหนือจาก API การเข้าถึงข้อมูลพื้นที่เก็บข้อมูลเหล่านี้แล้ว คุณยังสามารถใช้ Cloud Storage for Firebase APIเพื่อจัดการที่เก็บข้อมูล Cloud Storage สำหรับใช้ในโปรเจ็กต์ Firebase ได้ด้วย
gsutil
gsutil เป็นเครื่องมือบรรทัดคำสั่ง
ที่ให้คุณเข้าถึง Cloud Storage ได้โดยตรง คุณสามารถใช้ gsutil เพื่อทำงานด้านการจัดการที่เก็บข้อมูลและออบเจ็กต์ได้หลากหลาย รวมถึง
- การอัปโหลด ดาวน์โหลด และลบออบเจ็กต์
- การแสดงรายการที่เก็บข้อมูลและออบเจ็กต์
- การย้าย คัดลอก และเปลี่ยนชื่อออบเจ็กต์
- การแก้ไข ACL ของออบเจ็กต์และที่เก็บข้อมูล
gsutil อนุญาตให้ดำเนินการขั้นสูงอื่นๆ ได้ เช่น การย้ายไฟล์จากไดเรกทอรีหนึ่งไปยังอีกไดเรกทอรีหนึ่ง หรือการลบไฟล์ทั้งหมดที่อยู่ต่ำกว่าตำแหน่งที่ตั้งหนึ่งๆ
การย้ายไฟล์ทั้งหมดจากการอ้างอิงหนึ่งไปยังอีกรายการหนึ่งทำได้ง่ายๆ ดังนี้
gsutil mv gs://bucket/old/reference gs://bucket/new/reference
การลบไฟล์ทั้งหมดที่อยู่ต่ำกว่าการอ้างอิงหนึ่งๆ เป็นกลุ่มก็ทำได้ง่ายๆ เช่นกัน ดังนี้
# Delete all files under a path gsutil rm -r gs://bucket/reference/to/delete# Delete all the files in a bucket but not the bucket gsutil rm -r gs://bucket/**
# Delete all the files AND the bucket # Removing the default bucket will break the Firebase SDKs for Cloud Storage and is strongly discouraged gsutil rm -r gs://bucket
อัตราคำขอ
Google Cloud Storage เป็นบริการที่ปรับขนาดได้สูงซึ่งใช้เทคโนโลยีการปรับขนาดอัตโนมัติ เพื่อให้ได้อัตราคำขอที่สูงมาก
Google Cloud Storage เป็นบริการแบบหลายผู้เช่า ซึ่งหมายความว่าผู้ใช้จะแชร์ ชุดทรัพยากรพื้นฐานเดียวกัน ที่เก็บข้อมูลจึงมีความจุ I/O เริ่มต้นเพื่อให้ใช้ทรัพยากรที่แชร์เหล่านี้ได้อย่างมีประสิทธิภาพสูงสุด
เมื่อวางแผนที่จะผสานรวม Cloud Storage for Firebase เข้ากับแอป ให้พิจารณา อัตราคำขอขั้นต่ำที่แอปต้องการเพื่อให้ทำงานได้ดี และพิจารณาการส่ง คำขออย่างมีประสิทธิภาพ อ่านหลักเกณฑ์เกี่ยวกับอัตราคำขอ, โดยเฉพาะอย่างยิ่งการเพิ่มอัตราคำขอ
การกำหนดเวอร์ชันออบเจ็กต์
คุณเคยลบบางสิ่งบางอย่างโดยไม่ได้ตั้งใจและไม่มีข้อมูลสำรองไหม
Google Cloud Storage รองรับ
การกำหนดเวอร์ชันออบเจ็กต์,
ซึ่งเป็นวิธีอัตโนมัติในการสำรองข้อมูลและกู้คืนข้อมูลจากข้อมูลสำรอง
เหล่านั้น คุณสามารถเปิดใช้การกำหนดเวอร์ชันออบเจ็กต์ได้โดยใช้คำสั่ง gsutil versioning set ดังนี้
gsutil versioning set on gs://<your-cloud-storage-bucket>
Cloud Storage จะเลือกเวอร์ชันล่าสุดเสมอ ดังนั้นหากต้องการ กู้คืนออบเจ็กต์ คุณต้องใช้ API หรือเครื่องมืออื่นๆ ข้างต้นเพื่อตั้งค่า ออบเจ็กต์ที่ต้องการเป็นเวอร์ชันล่าสุด
การจัดการอายุการใช้งานของออบเจ็กต์
ความสามารถในการเก็บถาวรหรือลบไฟล์ที่ล้าสมัยโดยอัตโนมัติเป็นฟีเจอร์ที่มีประโยชน์สำหรับแอปพลิเคชันจำนวนมาก โชคดีที่ Google Cloud Storage มี การจัดการอายุการใช้งานของออบเจ็กต์, ซึ่งช่วยให้คุณลบหรือเก็บถาวรออบเจ็กต์ได้หลังจากผ่านไประยะเวลาหนึ่ง
ลองนึกถึงแอปพลิเคชันแชร์รูปภาพที่คุณต้องการให้ลบรูปภาพทั้งหมดภายใน 1 วัน คุณสามารถตั้งค่านโยบายอายุการใช้งานของออบเจ็กต์ได้ดังนี้
// lifecycle.json { "lifecycle": { "rule": [ { "action": {"type": "Delete"}, "condition": {"age": 1} } ] } }
และติดตั้งใช้งานโดยใช้คำสั่ง gsutil lifecycle set ดังนี้
gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>
โปรดทราบว่าการดำเนินการนี้จะมีผลกับไฟล์ทั้งหมดในที่เก็บข้อมูล ดังนั้นหากคุณจัดเก็บข้อมูลสำรองของผู้ใช้ที่สำคัญซึ่งต้องการจัดเก็บไว้เป็นเวลานานพร้อมกับรูปภาพที่ต้องการลบทุกวัน คุณอาจต้องการใช้ที่เก็บข้อมูล 2 รายการแยกกัน หรือลบด้วยตนเองโดยใช้ gsutil หรือเซิร์ฟเวอร์ของคุณเอง
Google Cloud Functions (เบต้า)
Google Cloud Functions คือโซลูชันประมวลผลแบบไม่พร้อมกันที่ ใช้งานง่ายและอิงตามเหตุการณ์ ซึ่งให้คุณ สร้างฟังก์ชันขนาดเล็กวัตถุประสงค์เดียวที่ตอบสนองต่อเหตุการณ์ โดยไม่จำเป็นต้อง จัดการเซิร์ฟเวอร์หรือสภาพแวดล้อมรันไทม์ คุณสามารถใช้ฟังก์ชันเหล่านี้เพื่อ แปลงรหัสวิดีโอ จัดหมวดหมู่รูปภาพโดยใช้แมชชีนเลิร์นนิง หรือซิงค์ ข้อมูลเมตากับ Firebase Realtime Database Cloud Functions มีค่าใช้จ่ายน้อยกว่า App Engine จึงเป็นวิธีที่เร็วที่สุดในการตอบสนองต่อการเปลี่ยนแปลงใน Cloud Storage
Google Cloud Vision API
Google Cloud Vision API ช่วยให้นักพัฒนาซอฟต์แวร์เข้าใจเนื้อหาของรูปภาพได้โดยการห่อหุ้มโมเดลแมชชีนเลิร์นนิงที่มีประสิทธิภาพไว้ใน API ที่ใช้งานง่าย API นี้จะจัดหมวดหมู่รูปภาพเป็นหมวดหมู่ต่างๆ นับพันอย่างรวดเร็ว ตรวจหาออบเจ็กต์และใบหน้าแต่ละรายการภายในรูปภาพ ค้นหาและอ่านคำที่พิมพ์ซึ่งอยู่ในรูปภาพ ระบุเนื้อหาที่ไม่เหมาะสม และยังวิเคราะห์ความรู้สึกของรูปภาพได้ด้วย
Google Cloud Speech API
Google Cloud Speech API ช่วยให้นักพัฒนาซอฟต์แวร์แยกข้อความจากไฟล์เสียงที่จัดเก็บไว้ใน Cloud Storage ได้เช่นเดียวกับ Vision API API นี้รองรับภาษาและภาษาถิ่นกว่า 80 ภาษาเพื่อรองรับฐานผู้ใช้ทั่วโลก เมื่อใช้ร่วมกับ Google Cloud Natural Language API, นักพัฒนาซอฟต์แวร์จะแยกข้อความดิบและอนุมานความหมายเกี่ยวกับข้อความนั้นได้ และหากต้องการเข้าถึงกลุ่มเป้าหมายทั่วโลก ให้ใช้ API นี้ร่วมกับ Google Translate API เพื่อแปล ข้อความเป็นภาษาต่างๆ กว่า 90 ภาษา
Google App Engine
Cloud Storage for Firebase ใช้รูปแบบการตั้งชื่อที่แตกต่างกัน 2 รูปแบบสำหรับที่เก็บข้อมูลเริ่มต้น ทั้งนี้ขึ้นอยู่กับเวลาที่คุณสร้างที่เก็บข้อมูล
- ที่เก็บข้อมูลเริ่มต้นที่สร้างขึ้นหลัง
เดือนกันยายน 2024 : ที่เก็บข้อมูลเริ่มต้นจะไม่ขึ้นอยู่ กับ Google App Engine*.firebasestorage.app - ที่เก็บข้อมูลเริ่มต้นแบบเดิม:
ที่เก็บข้อมูลเริ่มต้นจะแชร์กับ Google App Engine.*.appspot.com
Google App Engine เป็น "แพลตฟอร์มเป็นบริการ" ที่ปรับขนาดตรรกะแบ็กเอนด์โดยอัตโนมัติ ตามปริมาณการเข้าชมที่ได้รับ เพียงอัปโหลดโค้ดแบ็กเอนด์ แล้ว Google จะจัดการความพร้อมใช้งานของแอปให้คุณเอง คุณจึงไม่ต้องจัดหาหรือดูแลเซิร์ฟเวอร์ App Engine เป็นวิธีที่รวดเร็วและ ตรงไปตรงมาในการเพิ่มพลังการประมวลผลเพิ่มเติมหรือการดำเนินการที่เชื่อถือได้ลงใน แอปพลิเคชัน Firebase
การผสานรวมแบบเดิมApp Engine
หากคุณมีที่เก็บข้อมูลเริ่มต้น *.appspot.com
สภาพแวดล้อมมาตรฐาน Java, Python และ Go สำหรับ App Engine มี App Engine Images API (Java | Python | Go) ซึ่งสามารถ ปรับขนาด หมุน พลิก และครอบตัดรูปภาพ รวมถึงแสดง URL การแสดงรูปภาพ ซึ่งอนุญาตให้มีการแปลงฝั่งไคลเอ็นต์ได้ เช่นเดียวกับ Cloudinary และ Imgix
ข้อควรพิจารณาเกี่ยวกับที่เก็บข้อมูลที่แชร์
หากคุณใช้ที่เก็บข้อมูลเริ่มต้น *.appspot.com
Firebase Security Rules และไฟล์ App Engine: ไฟล์ที่อัปโหลดโดยใช้ App Engine จะแชร์ ที่เก็บข้อมูลเดียวกันและอยู่ภายใต้การกำหนดค่าความปลอดภัยเดียวกัน หากคุณ กำหนดค่าFirebase Security Rulesสำหรับ การเข้าถึงแบบสาธารณะ คุณจะทำให้ ไฟล์ App Engine ที่อัปโหลดใหม่เข้าถึงได้แบบสาธารณะด้วย
การตั้งค่าสิทธิ์: เมื่อนำเข้าโปรเจ็กต์ Google Cloud ที่มีอยู่ไปยัง Firebase คุณอาจต้องตั้งค่าการควบคุมการเข้าถึงเริ่มต้นในออบเจ็กต์เพื่อให้ Firebase เข้าถึงออบเจ็กต์เหล่านั้นได้ เรียกใช้คำสั่งต่อไปนี้โดยใช้
gsutilgsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME
ปัญหาที่ทราบเกี่ยวกับ Cloud Storage และ App Engine
มี 2 กรณีที่ทราบว่าคุณไม่สามารถนำเข้าแอป App Engine ได้
โปรเจ็กต์มีแอป App Engine Datastore Master/Slave แบบเดิม
โปรเจ็กต์มีรหัสโปรเจ็กต์ที่ขึ้นต้นด้วยโดเมน เช่น
domain.com:project-1234
ในกรณีใดกรณีหนึ่งข้างต้น โปรเจ็กต์จะไม่รองรับ Cloud Storage for Firebase, และคุณควรสร้างโปรเจ็กต์ Firebase ใหม่เพื่อใช้ Cloud Storage หากมีข้อสงสัย โปรดติดต่อทีมสนับสนุนของ Firebase