نحوه استفاده از App Engine Memcache در برنامه های Flask (ماژول 12)

۱. مرور کلی

مجموعه آزمایشگاه‌های کد Serverless Migration Station (آموزش‌های عملی و خودآموز) و ویدیوهای مرتبط با آن ، با هدف کمک به توسعه‌دهندگان Google Cloud serverless برای مدرن‌سازی برنامه‌هایشان، با راهنمایی آنها در طول یک یا چند مهاجرت، و در درجه اول دور شدن از سرویس‌های قدیمی، ارائه می‌شوند. انجام این کار، برنامه‌های شما را قابل حمل‌تر می‌کند و گزینه‌ها و انعطاف‌پذیری بیشتری به شما می‌دهد و شما را قادر می‌سازد تا با طیف وسیع‌تری از محصولات Cloud ادغام شده و به آنها دسترسی داشته باشید و به راحتی به نسخه‌های جدیدتر زبان ارتقا دهید. در حالی که در ابتدا بر روی اولین کاربران Cloud، در درجه اول توسعه‌دهندگان App Engine (محیط استاندارد)، تمرکز دارد، این مجموعه به اندازه کافی گسترده است که شامل سایر پلتفرم‌های serverless مانند Cloud Functions و Cloud Run یا در صورت لزوم، هر جای دیگری نیز می‌شود.

این آزمایشگاه کد به شما آموزش می‌دهد که چگونه App Engine Memcache را به برنامه نمونه از آزمایشگاه کد ماژول ۱ اضافه کرده و از آن استفاده کنید. ما استفاده از Memcache را در این آموزش ماژول ۱۲ اضافه می‌کنیم و سپس در ماژول ۱۳ به Cloud Memorystore مهاجرت می‌کنیم .

یاد خواهید گرفت که چگونه

  • از API/کتابخانه‌ی App Engine Memcache استفاده کنید
  • افزودن قابلیت ذخیره‌سازی موقت (caching) به یک برنامه‌ی پایه‌ی Python 2 Flask App Engine NDB

آنچه نیاز دارید

نظرسنجی

چگونه از این آموزش استفاده خواهید کرد؟

فقط تا انتها بخوانید آن را بخوانید و تمرین‌ها را انجام دهید

تجربه خود را با پایتون چگونه ارزیابی می‌کنید؟

تازه کار متوسط ماهر

تجربه خود را در استفاده از خدمات ابری گوگل چگونه ارزیابی می‌کنید؟

تازه کار متوسط ماهر

۲. پیشینه

برای مهاجرت از App Engine Memcache، نحوه‌ی استفاده از آن را به برنامه‌ی Flask و App Engine NDB موجود که از codelab ماژول ۱ حاصل شده است، اضافه کنید. برنامه‌ی نمونه، ده بازدید اخیر را به کاربر نمایش می‌دهد. اگر همان کاربر مرورگر خود را رفرش کند، ایجاد مداوم موجودیت‌های بازدید جدید و واکشی آخرین بازدیدها از Datastore بهینه نیست، بنابراین ما قصد داریم آن بازدیدهای اخیر را ذخیره کنیم.

اگر همان بازدیدکننده به صفحه مراجعه کند، آن بازدیدها از حافظه پنهان (cache) بازگردانده می‌شوند. اگر کاربر جدیدی از سایت بازدید کند یا یک ساعت گذشته باشد، حافظه پنهان پاک شده و با جدیدترین ورودی‌ها جایگزین می‌شود (و نیازی به ذکر بازدید جدیدی که ثبت شده نیست). با پیاده‌سازی این ادغام App Engine Memcache، می‌توانیم آن را در آزمایشگاه کد بعدی (ماژول ۱۳) به Cloud Memorystore منتقل کنیم.

این آموزش شامل مراحل زیر است:

  1. راه‌اندازی/پیش‌پردازش
  2. پیکربندی را به‌روزرسانی کنید
  3. اصلاح کد برنامه

۳. تنظیمات/پیش‌پردازش

قبل از اینکه به بخش اصلی آموزش برسیم، بیایید پروژه خود را راه‌اندازی کنیم، کد را دریافت کنیم، سپس برنامه پایه را مستقر کنیم تا بدانیم که با کد کار را شروع کرده‌ایم.

۱. پروژه راه‌اندازی

