نشر تطبيق أساسي "ترجمة Google" تطبيق على Python 2 Cloud Run (Docker)

نشر "ترجمة Google" الأساسية تطبيق على Python 2 Cloud Run (Docker)

لمحة عن هذا الدرس التطبيقي حول الترميز

subjectتاريخ التعديل الأخير: سبتمبر 20, 2021
account_circleتأليف: a Googler

1. نظرة عامة

تهدف هذه السلسلة من الدروس التطبيقية حول الترميز (البرامج التعليمية العملية الذاتية) إلى مساعدة المطوّرين على فهم الخيارات المختلفة المتاحة لهم عند نشر تطبيقاتهم. في هذا الدرس التطبيقي حول الترميز، ستتعلّم كيفية استخدام Google Cloud Translation API مع لغة Python وتنفيذ طريقة التشغيل محليًا أو النشر على منصة حوسبة بدون خادم على السحابة الإلكترونية (App Engine أو Cloud Functions أو Cloud Run). يمكن نشر نموذج التطبيق المتوفّر في مستودع هذا البرنامج التعليمي (على الأقل) ثماني طرق مختلفة مع إجراء تغييرات بسيطة على الإعدادات:

  1. خادم Flask المحلي (Python 2)
  2. خادم Flask المحلي (Python 3)
  3. App Engine (Python 2)
  4. App Engine (Python 3)
  5. دوال السحابة (Python 3)
  6. تشغيل السحابة الإلكترونية (Python 2 عبر Docker)
  7. تشغيل السحابة الإلكترونية (Python 3 عبر Docker)
  8. تشغيل السحابة الإلكترونية (Python 3 عبر Cloud Buildpacks)

يركّز هذا الدرس التطبيقي حول الترميز على نشر هذا التطبيق على الأنظمة الأساسية المكتوبة بالخط العريض أعلاه.

ستتعرَّف على كيفية

المتطلبات

  • أن يكون لديك مشروع على Google Cloud مع حساب فوترة نشط على Cloud
  • Flask مثبَّت للعمل محليًا، أو منصة حوسبة بدون خادم على السحابة الإلكترونية مفعّلة لعمليات النشر المستندة إلى السحابة الإلكترونية
  • المهارات الأساسية في لغة بايثون
  • معرفة عملية بأوامر نظام التشغيل الأساسية

استطلاع

كيف ستستخدم هذا البرنامج التعليمي؟

كيف تقيّم تجربتك مع Python؟

ما هو تقييمك لتجربتك في استخدام خدمات Google Cloud؟

2. الإعداد والمتطلبات

إعداد بيئة ذاتية

  1. سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي عبارة عن سلسلة أحرف لا تستخدمها Google APIs، ويمكنك تحديثها في أي وقت.
  • يجب أن يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console سلسلة فريدة تلقائيًا. فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الرجوع إلى رقم تعريف المشروع (والذي يتم تحديده عادةً على أنّه PROJECT_ID). لذلك، إذا لم يعجبك، يمكنك إنشاء رقم تعريف عشوائي آخر أو يمكنك تجربة رقم تعريف المشروع الخاص بك ومعرفة ما إذا كان متاحًا. بعد ذلك تكون الحالة "مجمّدة". بعد إنشاء المشروع.
  • هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام الموارد/واجهات برمجة التطبيقات في Cloud. إنّ تنفيذ هذا الدرس التطبيقي حول الترميز لن يكون مكلفًا أو مكلفًا على الإطلاق. لإيقاف تشغيل الموارد حتى لا تتحمل الفوترة بعد أكثر من هذا البرنامج التعليمي، اتبع أي عملية "تنظيف". التعليمات الموجودة في نهاية الدرس التطبيقي حول الترميز. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج فترة تجريبية مجانية بقيمة 300 دولار أمريكي.

3. تفعيل واجهة برمجة تطبيقات الترجمة

تفعيل Cloud APIs

في هذا القسم، ستتعرّف على طريقة تفعيل Google APIs بشكل عام. بالنسبة إلى نموذج التطبيق الذي نقدّمه، عليك تفعيل Cloud Translation API وCloud Run وCloud Artifact Registry.

مقدمة

