Tích hợp với Google Cloud

Cloud Storage cho Firebase được tích hợp chặt chẽ với Google Cloud. Firebase SDK dành cho Cloud Storage lưu trữ tệp trực tiếp trong bộ chứa Google Cloud Storage. Khi ứng dụng của bạn phát triển, bạn có thể dễ dàng tích hợp các dịch vụ khác của Google Cloud, chẳng hạn như điện toán được quản lý như App Engine hoặc Cloud Functions hoặc các API học máy như Cloud Vision hoặc Google Dịch.

Firebase sử dụng tài khoản dịch vụ Google Cloud để vận hành và quản lý các dịch vụ mà không cần chia sẻ thông tin đăng nhập của người dùng. Khi tạo một dự án Firebase sử dụng Cloud Storage, bạn có thể nhận thấy đã có sẵn một tài khoản dịch vụ tương ứng trong dự án: service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com. Xem hướng dẫn hỗ trợ của Firebase để biết thêm thông tin.

Về sau, SDK Firebase dành cho Cloud Storage sẽ sử dụng bộ chứa mặc định trong cấp miễn phí App Engine. Tính năng này giúp bạn nhanh chóng thiết lập và sử dụng Cloud Storage mà không cần phải nhập thẻ tín dụng hoặc kích hoạt tài khoản thanh toán Cloud. Giải pháp này cũng giúp bạn dễ dàng chia sẻ dữ liệu giữa Firebase và một dự án Google Cloud.

Để tích hợp với Google Cloud, bao gồm cả việc nhập các bộ chứa hiện có của Cloud Storage, bạn phải có một dự án Firebase theo Gói linh hoạt. Tìm hiểu thêm về các gói trên trang giá của chúng tôi.

Google Cloud Storage

Bạn có thể sử dụng API Google Cloud Storage để truy cập vào các tệp được tải lên thông qua Firebase SDK cho Cloud Storage, đặc biệt là để thực hiện các thao tác phức tạp hơn, chẳng hạn như sao chép hoặc di chuyển một tệp hoặc liệt kê tất cả các tệp có trong một tệp tham chiếu.

Điều quan trọng bạn cần lưu ý là những yêu cầu này sử dụng các tuỳ chọn kiểm soát quyền truy cập của Google Cloud Storage, thay vì các Quy tắc bảo mật của tính năng Xác thực Firebase và Cloud Storage.

API

Ngoài SDK Firebase dành cho Cloud Storage, còn có một số cách khác để truy cập vào dữ liệu được lưu trữ trong bộ chứa Cloud Storage, tuỳ thuộc vào thao tác bạn muốn thực hiện. Nếu bạn đang truy cập vào dữ liệu trên một máy chủ, chúng tôi cung cấp thư viện phía máy chủ cũng như API RESTful XML tương thích với JSON và S3. Nếu bạn cần viết các thay đổi về tập lệnh hoặc thực hiện các công việc quản trị khác, chúng tôi đã có một công cụ dòng lệnh rất hữu ích.

SDK máy chủ Google Cloud

Google Cloud cung cấp các SDK máy chủ chất lượng cao cho một số sản phẩm đám mây, bao gồm cả Cloud Storage. Các thư viện này có trong Node.js, Java, go, Python, PHPRuby.

Để biết thêm thông tin, bao gồm cả hướng dẫn cài đặt, xác thực và khắc phục sự cố, hãy tham khảo tài liệu dành riêng cho nền tảng được liên kết ở trên.

Dưới đây là ví dụ về cách sử dụng 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();
    

Tiến hành

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

Nếu bạn đang dùng một ngôn ngữ không có thư viện ứng dụng, muốn thực hiện một việc mà thư viện ứng dụng không làm hoặc chỉ có một ứng dụng HTTP yêu thích mà bạn muốn dùng, thì Google Cloud Storage cung cấp các API cho cả JSONXML.

Ngoài các API truy cập dữ liệu bộ nhớ này, để quản lý bộ chứa Cloud Storage dùng trong các dự án Firebase, bạn có thể sử dụng API Cloud Storage cho Firebase.

gsutil