اگر ماژول ۱ codelab را تکمیل کرده‌اید، توصیه می‌کنیم از همان پروژه (و کد) دوباره استفاده کنید. همچنین می‌توانید یک پروژه کاملاً جدید ایجاد کنید یا از یک پروژه موجود دیگر دوباره استفاده کنید. مطمئن شوید که پروژه دارای یک حساب صورتحساب فعال است و App Engine فعال است.

۲. نمونه برنامه پایه را دریافت کنید

یکی از پیش‌نیازهای این آزمایشگاه کد، داشتن یک برنامه نمونه ماژول ۱ است که کار کند. اگر یکی از آنها را ندارید، قبل از ادامه کار، هر یک از آموزش‌ها (لینک‌های بالا) را کامل کنید. در غیر این صورت، اگر از قبل با محتوای آن آشنا هستید، می‌توانید با کد ماژول ۱ زیر شروع کنید.

چه از کد خودتان استفاده کنید و چه از کد ما، کد ماژول ۱ جایی است که ما شروع خواهیم کرد. این آزمایشگاه کد، شما را در هر مرحله راهنمایی می‌کند و در نهایت کدی شبیه به کد موجود در پوشه مخزن ماژول ۱۱ (FINISH) ارائه می‌دهد.

دایرکتوری فایل‌های شروع ماژول ۱ (مال شما یا مال ما) باید به این شکل باشد:

$ ls
README.md               main.py                 templates
app.yaml                requirements.txt

۳. (دوباره) استقرار برنامه پایه

مراحل مقدماتی باقی مانده برای اجرا:

  1. با ابزار خط فرمان gcloud دوباره آشنا شوید
  2. برنامه نمونه را با استفاده از gcloud app deploy دوباره مستقر کنید
  3. تأیید کنید که برنامه بدون مشکل در App Engine اجرا می‌شود.

زمانی که این مراحل را با موفقیت انجام دادید و دیدید که برنامه وب شما کار می‌کند (با خروجی مشابه زیر)، آماده‌اید تا از قابلیت ذخیره‌سازی موقت (caching) به برنامه خود اضافه کنید.

a7a9d2b80d706a2b.png

۴. به‌روزرسانی پیکربندی

هیچ تغییری در فایل‌های پیکربندی استاندارد App Engine ( app.yaml ، requirements.txt ، appengine_config.py ) لازم نیست.

۵. فایل‌های برنامه را تغییر دهید

از آنجا که ما فقط یک API مربوط به App Engine اضافه می‌کنیم، هیچ بسته خارجی درگیر نیست، به این معنی که هیچ فایل پیکربندی ( app.yaml ، requirements.txt ، appengine_config.py ) نیازی به به‌روزرسانی ندارد. فقط یک فایل برنامه، main.py ، وجود دارد، بنابراین همه تغییرات در این بخش فقط بر آن فایل تأثیر می‌گذارند.

واردات

مهم‌ترین مرحله، وارد کردن کتابخانه Memcache، google.appengine.api.memcache ، است. از آنجایی که قرار است آخرین بازدیدها را به مدت یک ساعت ذخیره کنیم، بیایید یک ثابت برای تعداد ثانیه‌ها در یک ساعت نیز اضافه کنیم. در زیر، کد شما قبل و این تغییر به این شکل است:

قبل از:

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 memcache
from google.appengine.ext import ndb

app = Flask(__name__)
HOUR = 3600

افزودن قابلیت ذخیره‌سازی با پشتیبانی از Memcache

مهم‌ترین تغییر، اضافه کردن قابلیت ذخیره‌سازی موقت (caching) به برنامه‌مان است. به طور خاص، باید جدیدترین بازدیدها را ذخیره کنیم، بررسی کنیم که آیا بازدیدهای ذخیره‌شده در حافظه پنهان (cache) در دسترس هستند یا خیر، و سعی کنیم تا حد امکان از نتایج ذخیره‌شده با توجه به برنامه‌مان استفاده کنیم. اینها مراحلی هستند که برنامه برای رسیدن به هدف ما طی خواهد کرد:

  1. بازدید فعلی را تنظیم کنید و آن را visitor بنامید
  2. تلاش برای دریافت آخرین visits از حافظه پنهان
  3. اگر حافظه پنهان خالی باشد یا آخرین بازدیدکننده ( visits[0]['visitor'] ) با visitor فعلی متفاوت باشد: این جدیدترین بازدید را ذخیره کنید، آخرین بازدیدها را دریافت کنید و آنها را به مدت یک ساعت در حافظه پنهان قرار دهید.
  4. نمایش visits کاربر از طریق قالب وب