بغض النظر عن واجهة Google API التي تريد استخدامها في تطبيقك، يجب تفعيلها. يوضّح المثال التالي طريقتَين لتفعيل Cloud Vision API. بعد التعرّف على كيفية تفعيل إحدى واجهات برمجة تطبيقات Cloud، ستتمكّن من تفعيل واجهات برمجة تطبيقات أخرى لأنّ العملية مشابهة.

الخيار 1: من Cloud Shell أو واجهة سطر الأوامر

على الرغم من أن تفعيل واجهات برمجة التطبيقات من Cloud Console هو الأكثر شيوعًا، إلا أنّ بعض المطوّرين يفضّلون تنفيذ كل شيء من سطر الأوامر. لإجراء ذلك، عليك البحث عن "اسم الخدمة" في واجهة برمجة التطبيقات. يبدو أنّ عنوان URL هو: SERVICE_NAME.googleapis.com. يمكنك العثور على هذه المنتجات في الرسم البياني للمنتجات المتوافقة، أو يمكنك طلبها آليًا باستخدام Google Discovery API.

من خلال هذه المعلومات، وباستخدام Cloud Shell (أو بيئة التطوير المحلية التي تم تثبيت أداة سطر الأوامر gcloud فيها)، يمكنك تفعيل واجهة برمجة التطبيقات على النحو التالي:

gcloud services enable SERVICE_NAME.googleapis.com

على سبيل المثال، يعمل هذا الأمر على تفعيل Cloud Vision API:

gcloud services enable vision.googleapis.com

يعمل هذا الأمر على تفعيل App Engine:

gcloud services enable appengine.googleapis.com

يمكنك أيضًا تفعيل واجهات برمجة تطبيقات متعددة بطلب واحد. على سبيل المثال، يعمل سطر الأوامر هذا على تفعيل Cloud Run وCloud Artifact Registry وCloud Translation API:

gcloud services enable artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com

الخيار 2: من Cloud Console

يمكنك أيضًا تفعيل Vision API في "مدير واجهات برمجة التطبيقات". من Cloud Console، انتقِل إلى مدير واجهة برمجة التطبيقات واختَر المكتبة.

fb0f1d315f122d4a.png

إذا أردت تفعيل Cloud Vision API، ابدأ بإدخال "رؤية". في شريط البحث، وسيظهر أي شيء يطابق ما أدخلته حتى الآن:

2275786a24f8f204.png

اختَر واجهة برمجة التطبيقات التي تريد تفعيلها وانقر على تفعيل:

2556f923b628e31.png

التكلفة

يمكن استخدام العديد من واجهات Google APIs بدون رسوم، إلا أنّ استخدام منتجات Google Cloud و وليست واجهات برمجة التطبيقات مجانية. عند تفعيل Cloud APIs، قد يُطلَب منك حساب فوترة نشط. ومع ذلك، من المهم ملاحظة أنّ بعض منتجات Google Cloud تعرض الحالة "مجانية دائمًا" المستوى (يوميًا/شهريًا)، التي عليك تجاوزها لتحمل رسوم الفوترة. وإلا فلن يتم تحصيل الرسوم من بطاقتك الائتمانية (أو وسيلة الفوترة المحددة).

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

تختلف الأسعار والمستويات المجانية بين Google APIs. أمثلة:

تتم فوترة منتجات Google المختلفة بشكل مختلف، لذا احرص على الرجوع إلى وثائق واجهة برمجة التطبيقات للحصول على هذه المعلومات.

ملخّص

الآن، بعد أن تعرفت على كيفية تفعيل Google APIs بشكل عام، انتقِل إلى مدير واجهات برمجة التطبيقات وفعِّل Cloud Translation API وCloud Run وCloud Artifact Registry (إذا لم يسبق لك إجراء ذلك). عليك تفعيل الطريقة الأولى لأنّ التطبيق يستخدمها. ويمكنك تفعيل الخيار الأخير لأنّه يتم تخزين صور الحاوية قبل نشرها لبدء خدمة Cloud Run، لذا يجب تفعيل ذلك. إذا كنت تفضّل تفعيلها كلها باستخدام أداة gcloud، يمكنك إصدار الأمر التالي بدلاً من الجهاز الطرفي:

gcloud services enable artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com

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

