Dự án Firebase thực ra chỉ là một dự án Google Cloud đã bật các cấu hình và dịch vụ dành riêng cho Firebase. Điều này có nghĩa là bạn có thể truy cập vào mọi vùng chứa Cloud Storage mà bạn sử dụng với Cloud Storage for Firebase trong Google Cloud (bao gồm cả bảng điều khiển và API của Google Cloud).
Những điều cần cân nhắc đối với tài khoản dịch vụ
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 chia sẻ thông tin xác thực của người dùng. Khi tạo một dự án Firebase sử dụng
Cloud Storage, bạn có thể thấy rằng một tài khoản dịch vụ tương ứng đã có trong dự án của bạn:
.
Để biết thêm thông tin, hãy xem
bài viết Tổng quan về tài khoản dịch vụ Firebase.
Google Cloud Storage
Bạn có thể sử dụng các Google Cloud Storage API để 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 tệp, hoặc liệt kê tất cả các tệp có sẵn tại một tham chiếu.
Điều quan trọng cần lưu ý là các yêu cầu này sử dụng Google Cloud Storage các tuỳ chọn kiểm soát quyền truy cập, thay vì Firebase Authentication và Cloud Storage Security Rules.
API
Ngoài các SDK Firebase 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 vùng chứa Cloud Storage, tuỳ thuộc vào những gì bạn
muốn làm. 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 các thư viện phía máy chủ,
cũng như API RESTful JSON và XML tương thích với S3. Hoặc nếu bạn
cần viết tập lệnh thay đổi hoặc thực hiện các tác vụ quản trị khác, chúng tôi có một
công cụ dòng lệnh sẽ rất hữu ích.
Google Cloud SDK máy chủ
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, PHP, và Ruby.
Để 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.
Ví dụ về cách sử dụng SDK Google Cloud Storage được trình bày bên dưới:
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();
Bắt đầu
// 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 sử dụng một ngôn ngữ không có thư viện ứng dụng, muốn làm điều gì đó mà các thư viện ứng dụng không làm được hoặc chỉ có một ứng dụng HTTP yêu thích mà bạn muốn sử dụng, thì Google Cloud Storage cung cấp các API cho cả JSON và XML.
Ngoài các API truy cập dữ liệu lưu trữ này, để quản lý các vùng 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 giú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à vùng chứa, bao gồm:
- Tải đối tượng lên, tải đối tượng xuống và xoá đối tượng.
- Liệt kê các vùng chứa và đối tượng.
- Di chuyển, sao chép và đổi tên đối tượng.
- Chỉnh sửa danh sách kiểm soát quyền truy cập (ACL) của đối tượng và vùng chứa.
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 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.
Việc di chuyển tất cả các tệp từ tham chiếu này sang tham chiếu khác rất dễ dàng:
gsutil mv gs://bucket/old/reference gs://bucket/new/reference
Việc xoá hàng loạt tất cả các tệp bên dưới một tham chiếu cũng tương tự như vậy:
# 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
Tỷ lệ yêu cầu
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ỷ lệ yêu cầu rất cao.
Google Cloud Storage là một dịch vụ nhiều bên thuê, nghĩa là người dùng chia sẻ cùng một tập hợp tài nguyên cơ bản. Để tận dụng tối đa các tài nguyên được chia sẻ này, các vùng chứa có dung lượng IO ban đầu.
Khi bạn lên kế hoạch tích hợp Cloud Storage for Firebase vào ứng dụng của mình, 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 và cách đưa ra yêu cầu một cách hiệu quả. Xem lại các nguyên tắc về tỷ lệ yêu cầu, và đặc biệt là việc tăng tỷ lệ yêu cầu.
Kiểm soát phiên bản đối tượng
Bạn đã bao giờ vô tình xoá một 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 Kiểm soát phiên bản đối tượng,
cung cấp một cách tự động để sao lưu dữ liệu và khôi phục từ các bản sao lưu
đó. Bạn có thể bật tính năng Kiểm soát phiên bản đối tượng bằ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 là Google Cloud Storage cung cấp tính năng 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 cân nhắc 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 đối tượng như sau:
// lifecycle.json { "lifecycle": { "rule": [ { "action": {"type": "Delete"}, "condition": {"age": 1} } ] } }
Và triển khai chính sách đó bằng lệnh gsutil lifecycle set:
gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>
Xin lưu ý rằng chính sách này áp dụng cho tất cả các tệp trong vùng chứa. Vì vậy, nếu bạn đ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 một thời gian dài cùng với những bức ảnh mà bạn muốn xoá hằng ngày, bạn có thể muốn sử dụng hai vùng chứa riêng biệt hoặc xoá theo cách thủ công bằng gsutil hoặc máy chủ của riêng bạn.
Google Cloud Functions (Thử nghiệm)
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à gọn nhẹ, cho phép bạn tạo các hàm nhỏ, có mục đích duy nhất để 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. Bạn có thể sử dụng các hàm này để chuyển mã video, phân loại hình ảnh bằng công nghệ máy học hoặc đồng bộ hoá siêu dữ liệu với Firebase Realtime Database. Với chi phí thấp hơn cả App Engine, Cloud Functions là cách nhanh nhất để phản ứng với các thay đổi trong Cloud Storage.
Google Cloud Vision API
Google Cloud Vision API cho phé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 máy học mạnh mẽ trong một API dễ sử dụng. API 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 các đối tượng và khuôn mặt riêng lẻ 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í còn cung cấp tính năng phân tích cảm xúc của hình ảnh.
Google Cloud Speech API
Tương tự như Vision API, Google Cloud Speech API cho phép nhà phát triển trích xuất văn bản từ mộ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 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ể vừa trích xuất văn bản thô vừa suy luận ý nghĩa về văn bản đó. Và nếu bạn cần tiếp cận đối tượng toàn cầu, hãy kết hợp API này với Google Dịch API để dịch văn bản sang hơn 90 ngôn ngữ.
Google App Engine
Cloud Storage for Firebase sử dụng hai định dạng đặt tên khác nhau cho các vùng chứa mặc định tuỳ thuộc vào thời điểm bạn tạo vùng chứa:
- Vùng chứa mặc định được tạo sau
tháng 9 năm 2024 : các vùng chứa mặc định không phụ thuộc vào Google App Engine.*.firebasestorage.app - Vùng chứa mặc định cũ:
các vùng chứa mặc định được chia sẻ với Google App Engine.*.appspot.com
Google App Engine là một "Nền tảng dưới dạng dịch vụ" tự động điều chỉnh quy mô logic phụ trợ để phản hồi lượng lưu lượng truy cập mà nền tảng này 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; bạn không cần cung cấp hoặc duy trì máy chủ. App Engine là một cách nhanh chóng và đơn giản để thêm sức mạnh xử lý bổ sung hoặc thực thi đáng tin cậy vào ứng dụng Firebase của bạn.
Tích hợp App Engine cũ
Nếu bạn có một vùng chứa mặc định *.appspot.com
Các môi trường tiêu chuẩn Java, Python và Go cho App Engine bao gồm App Engine Images API (Java | Python | Go), có thể đổi kích thước, xoay, lật và cắt hình ảnh, cũng như trả về URL phân phát hình ảnh cho phép chuyển đổi phía ứng dụng, tương tự như Cloudinary và Imgix.
Những điều cần cân nhắc đối với vùng chứa được chia sẻ
Nếu bạn đang sử dụng vùng chứa mặc định cũ *.appspot.com
Firebase Security Rules và tệp App Engine: Các tệp được tải lên bằng App Engine chia sẻ cùng một vùng chứa và tuân theo cùng một cấu hình bảo mật. Nếu bạn định cấu hình Firebase Security Rules để truy cập công khai, thì bạn cũng sẽ cho phép truy cập công khai vào các tệp App Engine mới tải lên.
Thiết lập quyền: Khi nhập một dự án Google Cloud hiện có vào Firebase, bạn có thể cần thiết lập quyền kiểm soát quyền truy cập mặc định trên các đối tượng của mình để cho phép Firebase truy cập vào các đối tượng đó. Chạy lệnh sau bằng
gsutil:gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME
Các vấn đề đã biết đối với Cloud Storage và App Engine
Có 2 trường hợp đã biết mà bạn không thể nhập ứng dụng App Engine:
Dự án chứa một ứng dụng App Engine Datastore Master/Slave cũ.
Dự án có mã dự án được thêm tiền tố miền, ví dụ:
domain.com:project-1234.
Trong một trong hai trường hợp này, dự án sẽ không hỗ trợ Cloud Storage for Firebase, và bạn nên tạo một dự án Firebase mới để sử dụng Cloud Storage. Nếu bạn có thắc mắc, hãy liên hệ với Nhóm hỗ trợ Firebase.