قبل و بعد از این به‌روزرسانی‌ها را در اینجا مشاهده می‌کنید:

قبل از:

@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'
    # check for (hour-)cached visits
    ip_addr, usr_agt = request.remote_addr, request.user_agent
    visitor = '{}: {}'.format(ip_addr, usr_agt)
    visits = memcache.get('visits')

    # register visit & run DB query if cache empty or new visitor
    if not visits or visits[0]['visitor'] != visitor:
        store_visit(ip_addr, usr_agt)
        visits = list(fetch_visits(10))
        memcache.set('visits', visits, HOUR)  # set() not add()

    return render_template('index.html', visits=visits)

در اینجا تصویری از تغییرات ایجاد شده را مشاهده می‌کنید:

b1242503602f7bf0.png

این پایان تمام تغییرات لازم برای افزودن استفاده از memcache App Engine به برنامه نمونه ماژول 1 است. بیایید این برنامه را بسازیم و مستقر کنیم تا ببینیم چگونه کار می‌کند!

۶. خلاصه/پاکسازی

این بخش، این آزمایشگاه کد را با استقرار برنامه، تأیید عملکرد آن طبق برنامه و در هر خروجی منعکس‌شده، به پایان می‌رساند. پس از اعتبارسنجی برنامه، مراحل پاکسازی را انجام داده و مراحل بعدی را در نظر بگیرید.

استقرار و تأیید برنامه

برنامه خود را با استفاده از gcloud app deploy دوباره مستقر کنید و تأیید کنید که برنامه کار می‌کند. اکنون کد شما باید با آنچه در FINISH، پوشه Module 12، است، مطابقت داشته باشد. خروجی باید با برنامه Module 1 که قبلاً مستقر کرده‌اید، یکسان باشد:

a7a9d2b80d706a2b.png

تنها کاری که ما انجام دادیم، افزایش سرعت تجربه کاربری برای همان کاربر بود. وقتی صفحه تازه می‌شود، باید نتایج را مستقیماً از حافظه پنهان دریافت کنید، که نه بازدید جدیدی ایجاد می‌کند و نه باعث می‌شود Datastore واکشی شود.

تبریک می‌گوییم که بخش کدنویسی ماژول ۱۲ را برای افزودن استفاده از سرویس memcache موتور App به برنامه نمونه خود تکمیل کردید. اکنون می‌توانید این برنامه پایتون ۲ را در مرحله جایزه به پایتون ۳ منتقل کنید.

تمیز کردن

عمومی

اگر فعلاً کارتان تمام است، توصیه می‌کنیم برنامه App Engine خود را غیرفعال کنید تا از پرداخت هزینه جلوگیری شود. با این حال، اگر می‌خواهید بیشتر آزمایش یا تجربه کنید، پلتفرم App Engine سهمیه رایگان دارد و بنابراین تا زمانی که از آن سطح استفاده تجاوز نکنید، نباید هزینه‌ای از شما دریافت شود. این هزینه برای محاسبات است، اما ممکن است برای سرویس‌های مربوطه App Engine نیز هزینه‌هایی وجود داشته باشد، بنابراین برای اطلاعات بیشتر به صفحه قیمت‌گذاری آن مراجعه کنید. اگر این مهاجرت شامل سایر سرویس‌های ابری باشد، هزینه آنها جداگانه محاسبه می‌شود. در هر صورت، در صورت لزوم، به بخش "ویژه این codelab" در زیر مراجعه کنید.

برای روشن شدن کامل موضوع، استقرار در یک پلتفرم محاسباتی بدون سرور Google Cloud مانند App Engine هزینه‌های ساخت و ذخیره‌سازی کمی را متحمل می‌شود. 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 *ation شما بستگی دارند، برای مثال، اگر برنامه شما در ایالات متحده میزبانی می‌شود، " us " خواهد بود.

از طرف دیگر، اگر قصد ندارید با این برنامه یا سایر آزمایشگاه‌های کد مهاجرت مرتبط ادامه دهید و می‌خواهید همه چیز را به طور کامل حذف کنید، پروژه خود را ببندید .

