الدمج مع Google Cloud

تم دمج Cloud Storage for Firebase بإحكام مع Google Cloud. حِزم تطوير البرامج (SDK) من Firebase لنظام التشغيل Cloud Storage تخزّن الملفات مباشرةً في حِزم Google Cloud Storage، ويمكنك دمج خدمات Google Cloud أخرى مع تطبيقك مع نموه، مثل الحوسبة المُدارة مثل App Engine أو Cloud Functions أو واجهات برمجة التطبيقات لتكنولوجيات التعلم الآلي مثل Cloud Vision أو Google Translate.

مشروع Firebase هو في الواقع مشروع Google Cloud تم تفعيل إعدادات وخدمات إضافية خاصة بـ Firebase له. ويعني ذلك أنّه يمكن الوصول إلى كل حزمة Cloud Storage تستخدمها مع Cloud Storage for Firebase في 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 للوصول إلى الملفات التي تم تحميلها من خلال حِزم SDK الخاصة بتطبيق Firebase على Cloud Storage، خاصةً للقيام بعمليات أكثر تعقيدًا، مثل نسخ ملف أو نقله أو إدراج جميع الملفات المتاحة في مرجع معيّن.

من المهمّ ملاحظة أنّ هذه الطلبات تستخدِم Google Cloud Storage خيارات التحكّم في الوصول، بدلاً من Firebase Authentication وCloud Storage Security Rules.

واجهات برمجة التطبيقات

بالإضافة إلى حِزم SDK لنظام التشغيل Firebase في Cloud Storage، هناك عدد من الطرق الأخرى للوصول إلى البيانات المخزّنة في حزمة Cloud Storage، وذلك استنادًا إلى ما تريده انجامه. إذا كنت تصل إلى البيانات على خادم، نقدّم مكتبات على مستوى الخادم، بالإضافة إلى واجهة برمجة تطبيقات XML RESTful API متوافقة مع JSON وS3، أو إذا كنت تحتاج إلى كتابة نصوص برمجية للتغييرات أو تنفيذ مهام إدارية أخرى، لدينا أداة سطر برمجي مفيدة.

Google Cloud حِزم SDK للخادم

تقدّم شركة 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) {});
    

جافا

    // 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();
    

انتقال

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

إذا كنت تستخدم لغة لا تتوفّر لها مكتبة عملاء، أو أردت تنفيذ إجراء لا توفّره مكتبات العملاء، أو إذا كان لديك عميل HTTP مفضّل تريد استخدامه، يوفّر Google Cloud Storage واجهات برمجة تطبيقات لكل من التنسيقين JSON و XML.

بالإضافة إلى واجهات برمجة التطبيقات هذه للوصول إلى بيانات التخزين، يمكنك استخدام Cloud Storage for Firebase API لإدارة حِزم Cloud Storage لاستخدامها في مشاريع Firebase.

gsutil

gsutil هي أداة سطر أوامر تتيح لك الوصول مباشرةً إلى Cloud Storage. يمكنك استخدام gsutil لتنفيذ مجموعة كبيرة من مهام إدارة الحِزم والعناصر، بما في ذلك:

  • تحميل العناصر وتنزيلها وحذفها
  • إدراج الحِزم والعناصر
  • نقل العناصر ونسخها وإعادة تسميتها
  • تعديل قوائم "الوصول إلى التحكم في الأذونات" للعناصر والحزم

gsutil السماح بعمليات متقدّمة أخرى، مثل نقل الملفات من ملف directory واحد إلى ملف directory آخر، أو حذف جميع الملفات ضمن موقع معيّن

يمكنك نقل جميع الملفات من مرجع إلى آخر بسهولة:

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 هي خدمة متعددة المستأجرين، ما يعني أنّ المستخدمين يتشاركون المجموعة نفسها من الموارد الأساسية. للاستفادة إلى أقصى حد من هذه الموارد المشتركة، تمتلك الحِزم سعة أولية لعمليات الإدخال/الإخراج.

عند التخطيط لدمج Cloud Storage for Firebase في تطبيقك، ننصحك بالتفكير في الحد الأدنى لمعدّل الطلبات الذي يحتاجه تطبيقك لتحقيق أداء جيد، وكيفية إرسال الطلبات بكفاءة. راجِع الإرشادات حول معدلات الطلبات، وخاصة زيادة معدلات الطلبات.

تحديد إصدارات العناصر

هل سبق لك حذف ملف عن طريق الخطأ ولم يكن لديك نسخة احتياطية منه؟ يتيح Google Cloud Storage استخدام ميزة تحديث الإصدارات، والتي توفّر طريقة تلقائية للاحتفاظ بنسخة احتياطية من بياناتك واستعادتها من هذه النسخة الاحتياطية. يمكنك تفعيل ميزة "تحديث الإصدارات من العناصر" باستخدام الأمر gsutil versioning set:

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