4. الحصول على نموذج رمز التطبيق

استنسِخ الرمز في المستودع محليًا أو في Cloud Shell (باستخدام الأمر git clone)، أو نزِّل ملف ZIP من زر الرمز الأخضر كما هو موضّح في لقطة الشاشة التالية:

5cd6110c4414cf65.png

والآن بعد أن أصبح لديك كل شيء، أنشئ نسخة كاملة من المجلد للقيام بهذا البرنامج التعليمي المحدد، لأنه من المحتمل أن يتضمن حذف الملفات أو تغييرها. إذا كنت تريد إجراء عملية نشر مختلفة، يمكنك البدء من جديد عن طريق نسخ النسخة الأصلية حتى لا تضطر إلى استنساخها أو تنزيلها مرة أخرى.

5. جولة حول نموذج التطبيق

نموذج التطبيق هو مشتق بسيط من ترجمة Google يطلب من المستخدمين إدخال نص باللغة الإنجليزية وتلقّي الترجمة المماثلة لهذا النص باللغة الإسبانية. يُرجى فتح ملف main.py لنتمكّن من التعرّف على طريقة عمله. مع إغفال السطور التي تم التعليق عليها بشأن الترخيص، ستظهر لك هذه السطور في الأعلى والأسفل:

from flask import Flask, render_template, request
import google.auth
from google.cloud import translate

app = Flask(__name__)
_, PROJECT_ID = google.auth.default()
TRANSLATE = translate.TranslationServiceClient()
PARENT = 'projects/{}'.format(PROJECT_ID)
SOURCE, TARGET = ('en', 'English'), ('es', 'Spanish')

# . . . [translate() function definition] . . .

if __name__ == '__main__':
   
import os
   
app.run(debug=True, threaded=True, host='0.0.0.0',
           
port=int(os.environ.get('PORT', 8080)))
  1. تتضمّن عمليات الاستيراد وظائف Flask ووحدة google.auth ومكتبة برامج Cloud Translation API.
  2. تمثّل المتغيّرات العمومية تطبيق Flask ورقم تعريف مشروع Cloud وعميل Translation API و"مسار الموقع الجغرافي" الرئيسي. لطلبات البيانات من واجهة برمجة التطبيقات Translation API واللغات المصدر والهدف. في هذه الحالة، ستكون اللغة الإنجليزية (en) والإسبانية (es)، ولكن يمكنك تغيير هذه القيم إلى رموز لغات أخرى متوافقة مع Cloud Translation API.
  3. تُستخدَم كتلة if الكبيرة في أسفل الدليل التوجيهي لتشغيل هذا التطبيق على الجهاز، وهي تستخدم خادم تطوير Flask لعرض تطبيقنا. يتوفّر هذا القسم أيضًا في البرامج التعليمية للنشر في السحابة الإلكترونية في حال عدم تضمين خادم الويب في الحاوية. يُطلب منك تفعيل تجميع الخادم في الحاوية، ولكن في حال تجاهلك هذا، يعود رمز التطبيق إلى استخدام خادم تطوير Flask. (ولا يعني ذلك حدوث مشكلة في App Engine أو Cloud Functions، لأنّ هذه الأنظمة تستند إلى مصادر، ما يعني أنّ Google Cloud توفّر خادم ويب تلقائيًا وتشغّله).

أخيرًا، في منتصف main.py، توجد الدالة translate():

@app.route('/', methods=['GET', 'POST'])
def translate(gcf_request=None):
    """
    main handler - show form and possibly previous translation
    """

   
# Flask Request object passed in for Cloud Functions
   
# (use gcf_request for GCF but flask.request otherwise)
   
local_request = gcf_request if gcf_request else request

   
# reset all variables (GET)
   
text = translated = None

   
# if there is data to process (POST)
   
if local_request.method == 'POST':
       
text = local_request.form['text']
       
data = {
           
'contents': [text],
           
'parent': PARENT,
           
'target_language_code': TARGET[0],
       
}
       
# handle older call for backwards-compatibility
       
try:
           
rsp = TRANSLATE.translate_text(request=data)
       
except TypeError:
           
rsp = TRANSLATE.translate_text(**data)
       
translated = rsp.translations[0].translated_text

   
# create context & render template
   