مخصوص این آزمایشگاه کد

سرویس‌های ذکر شده در زیر مختص این codelab هستند. برای اطلاعات بیشتر به مستندات هر محصول مراجعه کنید:

  • سرویس App Engine Memcache در دو نسخه مختلف ارائه می‌شود که هر کدام ساختار قیمت‌گذاری خاص خود را دارند، بنابراین شما باید میزان استفاده از آن را در ارتباط با صورتحساب پیگیری کنید.
  • سرویس App Engine Datastore توسط Cloud Datastore (Cloud Firestore در حالت Datastore) ارائه می‌شود که یک نسخه رایگان نیز دارد؛ برای اطلاعات بیشتر به صفحه قیمت‌گذاری آن مراجعه کنید.

مراحل بعدی

مهاجرت منطقی بعدی که باید در نظر گرفته شود، در ماژول ۱۳ پوشش داده شده است و به توسعه‌دهندگان نشان می‌دهد که چگونه از سرویس memcache App Engine به Cloud Memorystore مهاجرت کنند. این مهاجرت‌ها همگی اختیاری هستند و برای کاربرانی که مایل به انجام مراحل مختلف برای مدرن‌سازی برنامه‌های خود هستند، در دسترس هستند. سرویس Cloud Memorystore به دلایل زیادی یک ارتقاء قابل توجه برای memcache App Engine محسوب می‌شود:

  • Cloud Memorystore بدون سرور نیست. این بدان معناست که شما باید یک سرور برای حافظه پنهان اختصاص دهید. Cloud Memorystore همچنین ردیف رایگان ندارد. هر دوی این عوامل می‌توانند تأثیر قابل توجهی بر هزینه داشته باشند.
  • Cloud Memorystore از دو مکانیزم ذخیره‌سازی اساسی (موتورهای ذخیره‌سازی موقت) یعنی Redis و Memcached پشتیبانی می‌کند.
  • Cloud Memorystore (برای Redis) مجموعه ویژگی‌های بسیار غنی‌تر و عمیق‌تری نسبت به App Engine Memcache دارد.
  • برای استفاده از Cloud Memorystore، باید یک سرور Cloud Memorystore راه‌اندازی کنید، آن را به شبکه Google Cloud VPC اضافه کنید، سپس برنامه App Engine خود را طوری تنظیم کنید که از آن شبکه برای ارتباط با سرور Memorystore شما استفاده کند.

اگر احساس نمی‌کنید به تمام ویژگی‌های موجود در Cloud Memorystore نیاز دارید یا نگران تأثیر آن بر هزینه هستید، می‌توانید از App Engine Memcache استفاده کنید.

فراتر از ماژول ۱۳، مجموعه‌ای کامل از مهاجرت‌های ممکن دیگر مانند Cloud NDB و Cloud Datastore یا Cloud Tasks وجود دارد. همچنین مهاجرت‌های بین محصولی به Cloud Run و Cloud Functions نیز وجود دارد. همه آنها را در مخزن مهاجرت خواهید یافت.

یکی دیگر از مراحل احتمالی بعدی، انتقال به پایتون ۳ است که در بخش بعدی به عنوان یک مرحله اختیاری پوشش داده شده است.

۷. نکته‌ی اضافه: مهاجرت به پایتون ۳

نمای کلی

این بخش شامل محتوای اضافی اختیاری است که برنامه ماژول ۱۲ را که در بالا به پایان رساندیم به پایتون ۳ منتقل می‌کند. ما با پیکربندی شروع می‌کنیم و به دنبال آن برنامه را می‌آوریم.

ساده‌سازی app.yaml

یکی از مزایای زمان اجرای پایتون ۳ این است که app.yaml می‌تواند به طور قابل توجهی ساده شود.

قبل از:

در زیر آنچه در app.yaml در پایان ماژول ۱۲ آمده است، آمده است:

runtime: python27
threadsafe: yes
api_version: 1

handlers:
- url: /.*
  script: main.app

از آنجا که محیط اجرایی پایتون ۳ به چارچوب‌های وب نیاز دارد تا مسیریابی خود را انجام دهند، تمام کنترل‌کننده‌های مسیر در app.yaml باید به auto تغییر داده شوند. اگر هیچ فایل استاتیکی ارائه نشده باشد، کاربران می‌توانند کل بخش handlers: را حذف کنند. همچنین، threadsafe و api_version منسوخ شده‌اند .