تختار Cloud Storage دائمًا أحدث إصدار، لذا إذا كنت تريد استعادة عنصر، عليك استخدام إحدى واجهات برمجة التطبيقات أو الأدوات الأخرى المذكورة أعلاه لضبط العنصر المطلوب على أنّه الأحدث.

إدارة مراحل نشاط العناصر

إنّ إمكانية أرشفة الملفات القديمة أو حذفها تلقائيًا هي ميزة مفيدة في العديد من التطبيقات. لحسن الحظ، يوفّر 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>

يُرجى العِلم أنّ ذلك ينطبق على جميع الملفات في الحزمة، لذا إذا كنت تخزِّن نُسخًا احتياطية مهمة للمستخدمين تريد الاحتفاظ بها لفترة طويلة بجانب الصور التي تريد حذفها يوميًا، ننصحك باستخدام مجرّدَين مختلفَين أو إجراء عمليات الحذف يدويًا باستخدام gsutil أو خادمك الخاص.

Google Cloud Functions (إصدار تجريبي)

Google Cloud Functions هي حلّ احتساب غير متزامن وخفيف الوزن ومستند إلى الأحداث، يتيح لك إنشاء وظائف صغيرة ذات غرض واحد تستجيب للأحداث بدون الحاجة إلى إدارة خادم أو بيئة وقت التشغيل. يمكن استخدام هذه الدوال لتحويل ترميز الفيديو أو تصنيف الصور باستخدام تعلُّم الآلة أو مزامنة المحتوى الوصفي مع Firebase Realtime Database. مع تكلفة أقل من App Engine، تقدّم Cloud Functions أسرع طريقة للتفاعل مع التغييرات في Cloud Storage.

Google Cloud Vision API

تتيح Google Cloud Vision API للمطوّرين فهم محتوى الصورة من خلال تجميع نماذج فعالة لتعلُّم الآلة في واجهة برمجة تطبيقات سهلة الاستخدام. وتصنف هذه الميزة الصور بسرعة إلى آلاف الفئات، وترصد الكائنات والوجوه الفردية في الصور، ويبحث عن الكلمات المطبوعة في الصور ويقرأها، ويرصد المحتوى المهين، ويقدّم أيضًا تحليلًا للمشاعر في الصور.

Google Cloud Speech API

على غرار Vision API، تتيح Google Cloud Speech API للمطوّرين استخراج النص من ملف صوتي مخزّن في Cloud Storage. تتعرّف واجهة برمجة التطبيقات على أكثر من 80 لغة ونُسخًا مختلفة لتلبية احتياجات قاعدة مستخدمين عالميين. وعند دمجها مع واجهة برمجة التطبيقات Google Cloud Natural Language API، يمكن للمطوّرين استخراج النص الأوّلي واستنتاج معناه. وإذا كنت تريد الوصول إلى جمهور عالمي، يمكنك استخدام واجهة برمجة التطبيقات Google Translate API لترجمة النص إلى أكثر من 90 لغة.

Google App Engine

Google App Engine هي "منصّة كخدمة" تصعيد منطق الخلفية تلقائيًا استجابةً لكمية الزيارات التي تتلقّاها. ما عليك سوى uploadedتحميل رمز الخلفية وستتولى Google إدارة مدى توفّر تطبيقك، فلا تحتاج إلى توفير خوادم أو صيانتها. App Engine هي طريقة سريعة و مباشرة لإضافة طاقة معالجة إضافية أو تنفيذ موثوق إلى تطبيقك على Firebase.

إذا كان لديك حزمة Cloud Storage تلقائية بتنسيق الاسم PROJECT_ID.appspot.com، تتم مشاركتها تلقائيًا مع تطبيق App Engine في مشروعك. وهذا يعني أنّه في حال أنشأت تطبيقًا على App Engine ، يمكنك استخدام واجهات برمجة تطبيقات 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:

  1. يتضمّن المشروع تطبيقًا سابقًا من App Engine Datastore للتحكّم في الأجهزة المتوافقة.
  2. يحتوي المشروع على رقم تعريف مسبوق بنطاق، على سبيل المثال: domain.com:project-1234.

في أيّ من الحالتَين، لن يتيح المشروع استخدام Cloud Storage for Firebase، وعليك إنشاء مشروع جديد على Firebase لاستخدام Cloud Storage. يُرجى التواصل مع فريق الدعم لنتمكّن من مساعدتك.