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

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

Firebase จะใช้บัญชีบริการ Google Cloud เพื่อดำเนินการและจัดการบริการ โดยไม่ต้องแชร์ข้อมูลเข้าสู่ระบบของผู้ใช้ เมื่อสร้างโปรเจ็กต์ Firebase ที่ใช้ Cloud Storage คุณอาจสังเกตเห็นว่าบัญชีบริการที่เกี่ยวข้องพร้อมให้ใช้งานแล้วในโปรเจ็กต์ของคุณ: service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com ดูข้อมูลเพิ่มเติมได้ในคู่มือการสนับสนุนสำหรับ Firebase นี้

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

การผสานรวมกับ Google Cloud รวมถึงการนำเข้าที่เก็บข้อมูล Cloud Storage ที่มีอยู่ จำเป็นต้องมีโปรเจ็กต์ Firebase ในแพ็กเกจ Blaze ดูข้อมูลเพิ่มเติมเกี่ยวกับแพ็กเกจได้ในหน้าราคา

Google Cloud Storage

คุณสามารถใช้ Google Cloud Storage API เพื่อเข้าถึงไฟล์ที่อัปโหลดผ่าน Firebase SDK สำหรับ Cloud Storage โดยเฉพาะเพื่อดำเนินการที่ซับซ้อนมากขึ้น เช่น การคัดลอกหรือย้ายไฟล์ หรือการแสดงไฟล์ทั้งหมดที่มีอยู่ที่อ้างอิง

โปรดทราบว่าคำขอเหล่านี้ใช้ตัวเลือกการควบคุมการเข้าถึงของ Google Cloud Storage แทนการตรวจสอบสิทธิ์ Firebase และกฎความปลอดภัยของ Cloud Storage

API

นอกเหนือจาก Firebase SDK สำหรับ Cloud Storage แล้ว ยังมีวิธีอื่นๆ อีกหลายวิธีในการเข้าถึงข้อมูลที่จัดเก็บไว้ในที่เก็บข้อมูล Cloud Storage ทั้งนี้ขึ้นอยู่กับสิ่งที่คุณต้องการทำ หากคุณกำลังเข้าถึงข้อมูลบนเซิร์ฟเวอร์ เรามีไลบรารีฝั่งเซิร์ฟเวอร์ รวมทั้ง XML RESTful API ที่ใช้ร่วมกับ JSON และ S3 หรือหากคุณต้องการเปลี่ยนแปลงสคริปต์หรือทำงานด้านการดูแลระบบอื่นๆ เรามีเครื่องมือบรรทัดคำสั่งให้ใช้ได้

SDK ของเซิร์ฟเวอร์ Google Cloud

Google Cloud มี SDK เซิร์ฟเวอร์คุณภาพสูงสำหรับผลิตภัณฑ์ระบบคลาวด์มากมาย รวมถึง Cloud Storage ไลบรารีเหล่านี้พร้อมใช้งานใน Node.js, Java, go, Python, PHP และ Ruby

ดูข้อมูลเพิ่มเติม ซึ่งรวมถึงวิธีการติดตั้ง การตรวจสอบสิทธิ์ และการแก้ปัญหาได้ในเอกสารประกอบของแพลตฟอร์มนั้นๆ ตามลิงก์ด้านบน

ตัวอย่างการใช้ Google Cloud Storage SDK มีดังนี้

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}"
    

API ของ REST

หากคุณใช้ภาษาที่ไม่มีไลบรารีไคลเอ็นต์ ต้องการทำสิ่งที่ไลบรารีของไคลเอ็นต์ไม่มี หรือแค่มีไคลเอ็นต์ 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 คือบริการแบบหลายกลุ่มผู้ใช้ ซึ่งหมายความว่าผู้ใช้จะแชร์ทรัพยากรที่สำคัญชุดเดียวกัน ที่เก็บข้อมูลจะมีความจุ IO เริ่มต้นเพื่อให้ใช้ทรัพยากรที่แชร์เหล่านี้ให้เกิดประโยชน์สูงสุด