gsutil là một công cụ dòng lệnh cho phép bạn truy cập trực tiếp vào Cloud Storage. Bạn có thể sử dụng gsutil để thực hiện nhiều tác vụ quản lý đối tượng và bộ chứa, bao gồm:

  • Tải lên, tải xuống và xoá đối tượng.
  • Liệt kê các nhóm và đối tượng.
  • Di chuyển, sao chép và đổi tên đối tượng.
  • Chỉnh sửa ACL của đối tượng và nhóm.

gsutil cho phép thực hiện các thao tác nâng cao khác, chẳng hạn như di chuyển các tệp từ thư mục này sang thư mục khác hoặc xoá tất cả các tệp bên dưới một vị trí nhất định.

Di chuyển tất cả tệp từ tệp tham chiếu này sang tệp tham chiếu khác dễ dàng như sau:

gsutil mv gs://bucket/old/reference gs://bucket/new/reference

Thao tác xoá hàng loạt tất cả các tệp bên dưới một tệp tham chiếu cũng trực quan tương tự:

# 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

Yêu cầu giá

Google Cloud Storage là một dịch vụ có khả năng mở rộng cao, sử dụng công nghệ tự động cấp tài nguyên bổ sung để đạt được tốc độ yêu cầu rất cao.

Google Cloud Storage là một dịch vụ đa khách hàng, có nghĩa là người dùng sẽ dùng chung một nhóm tài nguyên cơ bản. Để tận dụng tối đa những tài nguyên dùng chung này, các bộ chứa sẽ có một dung lượng IO ban đầu.

Khi bạn dự định tích hợp Cloud Storage cho Firebase vào ứng dụng, hãy cân nhắc tỷ lệ yêu cầu tối thiểu mà ứng dụng cần để có hiệu suất tốt cũng như đưa ra yêu cầu một cách hiệu quả. Tham khảo các nguyên tắc về tỷ lệ yêu cầu, và đặc biệt là tăng tỷ lệ yêu cầu.

Tạo phiên bản đối tượng

Bạn đã bao giờ vô tình xoá nội dung nào đó và không có bản sao lưu chưa? Google Cloud Storage hỗ trợ tính năng Tạo phiên bản đối tượng, cung cấp một cách tự động để sao lưu và khôi phục dữ liệu của bạn từ các bản sao lưu đó. Bạn có thể bật tính năng Tạo phiên bản đối tượng bằng cách sử dụng lệnh gsutil versioning set:

gsutil versioning set on gs://<your-cloud-storage-bucket>

Cloud Storage luôn chọn phiên bản mới nhất, vì vậy, nếu muốn khôi phục một đối tượng, bạn cần sử dụng một trong các API hoặc công cụ khác ở trên để đặt đối tượng mong muốn làm đối tượng mới nhất.

Quản lý vòng đời đối tượng

Khả năng tự động lưu trữ hoặc xoá các tệp cũ là một tính năng hữu ích cho nhiều ứng dụng. May mắn thay, Google Cloud Storage cung cấp Quản lý vòng đời đối tượng, cho phép bạn xoá hoặc lưu trữ các đối tượng sau một khoảng thời gian nhất định.

Hãy xem xét một ứng dụng chia sẻ ảnh mà bạn muốn xoá tất cả ảnh trong vòng một ngày. Bạn có thể thiết lập chính sách vòng đời của đối tượng như sau:

// lifecycle.json
{
  "lifecycle": {
    "rule":
    [
      {
        "action": {"type": "Delete"},
        "condition": {"age": 1}
      }
    ]
  }
}

Và triển khai bằng lệnh gsutil lifecycle set:

gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>

Xin lưu ý rằng điều này áp dụng cho mọi tệp trong bộ chứa. Vì vậy, nếu đang lưu trữ các bản sao lưu quan trọng của người dùng mà bạn muốn lưu trữ trong thời gian dài cùng với ảnh mà bạn muốn xoá hằng ngày, bạn nên sử dụng 2 bộ chứa riêng biệt hoặc thực hiện xoá theo cách thủ công bằng gsutil hoặc máy chủ của riêng bạn.

App Engine

