الدمج مع Google Cloud

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

يستخدم Firebase حسابات خدمة Google Cloud لتشغيل الخدمات وإدارتها بدون مشاركة بيانات اعتماد المستخدم. عند إنشاء مشروع Firebase الذي يستخدم Cloud Storage، قد تلاحظ توفّر حساب خدمة مطابق في مشروعك: service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com. يمكنك الاطّلاع على دليل دعم Firebase للحصول على مزيد من المعلومات.

تُجري حِزم تطوير البرامج (SDK) لمنصّة Firebase الخاصة بخدمة Cloud Storage بشكل تلقائي الحزمة التلقائية في المستوى المجاني من App Engine. ويسمح لك ذلك بالاستفادة من خدمة Cloud Storage بسرعة، بدون الحاجة إلى استخدام بطاقة ائتمان أو تفعيل حساب فوترة على Cloud. ويتيح لك أيضًا مشاركة البيانات بسهولة بين Firebase ومشروع على Google Cloud.

يتطلّب الدمج مع Google Cloud، بما في ذلك استيراد حِزم Cloud Storage الحالية، توفُّر مشروع في Firebase ضمن خطة Blaze. اطّلِع على مزيد من المعلومات عن الخطط في صفحة الأسعار.

Google Cloud Storage

يمكنك استخدام Google Cloud Storage API للوصول إلى الملفات التي تم تحميلها من خلال حِزم تطوير البرامج (SDK) لمنصة Firebase لخدمة Cloud Storage، لا سيما لتنفيذ عمليات أكثر تعقيدًا، مثل نسخ ملف أو نقله أو إدراج جميع الملفات المتوفّرة في مرجع.

من المهم ملاحظة أنّ هذه الطلبات تستخدم خيارات التحكّم في الوصول إلى Google Cloud Storage، بدلاً من مصادقة Firebase وقواعد أمان Cloud Storage.

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

بالإضافة إلى حزم تطوير البرامج (SDK) لمنصّة Firebase في Cloud Storage، تتوفّر عدة طرق أخرى للوصول إلى البيانات المخزّنة في حزمتك على Cloud Storage بناءً على ما تريد تنفيذه. وفي حال أردت الوصول إلى البيانات على خادم، نقدّم مكتبات من جهة الخادم وواجهة برمجة تطبيقات XML متوافقة مع 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}"
    

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

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

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

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

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

App Engine

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

تستخدم حزم تطوير البرامج (SDK) لمنصّة Firebase في Cloud Storage الحزمة التلقائية لـ App Engine، ما يعني أنّه إذا أنشأت تطبيق App Engine، يمكنك استخدام واجهات برمجة التطبيقات المضمّنة في App Engine لمشاركة البيانات بين Firebase وApp Engine. يفيد ذلك في تنفيذ ترميز الصوت، وتحويل ترميز الفيديو، وعمليات تحويل الصور، بالإضافة إلى العمليات الحاسوبية المكثفة الأخرى في الخلفية.

تشمل Java وPython وGo البيئات العادية لـ App Engine واجهة App Engine Images API (Java و Python التي يمكن تغيير حجمها وتدويرها وقلبها واقتصاصها، بالإضافة إلى عرض عنوان URL لعرض الصورة يتيح إجراء عمليات تحويل من جهة العميل، على غرار Cloudinary وEmgix.

عند استيراد مشروع حالي على 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:

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

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

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

إنّ Google Cloud Functions هو حلّ سهل الاستخدام قائم على الأحداث وغير متزامن يتيح لك إنشاء وظائف صغيرة ذات غرض واحد تستجيب للأحداث بدون الحاجة إلى إدارة خادم أو بيئة وقت تشغيل. يمكن استخدام هذه الدوال لتحويل ترميز الفيديو، أو لتصنيف الصور باستخدام تعلُّم الآلة، أو لمزامنة البيانات الوصفية مع قاعدة بيانات Firebase في الوقت الفعلي. نظرًا إلى قلة أعباء العمل على App Engine، فإن "وظائف السحابة الإلكترونية" هي أسرع طريقة للتفاعل مع التغييرات في 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" لترجمة النص إلى أكثر من 90 لغة.