เมื่อคุณวางแผนที่จะผสานรวม 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 มีการจัดการอายุการใช้งานของออบเจ็กต์ซึ่งช่วยให้คุณลบหรือเก็บออบเจ็กต์ได้หลังจากระยะเวลาหนึ่ง

ลองใช้แอปพลิเคชันแชร์รูปภาพที่คุณต้องการให้ลบรูปภาพทั้งหมด ภายในวันเดียว คุณตั้งค่านโยบายวงจรของออบเจ็กต์ได้ดังนี้

// 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 หรือเซิร์ฟเวอร์ของคุณเอง

App Engine

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

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

สภาพแวดล้อมมาตรฐานสำหรับ Java, Python และ Go สำหรับ App Engine รวมถึง App Engine Images API (Java, Python ที่ปรับขนาด หมุน พลิก และครอบตัดรูปภาพได้ รวมถึงแสดงผล URL การแสดงรูปภาพซึ่งช่วยให้เปลี่ยนรูปแบบฝั่งไคลเอ็นต์ได้ ซึ่งคล้ายกับ Cloudential และ Imgix

เมื่อนำเข้าโปรเจ็กต์ Google Cloud ที่มีอยู่ไปยัง Firebase หากต้องการทำให้ออบเจ็กต์ App Engine ที่มีอยู่ใช้ได้ใน Firebase คุณจะต้องตั้งค่าการควบคุมการเข้าถึงเริ่มต้นบนออบเจ็กต์เพื่ออนุญาตให้ Firebase เข้าถึงได้โดยเรียกใช้คำสั่งต่อไปนี้โดยใช้ gsutil

gsutil -m acl ch -r -u service-<project number;gt@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://<your-cloud-storage-bucket>

ปัญหาที่ทราบ

คุณไม่สามารถนำเข้าแอป App Engine ได้ 2 กรณีต่อไปนี้

  1. โปรเจ็กต์มีแอป App Engine Datastore Master/Slave เดิม
  2. โปรเจ็กต์มีรหัสโปรเจ็กต์นำหน้าโดเมน เช่น domain.com:project-1234

ในกรณีเหล่านี้ โปรเจ็กต์จะไม่รองรับ Cloud Storage for Firebase และคุณควรสร้างโปรเจ็กต์ Firebase ใหม่เพื่อใช้ Cloud Storage ติดต่อทีมสนับสนุน เพื่อให้เราช่วยเหลือคุณ

ฟังก์ชัน Google Cloud (เบต้า)

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

Google Cloud Vision API

Google Cloud Vision API ช่วยให้นักพัฒนาซอฟต์แวร์เข้าใจเนื้อหาของรูปภาพได้โดยการรวมโมเดลแมชชีนเลิร์นนิงที่ทรงประสิทธิภาพไว้ใน API ที่ใช้งานง่าย เครื่องมือนี้สามารถแยกประเภทรูปภาพเป็นหมวดหมู่หลายพันรายการได้อย่างรวดเร็ว ตรวจจับวัตถุและใบหน้าภายในรูปภาพ ค้นหาและอ่านคำที่พิมพ์แล้วซึ่งมีอยู่ในรูปภาพ ระบุเนื้อหาที่ไม่เหมาะสม และแม้แต่วิเคราะห์ความเชื่อมั่นของภาพ

Google Cloud Speech API

Google Cloud Speech API ช่วยให้นักพัฒนาซอฟต์แวร์ดึงข้อความจากไฟล์เสียงที่จัดเก็บไว้ใน Cloud Storage ได้ เช่นเดียวกับ Vision API API จดจำภาษาและตัวแปรกว่า 80 รายการเพื่อรองรับฐานผู้ใช้ทั่วโลก เมื่อใช้ร่วมกับ Google Cloud Natural Language API นักพัฒนาซอฟต์แวร์จะดึงข้อความดิบและอนุมานความหมายของข้อความดังกล่าวได้ และหากต้องการกลุ่มเป้าหมายทั่วโลก ให้รวมฟีเจอร์นี้กับ Google แปลภาษา API เพื่อแปลข้อความเป็นกว่า 90 ภาษา