بعد از:

با تغییرات مورد نیاز که توضیح داده شد، این جایگزین app.yaml برای پایتون ۳ است:

runtime: python39
app_engine_apis: true

تنها خطی که نیاز به توضیح دارد app_engine_apis: true است. هنگامی که سرویس‌های قدیمی App Engine در سال ۲۰۲۱ برای نسل دوم زمان‌های اجرا در دسترس قرار گرفتند ، برخی از زمان‌های اجرا، از جمله پایتون ۳، برای دسترسی به APIهایی مانند ndb ، taskqueue و memcache به bootstrapping اضافی نیاز دارند. این خط در پیکربندی به همین منظور عمل می‌کند.

الزامات به‌روزرسانی.txt

راه‌اندازی مجدد دیگری از APIهای اصلی در requirements.txt مورد نیاز است: دسترسی به SDK جدید App Engine باید لحاظ شود.

قبل از:

در زیر آنچه در app.yaml در پایان ماژول ۱۲ آمده است، آمده است:

flask

بعد از:

به سادگی App Engine Python SDK را اضافه کنید، و باید موارد زیر را داشته باشید:

flask
appengine-python-standard

appengine_config.py و lib را حذف کنید

نسل بعدی زمان‌های اجرای App Engine، استفاده از بسته‌های شخص ثالث را اصلاح می‌کند:

  • کتابخانه‌های داخلی، کتابخانه‌هایی هستند که توسط گوگل بررسی و در سرورهای App Engine در دسترس قرار گرفته‌اند، احتمالاً به این دلیل که حاوی کد C/C++ هستند که توسعه‌دهندگان اجازه ندارند آن را در فضای ابری مستقر کنند - این کتابخانه‌ها دیگر در زمان‌های اجرای نسل دوم در دسترس نیستند.
  • کپی کردن کتابخانه‌های غیر داخلی (که گاهی اوقات "فروشی" یا "خود-بسته‌بندی" نامیده می‌شوند) دیگر در زمان‌های اجرای نسل دوم مورد نیاز نیست. در عوض، آنها باید در requirements.txt فهرست شوند، جایی که سیستم ساخت به طور خودکار آنها را از طرف شما در زمان استقرار نصب می‌کند.

در نتیجه‌ی این تغییرات در مدیریت بسته‌های شخص ثالث، نه فایل appengine_config.py و نه پوشه‌ی lib مورد نیاز نیستند، بنابراین آن‌ها را حذف کنید. در زمان‌های اجرای نسل دوم، App Engine به طور خودکار بسته‌های شخص ثالث ذکر شده در requirements.txt را نصب می‌کند. خلاصه:

  1. کتابخانه‌های خود-بسته‌بندی‌شده یا کپی‌شده از طرف شخص ثالث ممنوع است؛ آنها را در requirements.txt فهرست کنید.
  2. بدون pip install در پوشه lib ، به این معنی که دوره پوشه lib وجود ندارد
  3. عدم فهرست‌بندی کتابخانه‌های داخلی شخص ثالث (بنابراین بخش libraries وجود ندارد) در app.yaml ؛ فهرست آنها در requirements.txt
  4. عدم وجود کتابخانه‌های شخص ثالث برای ارجاع از برنامه شما به این معنی است که فایل appengine_config.py وجود ندارد.

تنها الزام توسعه‌دهنده، فهرست کردن تمام کتابخانه‌های شخص ثالث مورد نظر در requirements.txt است.

به‌روزرسانی برنامه برای استفاده از App Engine SDK

همانطور که در بالا ذکر شد، برنامه‌های پایتون ۳ برای دسترسی به سرویس‌های همراه App Engine نیاز به اصلاحاتی دارند:

  1. بسته نرم‌افزاری موتور برنامه (SDK) (در requirements.txt )
  2. فعال کردن SDK موتور برنامه (App Engine SDK) (در app.yaml )
  3. شیء WSGI را در main.py قرار دهید.

جفت اول در بالا تکمیل شد، بنابراین آخرین الزام به‌روزرسانی main.py است.

قبل از:

در زیر main.py پایتون ۲ در پایان ماژول ۱۲ آمده است:

