1. סקירה כללית
סדרת הServerless Migration Station של Codelabs (מדריכים מעשיים בקצב עצמי) וסרטונים קשורים נועדו לעזור להעביר מפתחים ללא שרת (serverless) של Google Cloud, באמצעות העברת אפליקציות מדור קודם באמצעות שירותי Google Cloud. כך האפליקציות שלכם יהיו יותר ניידות ויהיו לכם יותר אפשרויות וגמישות, כך שתוכלו להשתלב עם מגוון רחב יותר של מוצרי Cloud ולגשת אליהם בקלות, ולהשדרג בקלות רבה יותר לגרסאות חדשות יותר של שפות. הסדרה מתמקדת בהתחלה במשתמשי Cloud הראשונים, ובעיקר מפתחי App Engine (בסביבה סטנדרטית), אבל היא רחבה מספיק כדי לכלול פלטפורמות אחרות ללא שרת (serverless), כמו Cloud Functions ו-Cloud Run, או במקומות אחרים, אם רלוונטי.
ב-Codelab הזה מוסבר איך לכלול משימות משיכה בתור המשימה של App Engine ולהשתמש בהן באפליקציה לדוגמה מCodelab של מודול 1. אנחנו מוסיפים את השימוש במשימות משיכה למדריך של מודול 18, ואז מעבירים את השימוש הזה ל-Cloud Pub/Sub במודול 19. משתמשים שמשתמשים בתכונה 'תורי משימות' למשימות push יועברו במקום זאת ל-Cloud Tasks, ויפנו למודולים 7-9 במקום זאת.
כאן אפשר להבין איך
- שימוש ב-App Engine Task Queue API או בשירות בחבילה
- הוספת השימוש בתור השליפה לאפליקציית NDB בסיסית של Python 2 Flask App Engine NDB
למה תזדקק?
- פרויקט ב-Google Cloud Platform עם חשבון פעיל לחיוב ב-GCP
- מיומנויות בסיסיות ב-Python
- ידע בעבודה עם פקודות Linux נפוצות
- ידע בסיסי פיתוח ופריסה של אפליקציות App Engine
- אפליקציית App Engine של מודול פעיל 1 (צריך להשלים את ה-codelab שלה [מומלץ] או להעתיק את האפליקציה מהמאגר)
סקר
איך תשתמשו במדריך הזה?
איזה דירוג מגיע לדעתך לחוויה שלך עם Python?
איזה דירוג מגיע לדעתך לחוויית השימוש שלך בשירותי Google Cloud?
2. רקע
כדי לעבור ממשימות המשיכה ב'תור המשימות של App Engine', צריך להוסיף את השימוש של האפליקציה לאפליקציית Flask ו-App Engine NDB הקיימת שנוצרת מ-Codelab במודול 1. האפליקציה לדוגמה מציגה את הביקורים האחרונים של משתמש הקצה. זה בסדר, אבל מעניין יותר גם לעקוב אחרי המבקרים כדי לראות מי מבקר בתדירות הגבוהה ביותר.
אפשר אמנם להשתמש במשימות דחיפה למספר המבקרים האלה, אבל אנחנו רוצים לחלק את האחריות בין האפליקציה לדוגמה שתפקידה לרשום ביקורים ולהשיב למשתמשים באופן מיידי, לבין 'עובד/ת' ייעודי. תפקידו לחשב את ספירת המבקרים, מעבר לתהליך הרגיל של בקשה-תגובה.
כדי ליישם את העיצוב הזה, אנחנו מוסיפים שימוש בתורי משיכה לאפליקציה הראשית וגם תמיכה בפונקציונליות של העובדים. העובד יכול לפעול כתהליך נפרד (כמו מכונה בקצה עורפי או קוד שפועל במכונה וירטואלית שתמיד פועלת), משימת cron או בקשת HTTP בסיסית בשורת הפקודה באמצעות curl
או wget
. אחרי השילוב, אפשר להעביר את האפליקציה אל Cloud Pub/Sub ב-Codelab הבא (מודול 19).
המדריך הזה כולל את השלבים הבאים:
- הגדרה/עבודה מוקדמת
- עדכון ההגדרות האישיות
- שינוי קוד האפליקציה
3. הגדרה/עבודה מוקדמת
בקטע הזה נסביר איך:
- הגדרת פרויקט ב-Cloud
- אחזור של אפליקציה בסיסית לדוגמה
- (מחדש) פריסה ואימות של אפליקציה בסיסית
השלבים האלה יעזרו לכם לוודא שאתם מתחילים עם קוד תקין.
1. הגדרת הפרויקט
אם השלמתם את Module 1 Codelab, צריך להשתמש שוב באותו פרויקט (ובקוד). לחלופין, אפשר ליצור פרויקט חדש לגמרי או להשתמש שוב בפרויקט קיים אחר. צריך לוודא שלפרויקט יש חשבון פעיל לחיוב ואפליקציית App Engine מופעלת. עליכם לאתר את מזהה הפרויקט כי תצטרכו להזין אותו כמה פעמים ב-Codelab הזה ולהשתמש בו בכל פעם שתבחינו במשתנה PROJECT_ID
.
2. אחזור של אפליקציה בסיסית לדוגמה
אחת הדרישות המוקדמות ל-Codelab הזה היא להיות אפליקציית Module App Engine פעילה 1. משלימים את Codelab של מודול 1 (מומלץ) או מעתיקים את אפליקציית מודול 1 מהמאגר. בין אם אתם משתמשים בקוד של מודול 1 שלכם או שלנו, הקוד של מודול 1 הוא המקום שבו נתחיל. ה-Codelab הזה ינחה אותך לאורך כל השלבים, ויסתיים עם קוד שדומה למה שמופיע בתיקיית המאגר של מודול 18 'FINISH'.
- START: תיקיית מודול 1 (Python 2)
- FINISH: תיקיית מודול 18 (Python 2)
- כל המאגר (לשכפול או הורדה של קובץ ZIP)
בלי קשר לאפליקציית מודול 1 שבה משתמשים, התיקייה צריכה להיראות כמו הפלט שבהמשך, אולי גם עם תיקיית lib
:
$ ls README.md appengine_config.py requirements.txt app.yaml main.py templates
3. (Re) פריסת אפליקציות בסיסיות
מבצעים את השלבים הבאים כדי לפרוס את אפליקציית מודול 1:
- אם קיימת תיקייה כזו, מוחקים את התיקייה
lib
ומריצים אותה:pip install -t lib -r requirements.txt
כדי לאכלס מחדש אתlib
. יכול להיות שתצטרכו להשתמש בפקודהpip2
במקום זאת, אם גרסת Python 2 וגם 3 מותקנות. - חשוב לוודא שהתקנתם ואתחלתם את כלי שורת הפקודה
gcloud
, ושבדקתם את השימוש בו. - אם אתם לא רוצים להזין את ה-
PROJECT_ID
בכל פעם שמופקת פקודתgcloud
, צריך להגדיר את הפרויקט ב-Cloud באמצעותgcloud config set project
PROJECT_ID
. - פריסת האפליקציה לדוגמה באמצעות
gcloud app deploy
- מוודאים שאפליקציית מודול 1 פועלת כצפוי ומציגה את הביקורים האחרונים (איור בהמשך)
4. עדכון ההגדרות האישיות
אין צורך לבצע שינויים בקובצי התצורה הרגילים של App Engine (app.yaml
, requirements.txt
, appengine_config.py
). במקום זאת, אפשר להוסיף קובץ תצורה חדש, queue.yaml
, עם התוכן הבא, ולהוסיף אותו לאותה ספרייה ברמה העליונה:
queue:
- name: pullq
mode: pull
הקובץ queue.yaml
מציין את כל תורי המשימות שקיימים באפליקציה (מלבד תור [push] default
שנוצר באופן אוטומטי על ידי App Engine. במקרה הזה יש רק תור אחד, תור משיכה בשם pullq
. כדי להשתמש ב-App Engine, צריך לציין את ההוראה mode
בתור pull
, אחרת תתבצע יצירה של 'הבאים בתור' כברירת מחדל. מידע נוסף על יצירת תורי משיכה זמין במסמכי התיעוד. אפשרויות נוספות זמינות גם בדף העזר של queue.yaml
.
צריך לפרוס את הקובץ הזה בנפרד מהאפליקציה. עדיין ייעשה שימוש ב-gcloud app deploy
אבל גם תספק את queue.yaml
בשורת הפקודה:
$ gcloud app deploy queue.yaml Configurations to update: descriptor: [/tmp/mod18-gaepull/queue.yaml] type: [task queues] target project: [my-project] WARNING: Caution: You are updating queue configuration. This will override any changes performed using 'gcloud tasks'. More details at https://cloud.google.com/tasks/docs/queue-yaml Do you want to continue (Y/n)? Updating config [queue]...⠹WARNING: We are using the App Engine app location (us-central1) as the default location. Please use the "--location" flag if you want to use a different location. Updating config [queue]...done. Task queues have been updated. Visit the Cloud Platform Console Task Queues page to view your queues and cron jobs. $
5. שינוי קוד האפליקציה
הקטע הזה כולל עדכונים לקבצים הבאים:
main.py
– הוספת תורי משיכה לאפליקציה הראשיתtemplates/index.html
– עדכון תבנית האינטרנט כדי להציג את הנתונים החדשים
ייבוא וקבועים
השלב הראשון הוא הוספת ייבוא חדש אחד ומספר קבועים כדי לתמוך בתורי משיכה:
- הוספת ייבוא של ספריית 'תור המשימות',
google.appengine.api.taskqueue
. - צריך להוסיף שלושה קבועים כדי לתמוך בהשכרה של המספר המקסימלי של משימות משיכה (
TASKS
) למשך שעה (HOUR
) מתור המשיכה שלנו (QUEUE
). - יש להוסיף קבוע כדי להציג את הביקורים האחרונים ואת המבקרים המובילים (
LIMIT
).
בהמשך מופיע הקוד המקורי והוא נראה לאחר ביצוע העדכונים האלה:
לפני:
from flask import Flask, render_template, request
from google.appengine.ext import ndb
app = Flask(__name__)
אחרי:
from flask import Flask, render_template, request
from google.appengine.api import taskqueue
from google.appengine.ext import ndb
HOUR = 3600
LIMIT = 10
TASKS = 1000
QNAME = 'pullq'
QUEUE = taskqueue.Queue(QNAME)
app = Flask(__name__)
הוספת משימת משיכה (איסוף נתונים למשימה ויצירת משימה בתור המשיכה)
מודל הנתונים Visit
לא משתנה וכך גם שליחת שאילתות על ביקורים שיוצגו ב-fetch_visits()
. השינוי היחיד שנדרש בחלק הזה של הקוד הוא בstore_visit()
. בנוסף לרישום הביקור, מוסיפים משימה לתור המשיכה עם כתובת ה-IP של המבקר כדי שהעובד יוכל להגדיל את מספר המבקרים.
לפני:
class Visit(ndb.Model):
'Visit entity registers visitor IP address & timestamp'
visitor = ndb.StringProperty()
timestamp = ndb.DateTimeProperty(auto_now_add=True)
def store_visit(remote_addr, user_agent):
'create new Visit entity in Datastore'
Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
def fetch_visits(limit):
'get most recent visits'
return Visit.query().order(-Visit.timestamp).fetch(limit)
אחרי:
class Visit(ndb.Model):
'Visit entity registers visitor IP address & timestamp'
visitor = ndb.StringProperty()
timestamp = ndb.DateTimeProperty(auto_now_add=True)
def store_visit(remote_addr, user_agent):
'create new Visit in Datastore and queue request to bump visitor count'
Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
QUEUE.add(taskqueue.Task(payload=remote_addr, method='PULL'))
def fetch_visits(limit):
'get most recent visits'
return Visit.query().order(-Visit.timestamp).fetch(limit)
יצירת מודל נתונים ופונקציית שאילתה למעקב אחר מבקרים
להוסיף מודל נתונים VisitorCount
כדי לעקוב אחרי המבקרים. צריכים להיות בו שדות עבור visitor
עצמו וגם מספר שלם counter
כדי לעקוב אחר מספר הביקורים. לאחר מכן מוסיפים פונקציה חדשה (לחלופין, היא יכולה להיות classmethod
של Python) בשם fetch_counts()
כדי לשלוח שאילתה למבקרים המובילים ולהחזיר אותם לפי הסדר, בסדר יורד. מוסיפים את המחלקה והפונקציה מתחת לגוף fetch_visits()
:
class VisitorCount(ndb.Model):
visitor = ndb.StringProperty(repeated=False, required=True)
counter = ndb.IntegerProperty()
def fetch_counts(limit):
'get top visitors'
return VisitCount.query().order(-VisitCount.counter).fetch(limit)
הוספת קוד עובד
צריך להוסיף פונקציה חדשה log_visitors()
כדי לתעד את המבקרים באמצעות בקשת GET אל /log
. היא משתמשת במילון/גיבוב כדי לעקוב אחר הספירות האחרונות של המבקרים, ומשחררת כמה שיותר משימות למשך שעה. עבור כל משימה, הוא סופר את כל הביקורים של אותו מבקר. כשיהיו ספירות בהישג יד, האפליקציה מעדכנת את כל הישויות המתאימות של VisitorCount
שכבר נמצאות ב-Datastore או יוצרת רשומות חדשות לפי הצורך. בשלב האחרון תופיע הודעת טקסט פשוטה שמציינת כמה מבקרים נרשמו מתוך מספר המשימות שעובדו. מוסיפים את הפונקציה הזו אל main.py
מתחת ל-fetch_counts()
:
@app.route('/log')
def log_visitors():
'worker processes recent visitor counts and updates them in Datastore'
# tally recent visitor counts from queue then delete those tasks
tallies = {}
tasks = QUEUE.lease_tasks(HOUR, TASKS)
for task in tasks:
visitor = task.payload
tallies[visitor] = tallies.get(visitor, 0) + 1
if tasks:
QUEUE.delete_tasks(tasks)
# increment those counts in Datastore and return
for visitor in tallies:
counter = VisitorCount.query(VisitorCount.visitor == visitor).get()
if not counter:
counter = VisitorCount(visitor=visitor, counter=0)
counter.put()
counter.counter += tallies[visitor]
counter.put()
return 'DONE (with %d task[s] logging %d visitor[s])\r\n' % (
len(tasks), len(tallies))
עדכון ה-handler הראשי בנתוני תצוגה חדשים
כדי להציג את המבקרים המובילים, צריך לעדכן את ה-handler הראשי root()
כך שיפעיל את fetch_counts()
. בנוסף, התבנית תעודכן כך שיוצגו מספר המבקרים המובילים והביקורים האחרונים. אורזים את המבקר סופר יחד עם הביקורים האחרונים מהקריאה ל-fetch_visits()
ומשחררים אותם ב-context
אחד להעברה לתבנית האינטרנט. הנה הקוד שמופיע לפני ואחרי ביצוע השינוי:
לפני:
@app.route('/')
def root():
'main application (GET) handler'
store_visit(request.remote_addr, request.user_agent)
visits = fetch_visits(10)
return render_template('index.html', visits=visits)
אחרי:
@app.route('/')
def root():
'main application (GET) handler'
store_visit(request.remote_addr, request.user_agent)
context = {
'limit': LIMIT,
'visits': fetch_visits(LIMIT),
'counts': fetch_counts(LIMIT),
}
return render_template('index.html', **context)
אלה כל השינויים הנדרשים במסגרת main.py
, וזהו ייצוג גרפי של העדכונים להמחשה שנועדה לתת לך מושג רחב על השינויים שביצעת ב-main.py
:
עדכון תבנית אינטרנט עם נתוני תצוגה חדשים
תבנית האינטרנט templates/index.html
דורשת עדכון כדי להציג את המבקרים המובילים בנוסף למטען הייעודי (payload) הרגיל של המבקרים האחרונים. משחררים את המבקרים המובילים והספירות שלהם בטבלה שבחלק העליון של הדף, וממשיכים להציג את הביקורים האחרונים כמו קודם. השינוי היחיד הוא לציין את המספר המוצג באמצעות המשתנה limit
במקום לכתוב בתוך הקוד את המספר. אלה העדכונים שצריך לבצע בתבנית האינטרנט:
לפני:
<!doctype html>
<html>
<head>
<title>VisitMe Example</title>
<body>
<h1>VisitMe example</h1>
<h3>Last 10 visits</h3>
<ul>
{% for visit in visits %}
<li>{{ visit.timestamp.ctime() }} from {{ visit.visitor }}</li>
{% endfor %}
</ul>
אחרי:
<!doctype html>
<html>
<head>
<title>VisitMe Example</title>
<body>
<h1>VisitMe example</h1>
<h3>Top {{ limit }} visitors</h3>
<table border=1 cellspacing=0 cellpadding=2>
<tr><th>Visitor</th><th>Visits</th></tr>
{% for count in counts %}
<tr><td>{{ count.visitor|e }}</td><td align="center">{{ count.counter }}</td></tr>
{% endfor %}
</table>
<h3>Last {{ limit }} visits</h3>
<ul>
{% for visit in visits %}
<li>{{ visit.timestamp.ctime() }} from {{ visit.visitor }}</li>
{% endfor %}
</ul>
סיימנו את השינויים הנדרשים, כדי להוסיף את השימוש במשימות המשיכה בתור המשימה של App Engine לאפליקציה לדוגמה של מודול 1. הספרייה שלך מייצגת עכשיו את האפליקציה לדוגמה של מודול 18 והיא אמורה להכיל את הקבצים הבאים:
$ ls README.md appengine_config.py queue.yaml templates app.yaml main.py requirements.txt
6. סיכום/ניקוי
החלק הזה מסיים את השימוש ב-Codelab על ידי פריסת האפליקציה כדי לאמת שהיא פועלת כמצופה ובכל פלט משתקף. מריצים את העובד בנפרד כדי לעבד את ספירת המבקרים. אחרי אימות האפליקציה, מומלץ לבצע את שלבי ניקוי האפליקציה ולשקול את השלבים הבאים.
פריסה ואימות של אפליקציה
חשוב לוודא שכבר הגדרתם את תור המשיכה כפי שעשינו בחלק העליון של החלק העליון של הקוד (codelab) הזה באמצעות gcloud app deploy queue.yaml
. אם סיימת את התהליך והאפליקציה לדוגמה מוכנה להפעלה, יש לפרוס את האפליקציה באמצעות gcloud app deploy
. הפלט אמור להיות זהה לאפליקציית מודול 1, אלא שעכשיו מוצג בה 'מבקרים מובילים' טבלה בחלק העליון של הדף:
למרות שחזית האינטרנט המעודכנת מציגה את המבקרים המובילים ואת הביקורים האחרונים, חשוב לזכור שמספרי המבקרים לא כוללים את הביקור הזה. האפליקציה מציגה את ספירת המבקרים הקודמים תוך כדי שחרור של משימה חדשה שמגדילה את מספר המבקרים בתור המשיכה, משימה שממתינה לעיבוד.
אפשר לבצע את המשימה בקריאה אל /log
בכמה דרכים:
- שירות לקצה העורפי של App Engine
- משרה מסוג
cron
- בדפדפן אינטרנט
- בקשת HTTP של שורת פקודה (
curl
,wget
וכו')
לדוגמה, אם משתמשים ב-curl
כדי לשלוח בקשת GET אל /log
, הפלט ייראה כך, אם הזנתם את PROJECT_ID
הפרטים הבאים:
$ curl https://PROJECT_ID.appspot.com/log DONE (with 1 task[s] logging 1 visitor[s])
לאחר מכן, הספירה המעודכנת תופיע בביקור הבא באתר. זהו!
איזה כיף! השלמת בהצלחה את השימוש בשירות המשיכה 'הבאים בתור המשימות' של App Engine לאפליקציה לדוגמה. עכשיו הכול מוכן להעברה אל Cloud Pub/Sub, Cloud NDB ו-Python 3 במודול 19.
הסרת המשאבים
כללי
אם סיימתם בינתיים, מומלץ להשבית את אפליקציית App Engine כדי להימנע מצבירת חיובים. עם זאת, אם אתם רוצים להתנסות בפיצ'רים נוספים או להתנסות בהם, בפלטפורמת App Engine יש מכסה בחינם, וכל עוד אתם לא חורגים ממכסת השימוש הזו, לא נחייב אתכם. הבקשה נועדה למחשוב, אבל ייתכן שיחולו חיובים גם על שירותים רלוונטיים של App Engine. למידע נוסף, יש לעיין בדף התמחור של האפליקציה. אם ההעברה הזו כוללת שירותי ענן אחרים, הם מחויבים בנפרד. בכל מקרה, אם רלוונטי, ראו "ספציפי ל-Codelab זה" שבהמשך.
גילוי נאות מלא, פריסה בפלטפורמת מחשוב ללא שרת (serverless) של Google Cloud, כמו App Engine, כרוכה בעלויות נמוכות של build ואחסון. ל-Cloud Build יש מכסה משלה בחינם, כמו גם ל-Cloud Storage. נפח האחסון של התמונה הזו תופס חלק מהמכסה. עם זאת, ייתכן שאתם גרים באזור שאין בו תוכנית ללא תשלום כזה, לכן כדאי שתהיו מודעים לשימוש שלכם בנפח האחסון כדי למזער את העלויות הפוטנציאליות. 'תיקיות' ספציפיות של Cloud Storage כדאי לבדוק:
console.cloud.google.com/storage/browser/LOC.artifacts.PROJECT_ID.appspot.com/containers/images
console.cloud.google.com/storage/browser/staging.PROJECT_ID.appspot.com
- הקישורים לנפח האחסון שלמעלה תלויים במאפיין
PROJECT_ID
ובמאפיין *LOC
*שלך, לדוגמה, "us
" אם האפליקציה מתארחת בארה"ב.
מצד שני, אם אתם לא מתכוונים להמשיך להשתמש באפליקציה הזו או ב-Codelabs קשורים אחרים ורוצים למחוק את הכול לחלוטין, כדאי להשבית את הפרויקט.
ספציפי ל-Codelab הזה
השירותים שמפורטים בהמשך הם ייחודיים ל-Codelab הזה. אפשר לקרוא מידע נוסף במסמכי התיעוד של כל מוצר:
- השירות 'תור המשימות של App Engine' לא כרוך בחיוב נוסף לפי דף התמחור של שירותים בחבילה מדור קודם, כמו 'תור המשימות'.
- שירות App Engine Datastore ניתן על ידי Cloud Datastore (Cloud Firestore במצב Datastore), שגם לו יש תוכנית ללא תשלום; בדף התמחור שלו יש מידע נוסף.
השלבים הבאים
בקטע "העברה", הוספת את השימוש בתור 'דחיפת תור משימות' לאפליקציה לדוגמה של מודול 1, על ידי הוספת תמיכה במעקב אחר מבקרים, ותוך יישום האפליקציה לדוגמה של מודול 18. בהעברה הבאה, צריך לשדרג את משימות המשיכה ב-App Engine ל-Cloud Pub/Sub. החל מסוף 2021, משתמשים לא נדרשים יותר לעבור ל-Cloud Pub/Sub כשמשדרגים ל-Python 3. מידע נוסף בנושא הזה מופיע בקטע הבא.
למידע על ההעברה ל-Cloud Pub/Sub, יש לעיין במודול 19 Codelab. מעבר לכך, יש גם העברות נוספות, כמו Cloud Datastore, Cloud Memorystore, Cloud Storage או Cloud Tasks (תורי דחיפה). יש גם העברות בין מוצרים ל-Cloud Run ול-Cloud Functions. אפשר לגשת לכל התוכן של תחנת המיגרציה ללא שרת (serverless) (codelabs, סרטונים, קוד מקור [אם הוא זמין]) במאגר בקוד פתוח.
7. העברה ל-Python 3
בסתיו 2021, צוות App Engine הרחיב את התמיכה ברבים מהשירותים בחבילה לזמני ריצה של דור שני (עם סביבת זמן ריצה מדור ראשון). כתוצאה מכך, לא צריך יותר לעבור משירותים בחבילה כמו 'תור המשימות של App Engine' לשירותים עצמאיים של Cloud או לשירותים של צד שלישי כמו Cloud Pub/Sub, כשמעבירים את האפליקציה ל-Python 3. כלומר, אפשר להמשיך להשתמש ב'תור המשימות' באפליקציות App Engine של Python 3 כל עוד הקוד נמצא מחדש כדי לגשת לשירותים בחבילה מהדור הבא של סביבת זמן ריצה.
תוכלו לקרוא מידע נוסף על העברת השימוש בשירותים בחבילה ל-Python 3 ב-Module 17 Codelab ובסרטון התואם שלו. הנושא הזה לא נכלל במסגרת מודול 18, אבל למטה מפורטות גרסאות Python 3 של אפליקציית מודול 1 שהועברו אל Python 3 ועדיין משתמשת ב-App Engine NDB. (בשלב מסוים, גרסת Python 3 של אפליקציית מודול 18 תהיה זמינה גם היא).
8. מקורות מידע נוספים
בהמשך מפורטים מקורות מידע נוספים למפתחים שבודקים את מודול ההעברה הזה או מוצרים קשורים, וגם מוצרים קשורים. זה כולל מקומות שבהם אפשר לספק משוב על התוכן הזה, קישורים לקוד וקטעי תיעוד שונים שעשויים להועיל.
משוב או בעיות ב-Codelab
אם נתקלתם בבעיות ב-Codelab הזה, צריך קודם לחפש את הבעיה לפני השליחה. קישורים לחיפוש וליצירת בעיות חדשות:
משאבים להעברה
בטבלה למטה מופיעים הקישורים לתיקיות המאגר של מודול 1 (START) ומודול 18 (FINISH). אפשר לגשת אליהם גם מהמאגר לכל העברות Codelab ב-App Engine. לשכפל אותו או להוריד קובץ ZIP.
Codelab | ֶPython 2 | ֶPython 3 |
code (לא מוצג במדריך הזה) | ||
יחידת לימוד 18 (Codelab זה) | לא רלוונטי |
הפניות אונליין
בהמשך מוצגים מקורות מידע שרלוונטיים למדריך הזה:
תור המשימות של App Engine
- סקירה כללית בנושא 'תור המשימות של App Engine'
- סקירה כללית על תורי המשימות של App Engine
- אפליקציה לדוגמה מלאה של תור המשימות של App Engine
- יצירת תורי משיכה בתור המשימות
- סרטון השקה של Google I/O 2011 pullQueue ( אפליקציות לדוגמה של Voicelator)
- קובץ עזר של
queue.yaml
queue.yaml
לעומת Cloud Tasks- שליפת תורי דואר למדריך להעברת נתונים (מיגרציה) ל-Pub/Sub
- תורי משיכה בתור המשימות של App Engine לדוגמת מסמכי התיעוד של Cloud Pub/Sub
פלטפורמת App Engine
מסמכי התיעוד של App Engine
זמן ריצה של Python 2 App Engine (סביבה סטנדרטית)
זמן ריצה של Python 3 App Engine (סביבה סטנדרטית)
ההבדלים בין Python 2 לבין Python 3 זמני ריצה של App Engine (סביבה רגילה)
מדריך להעברת אפליקציות מ-Python 2-3 App Engine (סביבה סטנדרטית)
מידע על תמחור ומכסות של App Engine
השקת פלטפורמת App Engine מדור שני (2018)
תמיכה לטווח ארוך בסביבות זמני ריצה מדור קודם
דוגמאות להעברת מסמכים
מידע אחר בענן
- Python ב-Google Cloud Platform
- ספריות הלקוח של Google Cloud Python
- "חינם תמיד" ב-Google Cloud שכבה
- Google Cloud SDK (כלי שורת הפקודה
gcloud
) - כל משאבי העזרה של Google Cloud
סרטונים
- תחנת העברה ללא שרת (serverless)
- קמפיינים ללא שרת (serverless)
- הרשמה למינוי Google Cloud Tech
- הרשמה ל-Google Developers
רישיון
היצירה הזו בשימוש ברישיון Creative Commons Attribution 2.0 גנרי.