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

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

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

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

สิ่งที่ควรทราบเกี่ยวกับบัญชีบริการ

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

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

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

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

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

ลองพิจารณาแอปพลิเคชันการแชร์รูปภาพที่ต้องการให้ลบรูปภาพทั้งหมดภายใน 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 เป็นวิธีที่รวดเร็วที่สุดในการตอบสนองต่อการเปลี่ยนแปลงใน 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 Translate API เพื่อแปลข้อความเป็นภาษาต่างๆ กว่า 90 ภาษา

Google App Engine

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

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

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

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

gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME

ข้อควรพิจารณาสำหรับไฟล์ Firebase Security Rules และ App Engine

หากคุณมีที่เก็บข้อมูล Cloud Storage เริ่มต้นที่มีรูปแบบชื่อเป็น *.appspot.com แสดงว่าโปรเจ็กต์ของคุณมีแอป App Engine ที่แชร์ที่เก็บข้อมูลนั้นด้วย

หากคุณกำหนดค่า Firebase Security Rules สำหรับการเข้าถึงแบบสาธารณะ (ไม่ได้ตรวจสอบสิทธิ์) คุณจะทำให้ไฟล์ App Engine ที่อัปโหลดใหม่เข้าถึงได้แบบสาธารณะด้วย

ปัญหาที่ทราบสำหรับ Cloud Storage และ App Engine

กรณีที่ทราบแล้วซึ่งคุณจะนําเข้าแอป App Engine ไม่ได้มี 2 กรณีดังนี้

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

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