from flask import Flask, render_template, request
from google.appengine.api import memcache
from google.appengine.ext import ndb

app = Flask(__name__)
HOUR = 3600

بعد از:

برای پورت پایتون ۳، SDK را وارد کنید و شیء برنامه Flask را با آن (پوشش SDK) بپوشانید، که نتیجه آن به صورت زیر خواهد بود:

from flask import Flask, render_template, request
from google.appengine.api import memcache, wrap_wsgi_app
from google.appengine.ext import ndb

app = Flask(__name__)
app.wsgi_app = wrap_wsgi_app(app.wsgi_app)
HOUR = 3600

توسعه‌دهندگان باید هنگام انتقال از نسخه ۲.x به نسخه ۳.x، این تغییرات را در برنامه‌های پایتون خود اعمال کنند تا به سرویس‌های همراه دسترسی داشته باشند . اگر از Flask استفاده نمی‌کنید، نمونه‌های Django و Pyramid نیز در مستندات وجود دارد. اگر کد پایتون ۲ شما یک برنامه وب نیست، فقط اضافه کردن بسته SDK هنگام انتقال به پایتون ۳ کافی است. کد برنامه ما در ابتدا برای کار تحت پایتون ۲ و ۳ ساخته شده است، بنابراین هیچ تغییر سازگاری اضافی لازم نیست.

استقرار برنامه

پس از تکمیل تغییرات فوق، می‌توانید برنامه نمونه به‌روزرسانی‌شده را مستقر کنید. (هنگام استقرار نسخه پایتون ۳ برنامه خود بر روی نسخه اصلی پایتون ۲ در همان پروژه GCP مشکلی وجود ندارد.) رفتار برنامه باید یکسان باقی بماند. اگر نیاز دارید برنامه به‌روزرسانی‌شده خود را با برنامه ما مقایسه کنید، به پوشه ماژول ۱۲b در مخزن مهاجرت مراجعه کنید. برای کسب اطلاعات بیشتر در مورد پشتیبانی از سرویس‌های همراه App Engine در جدیدترین زمان‌های اجرا مانند پایتون ۳، به اطلاعیه راه‌اندازی ویژگی و همچنین آزمایشگاه کد ماژول ۱۷ مراجعه کنید.

تبریک می‌گویم که مرحله‌ی اضافی در ماژول ۱۲ را به پایان رساندید! همچنین به مستندات مربوط به آماده‌سازی فایل‌های پیکربندی برای زمان اجرای پایتون ۳ مراجعه کنید. برای مراحل بعدی و پاکسازی، بخش خلاصه/پاکسازی بالا را مرور کنید.

۸. منابع اضافی

در زیر منابع بیشتری برای توسعه‌دهندگان جهت بررسی بیشتر این ماژول مهاجرت یا ماژول‌های مرتبط و همچنین محصولات مرتبط فهرست شده است. این منابع شامل مکان‌هایی برای ارائه بازخورد در مورد این محتوا، لینک‌هایی به کد و مستندات مختلفی است که ممکن است برای شما مفید باشند.

مشکلات/بازخوردهای Codelab

اگر در این آزمایشگاه کد مشکلی پیدا کردید، لطفاً قبل از ثبت، ابتدا مشکل خود را جستجو کنید. لینک‌های جستجو و ایجاد مشکلات جدید:

منابع مهاجرت

لینک‌های پوشه‌های مخزن ماژول ۲ (START) و ماژول ۱۲ (FINISH) را می‌توانید در جدول زیر پیدا کنید. همچنین می‌توانید از مخزن تمام مهاجرت‌های Codelab مربوط به App Engine که می‌توانید آن‌ها را کلون کنید یا یک فایل ZIP دانلود کنید، به آن‌ها دسترسی داشته باشید.

کدلب

پایتون ۲

پایتون ۳

ماژول ۱

کد

کد (در این آموزش نمایش داده نشده است)

ماژول ۱۲ (این آزمایشگاه کد)

کد

کد

مراجع آنلاین

در زیر منابع آنلاینی وجود دارد که ممکن است برای این آموزش مرتبط باشند:

موتور برنامه

فروشگاه حافظه ابری و فروشگاه داده ابری

سایر اطلاعات ابری

ویدیوها

مجوز

این اثر تحت مجوز عمومی Creative Commons Attribution 2.0 منتشر شده است.