ผสานรวมกับ Google Cloud

Cloud Storage for Firebase ผสานรวมกับ Google Cloud อย่างแนบแน่น SDK ของ Firebase สำหรับ Cloud Storage จะจัดเก็บไฟล์ใน Google Cloud Storage โดยตรง, และเมื่อแอปเติบโตขึ้น คุณจะผสานรวมบริการอื่นๆ ของ Google Cloud ได้ เช่น การประมวลผลที่มีการจัดการอย่าง App Engine หรือ Cloud Functions หรือ API ของแมชชีน เลิร์นนิงอย่าง Cloud Vision หรือ Google แปลภาษา

โปรเจ็กต์ Firebase จริงๆ แล้วก็คือโปรเจ็กต์ Google Cloud ที่เปิดใช้ การกำหนดค่าและบริการเฉพาะของ Firebase เพิ่มเติม ซึ่ง หมายความว่าคุณจะเข้าถึงที่เก็บข้อมูล Cloud Storage ทุกรายการที่ใช้กับ Cloud Storage for Firebase ได้ใน Google Cloud (รวมถึงคอนโซลและ API ของ Google Cloud)

ข้อควรพิจารณาสำหรับบัญชีบริการ

Firebase ใช้บัญชีบริการ Google Cloud เพื่อดำเนินการและจัดการบริการ โดยไม่แชร์ข้อมูลเข้าสู่ระบบของผู้ใช้ เมื่อสร้างโปรเจ็กต์ Firebase ที่ใช้ Cloud Storage คุณอาจสังเกตเห็นว่าบัญชีบริการที่เกี่ยวข้องพร้อมใช้งานในโปรเจ็กต์แล้ว service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com ดูข้อมูลเพิ่มเติมได้ที่ ภาพรวมบัญชีบริการของ 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: *.firebasestorage.app ที่เก็บข้อมูลเริ่มต้นจะไม่ขึ้นอยู่ กับ Google App Engine
  • ที่เก็บข้อมูลเริ่มต้นแบบเดิม: *.appspot.com ที่เก็บข้อมูลเริ่มต้นจะแชร์กับ Google App Engine.

Google App Engine เป็น "แพลตฟอร์มเป็นบริการ" ที่ปรับขนาดตรรกะแบ็กเอนด์โดยอัตโนมัติ ตามปริมาณการเข้าชมที่ได้รับ เพียงอัปโหลดโค้ดแบ็กเอนด์ แล้ว Google จะจัดการความพร้อมใช้งานของแอปให้คุณเอง คุณจึงไม่ต้องจัดหาหรือดูแลเซิร์ฟเวอร์ App Engine เป็นวิธีที่รวดเร็วและ ตรงไปตรงมาในการเพิ่มพลังการประมวลผลเพิ่มเติมหรือการดำเนินการที่เชื่อถือได้ลงใน แอปพลิเคชัน Firebase

การผสานรวมแบบเดิมApp Engine

หากคุณมีที่เก็บข้อมูลเริ่มต้น *.appspot.com แบบเดิม ระบบจะแชร์ที่เก็บข้อมูลดังกล่าวกับแอป App Engine ในโปรเจ็กต์ของคุณโดยอัตโนมัติ ซึ่งหมายความว่าคุณสามารถ ใช้ App Engine API ในตัวเพื่อแชร์ข้อมูลระหว่างที่เก็บข้อมูลนั้นกับ App Engine ได้ การดำเนินการนี้มีประโยชน์สำหรับการเข้ารหัสเสียง การแปลงรหัสวิดีโอ และการแปลงรูปภาพ รวมถึงการประมวลผลเบื้องหลังที่ต้องใช้การคำนวณสูงอื่นๆ

สภาพแวดล้อมมาตรฐาน 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 เข้าถึงออบเจ็กต์เหล่านั้นได้ เรียกใช้คำสั่งต่อไปนี้โดยใช้ gsutil

    gsutil -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