App Engine là một "Nền tảng dưới dạng dịch vụ" có thể tự động mở rộng logic phụ trợ để phản hồi mức lưu lượng truy cập mà ứng dụng nhận được. Bạn chỉ cần tải mã phụ trợ lên và Google sẽ quản lý khả năng cung cấp ứng dụng của bạn; không có máy chủ nào để bạn cấp phép hoặc duy trì. App Engine là một cách nhanh chóng và dễ dàng để bổ sung khả năng xử lý hoặc khả năng thực thi đáng tin cậy vào ứng dụng Firebase của bạn.

Firebase SDK dành cho Cloud Storage sử dụng bộ chứa mặc định của App Engine, có nghĩa là nếu xây dựng một ứng dụng App Engine, thì bạn có thể dùng các API tích hợp sẵn của App Engine để chia sẻ dữ liệu giữa Firebase và App Engine. Điều này rất hữu ích khi thực hiện quá trình mã hoá âm thanh, chuyển mã video và biến đổi hình ảnh, cũng như các quy trình tính toán chuyên sâu khác ở chế độ nền.

Java, Python và môi trường chuẩn dành cho App Engine bao gồm App Engine Images API (Java, Python). Các API này có thể đổi kích thước, xoay, lật và cắt hình ảnh, cũng như trả về một URL phân phát hình ảnh cho phép biến đổi phía máy khách, tương tự như Cloudinary và Imgix.

Khi nhập một dự án Google Cloud hiện có vào Firebase, nếu muốn cung cấp bất kỳ đối tượng App Engine hiện có nào trong Firebase, bạn cần đặt chế độ kiểm soát quyền truy cập mặc định vào các đối tượng để cho phép Firebase truy cập vào các đối tượng đó bằng cách chạy lệnh sau sử dụng gsutil:

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

Các vấn đề đã biết

Có hai trường hợp đã biết mà bạn không thể nhập ứng dụng App Engine:

  1. Dự án này chứa một ứng dụng Chính/Slave của App Engine Datastore trước đây.
  2. Dự án có một mã dự án có tiền tố, ví dụ: domain.com:project-1234.

Trong cả hai trường hợp này, dự án sẽ không hỗ trợ Cloud Storage cho Firebase và bạn nên tạo một dự án Firebase mới để sử dụng Cloud Storage. Liên hệ với bộ phận hỗ trợ để chúng tôi có thể giúp bạn.

Chức năng đám mây của Google (Beta)

Google Cloud Functions là một giải pháp điện toán không đồng bộ, dựa trên sự kiện và dựa trên sự kiện, cho phép bạn tạo các hàm nhỏ, chỉ phục vụ một mục đích, phản hồi các sự kiện mà không cần quản lý máy chủ hoặc môi trường thời gian chạy. Những hàm này có thể được dùng để chuyển mã video, phân loại hình ảnh bằng công nghệ học máy hoặc đồng bộ hoá siêu dữ liệu với Cơ sở dữ liệu theo thời gian thực của Firebase. Với mức hao tổn thậm chí còn thấp hơn App Engine, Cloud Functions là cách nhanh nhất để phản ứng với những thay đổi trong Bộ nhớ đám mây.

Google Cloud Vision API

Google Cloud Vision API giúp nhà phát triển hiểu nội dung của một hình ảnh bằng cách đóng gói các mô hình học máy mạnh mẽ trong một API dễ sử dụng. Tính năng này nhanh chóng phân loại hình ảnh thành hàng nghìn danh mục, phát hiện từng đối tượng và khuôn mặt trong hình ảnh, tìm và đọc các từ in có trong hình ảnh, xác định nội dung phản cảm và thậm chí là phân tích cảm xúc hình ảnh.

Google Cloud Speech API

Tương tự như Vision API, API Google Cloud Speech cho phép nhà phát triển trích xuất văn bản từ tệp âm thanh được lưu trữ trong Cloud Storage. API này nhận dạng hơn 80 ngôn ngữ và biến thể để hỗ trợ cơ sở người dùng trên toàn cầu của bạn. Khi kết hợp với Google Cloud Natural Language API, nhà phát triển có thể trích xuất văn bản thô và suy luận ý nghĩa của văn bản đó. Nếu cần phải tiếp cận đối tượng người dùng toàn cầu, hãy kết hợp công cụ này với API Google Dịch để dịch văn bản sang hơn 90 ngôn ngữ.