context = {
       
'orig':  {'text': text, 'lc': SOURCE},
       
'trans': {'text': translated, 'lc': TARGET},
   
}
   
return render_template('index.html', **context)

تؤدي الوظيفة الأساسية إلى أخذ البيانات التي أدخلها المستخدم واستدعاء واجهة برمجة التطبيقات Translation API لتنفيذ المهام الصعبة. لنحلل هذا الأمر:

  1. تحقَّق لمعرفة ما إذا كانت الطلبات واردة من دوال Cloud باستخدام المتغيّر local_request. ترسل Cloud Functions في عنصر "طلب Flask" الخاص بها، في حين سيحصل جميع المستخدمين الآخرين (الذين يتم تشغيلهم محليًا أو النشر على App Engine أو Cloud Run) على كائن الطلب مباشرةً من Flask.
  2. أعِد ضبط المتغيّرات الأساسية للنموذج. هذا بشكل أساسي لطلبات GET حيث إن طلبات POST ستحتوي على بيانات تحل محلها.
  3. أما إذا كانت حالة طلب POST، فاستخدِم النص لترجمته وأنشئ بنية JSON تمثّل متطلبات البيانات الوصفية لواجهة برمجة التطبيقات. بعد ذلك، يمكنك طلب واجهة برمجة التطبيقات، والعودة إلى إصدار سابق من واجهة برمجة التطبيقات إذا كان المستخدم يستخدِم مكتبة قديمة.
  4. بغض النظر عن ذلك، يجب تنسيق النتائج الفعلية (POST) أو عدم وجود بيانات (GET) في سياق النموذج وعرضها.

يوجد الجزء المرئي من التطبيق في ملف النموذج index.html. يعرض هذا الزر أي نتائج مترجَمة سابقًا (تكون فارغة في الحالات الأخرى) متبوعة بالنموذج الذي يطلب ترجمة المحتوى:

<!doctype html>
<html><head><title>My Google Translate 1990s</title><body>
<h2>My Google Translate (1990s edition)</h2>

{% if trans['text'] %}
   
<h4>Previous translation</h4>
   
<li><b>Original</b>:   {{ orig['text'] }}  (<i>{{ orig['lc'][0] }}</i>)</li>
   
<li><b>Translated</b>: {{ trans['text'] }} (<i>{{ trans['lc'][0] }}</i>)</li>
{% endif %}

<h4>Enter <i>{{ orig['lc'][1] }}</i> text to translate to <i>{{ trans['lc'][1] }}</i>:</h4>
<form method="POST"><input name="text"><input type="submit"></form>
</body></html>

6. نشر الخدمة

أنت الآن جاهز لنشر خدمة الترجمة في Cloud Run من خلال تنفيذ الأمر التالي:

gcloud run deploy translate --source . --allow-unauthenticated --platform managed

يجب أن تظهر النتيجة على النحو التالي وتقدم بعض المطالبات للخطوات التالية:

$ gcloud run deploy translate --source . --allow-unauthenticated --platform managed
Please specify a region:
 [1] asia-east1
 [2] asia-east2
. . . (other regions) . . .
 [28] us-west4
 [29] cancel
Please enter your numeric choice:  REGION_CHOICE

To make this the default region, run `gcloud config set run/region REGION`.

Deploying from source requires an Artifact Registry repository to
store build artifacts. A repository named [cloud-run-source-deploy] in
 region [REGION] will be created.

Do you want to continue (Y/n)?

This command is equivalent to running "gcloud builds submit --pack image=[IMAGE] ." and "gcloud run deploy translate --image [IMAGE]"

Building . . . and deploying container to Cloud Run service [translate] in project [PROJECT_ID] region [REGION]
✓ Building and deploying... Done.
  ✓ Creating Container Repository...
  ✓ Uploading sources...
  ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/60e1b
  9bb-b991-4b4e-8d8a-HASH?project=PROJECT_NUMBER].
  ✓ Creating Revision...
  ✓ Routing traffic...
  ✓ Setting IAM Policy...
Done.
Service [translate] revision [translate-00001-xyz] has been deployed and is serving 100 percent of traffic.
Service URL: https://SVC_NAME-HASH-REG_ABBR.a.run.app

والآن بعد أن أصبح تطبيقك متاحًا على مستوى العالم في جميع أنحاء العالم، من المفترض أن تتمكّن من الوصول إليه على عنوان URL الذي يحتوي على رقم تعريف مشروعك كما هو موضَّح في مخرجات عملية النشر:

169f6edf5f7d2068.png

يجب ترجمة أي نص لإتمام عملية الإعداد.

31554e71cb80f1b4.png

7. الخاتمة

تهانينا! لقد تعلمت كيفية تمكين Cloud Translation API والحصول على بيانات الاعتماد اللازمة ونشر تطبيق ويب بسيط على Python 2 Cloud Run. يمكنك معرفة المزيد من المعلومات عن عملية النشر هذه من هذا الجدول في المستودع.

تَنظيم

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

ومع ذلك، إذا لم تكن مستعدًا للانتقال إلى البرنامج التعليمي التالي أو إذا كنت قلقًا بشأن اكتشاف الإنترنت للتطبيق الذي نشرته للتو، يمكنك إيقاف تطبيق App Engine أو حذف دالتك السحابية أو إيقاف خدمة تشغيل السحابة الإلكترونية لتجنب تحمُّل الرسوم. عندما تكون مستعدًا للانتقال إلى الدرس التطبيقي التالي حول الترميز، يمكنك إعادة تفعيله. من ناحية أخرى، إذا كنت لا تريد مواصلة استخدام هذا التطبيق أو الدروس التطبيقية الأخرى حول الترميز وأردت حذف جميع البيانات بالكامل، يمكنك إيقاف مشروعك.

بالإضافة إلى ذلك، إنّ النشر على منصة حوسبة بدون خادم في Google Cloud يؤدي إلى تحمُّل تكاليف بسيطة لإنشاء المحتوى وتخزينه. تمتلك خدمة Cloud Build حصتها المجانية الخاصة، كما هي الحال في Cloud Storage. لمزيد من الشفافية، تنشئ Cloud Build صورة تطبيقك، ويتم تخزينها في Cloud Container Registry أو Artifact Registry، الذي يليه. كما يستهلك تخزين تلك الصورة بعضًا من هذه الحصة كما هو الحال مع مخرجات الشبكة عند نقل تلك الصورة إلى الخدمة. ومع ذلك، قد تكون مقيمًا في منطقة لا يتوفر بها هذا المستوى المجاني، لذا عليك الانتباه إلى استخدام مساحة التخزين لتقليل التكاليف المحتملة.

8. مراجع إضافية

في الأقسام التالية، يمكنك العثور على مواد قراءة إضافية بالإضافة إلى تمارين موصى بها لزيادة معرفتك المكتسبة من إكمال هذا البرنامج التعليمي.

دراسة إضافية

الآن بعد أن أصبحت لديك بعض الخبرة في استخدام واجهة برمجة التطبيقات Translation API، حان وقت إجراء بعض التمارين الإضافية لتطوير مهاراتك بشكل أكبر. لمتابعة مسارك التعليمي، عدّل نموذج التطبيق للقيام بما يلي:

  1. أكمِل جميع الإصدارات الأخرى من هذا الدرس التطبيقي حول الترميز للتشغيل محليًا أو للنشر على أنظمة الحوسبة الأساسية بدون خوادم في Google Cloud (يمكنك الاطّلاع على repo README).
  2. أكمل هذا البرنامج التعليمي باستخدام لغة برمجة أخرى.
  3. قم بتغيير هذا التطبيق بحيث يدعم لغات مصدر أو هدف مختلفة.
  4. ترقية هذا التطبيق لترجمة النص إلى أكثر من لغة واحدة تغيير ملف القالب لتظهر قائمة منسدلة للغات الهدف المدعومة.

مزيد من المعلومات

Google App Engine

وظائف Google Cloud

تشغيل السحابة الإلكترونية من Google

Google Cloud Buildpacks وContainer Registry و Artifact Registry

ترجمة Google Cloud وGoogle ML Kit

منتجات/صفحات Google Cloud الأخرى

بايثون وقارورة

الترخيص

هذا البرنامج التعليمي مرخّص بموجب ترخيص Creative Commons Attribution 2.0 عام، في حين أن رمز المصدر في المستودع مرخص بموجب Apache 2.