گسترش پشتیبانی از خدمات همراه App Engine: قسمت 1 (ماژول 17)

۱. مرور کلی

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

پیش از این، توسعه‌دهندگان ملزم بودند قبل از اینکه بتوانند نسخه‌های زبان را ارتقا دهند، از «سرویس‌های بسته‌بندی‌شده» قدیمی App Engine مانند Datastore و Memcache مهاجرت کنند، دو تلاش بالقوه چالش‌برانگیز که پشت سر هم انجام می‌شدند. با در دسترس قرار دادن بسیاری از سرویس‌های بسته‌بندی‌شده کلیدی در سرویس نسل دوم App Engine، توسعه‌دهندگان اکنون می‌توانند برنامه‌های خود را به جدیدترین زمان‌های اجرا منتقل کنند و در عین حال به استفاده از (بیشتر) سرویس‌های بسته‌بندی‌شده ادامه دهند. این آزمایشگاه کد، شما را در ارتقاء یک برنامه نمونه از پایتون ۲ به ۳ راهنمایی می‌کند و در عین حال استفاده از سرویس بسته‌بندی‌شده Datastore (از طریق کتابخانه App Engine NDB) را حفظ می‌کند. استفاده از اکثر سرویس‌های بسته‌بندی‌شده فقط نیاز به به‌روزرسانی جزئی در کد دارد که در این آموزش به آن پرداخته خواهد شد، اما موارد دیگری نیز وجود دارند که نیاز به تغییرات گسترده‌تری دارند. این موارد توسط «بخش ۲»، یک ماژول تکمیلی و آزمایشگاه کد، پوشش داده خواهند شد.

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

  • انتقال نمونه برنامه App Engine از پایتون ۲ به ۳
  • پیکربندی برنامه را به‌روزرسانی کنید تا شامل SDK موتور برنامه (App Engine SDK) شود.
  • کد SDK را به برنامه اضافه کنید که از سرویس‌های همراه در زمان‌های اجرای نسل دوم مانند پایتون ۳ پشتیبانی می‌کند.

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

نظرسنجی

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

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

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

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

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

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

۲. پیشینه

سرویس اصلی App Engine در سال ۲۰۰۸ راه‌اندازی شد و با مجموعه‌ای از APIهای قدیمی (که اکنون به عنوان سرویس‌های همراه شناخته می‌شوند) ارائه شد تا ساخت و استقرار برنامه‌های کاربردی در سطح جهانی را برای توسعه‌دهندگان راحت کند. این سرویس‌ها شامل Datastore، Memcache و Task Queue می‌شوند. در حالی که این سرویس‌ها راحت بودند، کاربران هنگام استفاده از APIهای اختصاصی که آنها را به App Engine متصل می‌کرد، نگران قابلیت حمل برنامه‌های خود بودند و می‌خواستند برنامه‌هایشان قابل حمل‌تر باشند. این موضوع با این واقعیت همراه بود که بسیاری از این سرویس‌های همراه که به محصولات ابری مستقل خود تبدیل می‌شدند، به بلوغ رسیده بودند و تیم App Engine را بر آن داشت تا پلتفرم نسل بعدی را در سال ۲۰۱۸ بدون آنها راه‌اندازی کند .

با نگاهی سریع به امروز، توسعه‌دهندگان پایتون ۲ مشتاق ارتقا به پایتون ۳ هستند. یک برنامه ۲.x که از سرویس‌های همراه استفاده می‌کرد، قبل از اینکه بتواند برنامه‌هایش را به ۳.x منتقل کند، نیاز به مهاجرت از آن سرویس‌ها داشت که نشان‌دهنده دو مهاجرت اجباری پشت سر هم و بالقوه چالش‌برانگیز بود. برای کمک به این انتقال، تیم App Engine در پاییز ۲۰۲۱ یک "کرم‌چاله" به گذشته معرفی کرد که به برنامه‌هایی که روی runtimeهای نسل بعدی اجرا می‌شوند، اجازه می‌دهد به بسیاری از آن سرویس‌های همراه دسترسی داشته باشند. اگرچه این نسخه شامل تمام سرویس‌های موجود در runtimeهای اصلی نمی‌شود، اما بازیگران اصلی مانند Datastore، Task Queue و Memcache در دسترس هستند .

این آزمایشگاه کد، تغییرات لازم برای ارتقاء برنامه شما به پایتون ۳ را نشان می‌دهد، در حالی که استفاده از سرویس‌های همراه را حفظ می‌کند. هدف این است که برنامه‌های شما در آخرین زمان‌های اجرا اجرا شوند و به شما این امکان را بدهند که سپس از سرویس‌های همراه به معادل‌های مستقل ابری یا جایگزین‌های شخص ثالث در جدول زمانی خودتان مهاجرت کنید، نه اینکه مانعی برای ارتقاء به نسخه ۳.x باشد. در حالی که مهاجرت از سرویس‌های همراه دیگر لازم نیست، انجام این کار قابلیت حمل و انعطاف‌پذیری بیشتری را از نظر محل میزبانی برنامه‌های شما، از جمله انتقال به پلتفرم‌هایی که ممکن است بار کاری شما را بهتر تأمین کنند، یا صرفاً ماندن در App Engine در حین ارتقاء به یک نسخه زبان مدرن‌تر، همانطور که توضیح داده شد، به شما می‌دهد.

برنامه نمونه ماژول ۱ پایتون ۲ از سرویس همراه Datastore از طریق App Engine NDB استفاده می‌کند. این برنامه قبلاً فریم‌ورک‌ها را از webapp2 به Flask منتقل کرده است - که در آزمایشگاه کد ماژول ۱ تکمیل شده است - اما استفاده از Datastore آن دست نخورده باقی مانده است.

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

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

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

این بخش توضیح می‌دهد که چگونه:

  1. پروژه ابری خود را راه‌اندازی کنید
  2. دریافت برنامه نمونه پایه
  3. (دوباره)استقرار و اعتبارسنجی برنامه پایه

این مراحل تضمین می‌کنند که شما با کدی کارامد شروع می‌کنید.

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

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

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

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

صرف نظر از اینکه از کدام برنامه ماژول ۱ استفاده می‌کنید، پوشه باید مانند زیر باشد، احتمالاً شامل یک پوشه lib نیز خواهد بود:

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

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

برای (دوباره) استقرار برنامه ماژول ۱، مراحل زیر را اجرا کنید:

  1. اگر پوشه lib وجود دارد، آن را حذف کنید و pip install -t lib -r requirements.txt را برای پر کردن مجدد lib اجرا کنید. اگر پایتون ۲ و ۳ را نصب کرده‌اید، ممکن است لازم باشد از دستور pip2 استفاده کنید.
  2. مطمئن شوید که ابزار خط فرمان gcloud را نصب و راه‌اندازی اولیه کرده‌اید و نحوه‌ی استفاده از آن را بررسی کرده‌اید.
  3. اگر نمی‌خواهید PROJECT_ID خود را با هر دستور gcloud وارد کنید، پروژه Cloud خود را با gcloud config set project PROJECT_ID تنظیم کنید.
  4. برنامه نمونه را با gcloud app deploy مستقر کنید
  5. تأیید کنید که برنامه ماژول ۱ طبق انتظار و بدون مشکل در نمایش آخرین بازدیدها اجرا می‌شود (در زیر نشان داده شده است)

a7a9d2b80d706a2b.png

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

وقتی این مراحل را با موفقیت انجام دادید و دیدید که برنامه وب شما کار می‌کند، آماده‌اید تا این برنامه را به پایتون ۳ منتقل کنید، و با پیکربندی شروع کنید.

اضافه کردن SDK به requirements.txt

زمان اجرای App Engine Python 3 به طور قابل توجهی سربار استفاده از کتابخانه‌های شخص ثالث را کاهش می‌دهد. تنها کاری که لازم است انجام دهید این است که آنها را در requirements.txt فهرست کنید. برای استفاده از سرویس‌های همراه در پایتون ۳، بسته App Engine SDK، appengine-python-standard را به آن اضافه کنید. بسته SDK از ماژول ۱ به Flask متصل می‌شود:

flask
appengine-python-standard

به‌روزرسانی app.yaml

برای اعمال تغییرات پیکربندی در فایل app.yaml خود، مراحل زیر را دنبال کنید:

  1. دستورالعمل runtime را با نسخه پشتیبانی‌شده پایتون ۳ جایگزین کنید؛ برای مثال، برای پایتون ۳.۱۰، python310 را مشخص کنید.
  2. هر دو دستورالعمل threadsafe و api_version را حذف کنید زیرا هیچ‌کدام در پایتون ۳ استفاده نمی‌شوند.
  3. بخش handlers را کاملاً حذف کنید زیرا این برنامه فقط دارای script handlers است. اگر برنامه شما file handlers استاتیک دارد، آنها را در handlers دست نخورده باقی بگذارید.
  4. محیط اجرای پایتون ۳ برخلاف محیط اجرای پایتون ۲ ، از کتابخانه‌های داخلی شخص ثالث پشتیبانی نمی‌کند. اگر برنامه شما بخش libraries را در app.yaml دارد، کل بخش را حذف کنید. (بسته‌های مورد نیاز فقط باید در requirements.txt مانند کتابخانه‌های غیر داخلی فهرست شوند.) برنامه نمونه ما بخش libraries را ندارد، بنابراین به مرحله بعدی بروید.
  5. برای استفاده از آن، یک دستورالعمل app_engine_apis ایجاد کنید که روی true تنظیم شده باشد - این با اضافه کردن بسته App Engine SDK به requirements.txt بالا مطابقت دارد.

خلاصه‌ای از تغییرات مورد نیاز برای اعمال در app.yaml :

قبل از:

runtime: python27
threadsafe: yes
api_version: 1

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

بعد از:

runtime: python310
app_engine_apis: true

سایر فایل‌های پیکربندی

از آنجا که همه بسته‌های شخص ثالث فقط باید در requirements.txt فهرست شوند، مگر اینکه چیز خاصی در appengine_config.py داشته باشید، نیازی به آن نیست، بنابراین آن را حذف کنید. به طور مشابه، از آنجا که همه کتابخانه‌های شخص ثالث به طور خودکار در طول فرآیند ساخت نصب می‌شوند، نیازی به کپی یا ارائه آنها نیست، به این معنی که دیگر دستور pip install یا پوشه lib وجود ندارد، بنابراین آن را حذف کنید. خلاصه:

  • فایل appengine_config.py را حذف کنید
  • پوشه lib را حذف کنید

این تمام تغییرات پیکربندی لازم را به پایان می‌رساند.

۵. کد برنامه را تغییر دهید

دسترسی به اکثر سرویس‌های موجود در محیط زمان اجرای پایتون ۳ نیازمند یک قطعه کد کوتاه است که شیء برنامه رابط دروازه وب سرور (WSGI) را در main.py قرار می‌دهد. تابع پوشش‌دهنده google.appengine.api.wrap_wsgi_app() است و شما با وارد کردن آن و قرار دادن شیء WSGI خود در آن، از آن استفاده می‌کنید. تغییرات زیر را برای نمایش به‌روزرسانی مورد نیاز برای Flask در main.py اعمال کنید:

قبل از:

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

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

برای مثال‌های WSGI-wrapping برای سایر فریم‌ورک‌های پایتون، به مستندات مراجعه کنید.

اگرچه این مثال برای دسترسی برنامه شما به اکثر سرویس‌های همراه در پایتون ۳ کار می‌کند، اما موارد دیگری مانند Blobstore و Mail به کد اضافی نیاز دارند. ما این نمونه‌ها را در یک ماژول مهاجرت دیگر پوشش خواهیم داد.

این پایان تمام تغییرات لازم برای افزودن استفاده از سرویس‌های همراه App Engine به برنامه نمونه ماژول ۱ است. این برنامه از قبل با پایتون ۲ و ۳ سازگار است، بنابراین هیچ تغییر اضافی برای انتقال آن به پایتون ۳ به جز آنچه قبلاً در پیکربندی انجام داده‌اید، وجود ندارد. مرحله آخر: این برنامه اصلاح‌شده را در زمان اجرای نسل بعدی App Engine Python 3 مستقر کنید و تأیید کنید که به‌روزرسانی‌ها با موفقیت انجام شده‌اند.

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

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

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

برنامه پایتون ۳ را با gcloud app deploy مستقر کنید و تأیید کنید که برنامه مانند پایتون ۲ کار می‌کند. هیچ یک از عملکردها تغییر نمی‌کند، بنابراین خروجی باید با برنامه ماژول ۱ یکسان باشد:

a7a9d2b80d706a2b.png

یادداشت‌های پایانی

تبریک می‌گویم که اولین قدم را برای انتقال برنامه‌های Python 2 App Engine خود به Python 3 برداشتید، در حالی که در حال حاضر می‌توانید از سرویس‌های همراه آنها استفاده کنید.

تمیز کردن

عمومی

اگر فعلاً کارتان تمام است، توصیه می‌کنیم برنامه 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 هستند. برای اطلاعات بیشتر به مستندات هر محصول مراجعه کنید:

مراحل بعدی

از اینجا به بعد چندین مسیر وجود دارد:

  1. به‌روزرسانی کد با استفاده از سرویس‌های همراه که نیاز به تغییرات کد بیشتری دارند
  2. مهاجرت از سرویس‌های همراه به محصولات مستقل ابری
  3. مهاجرت از App Engine به یک پلتفرم Cloud بدون سرور دیگر

دسترسی به سایر سرویس‌های همراه مانند Blobstore ، Mail و Deferred نیاز به تغییرات کد بیشتری دارد. ماژول‌های مهاجرتی که بر فاصله گرفتن از سرویس‌های همراه قدیمی App Engine تمرکز دارند، عبارتند از:

App Engine دیگر تنها پلتفرم بدون سرور در Google Cloud نیست. اگر یک برنامه کوچک App Engine یا برنامه‌ای با قابلیت‌های محدود دارید و می‌خواهید آن را به یک میکروسرویس مستقل تبدیل کنید، یا می‌خواهید یک برنامه یکپارچه را به چندین مؤلفه قابل استفاده مجدد تقسیم کنید، اینها دلایل خوبی برای در نظر گرفتن انتقال به Cloud Functions هستند. اگر کانتینرسازی به بخشی از گردش کار توسعه برنامه شما تبدیل شده است، به خصوص اگر شامل یک خط لوله CI/CD (ادغام مداوم/تحویل مداوم یا استقرار) باشد، مهاجرت به Cloud Run را در نظر بگیرید. این سناریوها توسط ماژول‌های زیر پوشش داده می‌شوند:

  • مهاجرت از موتور برنامه به توابع ابری: به ماژول 11 مراجعه کنید
  • مهاجرت از App Engine به Cloud Run: برای کانتینرایز کردن برنامه خود با Docker به ماژول ۴ و برای انجام این کار بدون کانتینرها، دانش Docker یا Dockerfile ها به ماژول ۵ مراجعه کنید.

تغییر به یک پلتفرم بدون سرور دیگر اختیاری است و توصیه می‌کنیم قبل از ایجاد هرگونه تغییر، بهترین گزینه‌ها را برای برنامه‌ها و موارد استفاده خود در نظر بگیرید.

صرف نظر از اینکه کدام ماژول مهاجرت را در مرحله بعد در نظر بگیرید، تمام محتوای Serverless Migration Station (آزمایشگاه‌های کد، ویدیوها، کد منبع [در صورت وجود]) در مخزن متن‌باز آن قابل دسترسی است. README این مخزن همچنین راهنمایی‌هایی در مورد اینکه کدام مهاجرت‌ها را باید در نظر گرفت و هرگونه «ترتیب» مربوط به ماژول‌های مهاجرت ارائه می‌دهد.

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

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

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

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

منابع مهاجرت

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

کدلب

پایتون ۲

پایتون ۳

ماژول ۱

کد

ناموجود

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

ناموجود

کد (mod1b-flask)

منابع آنلاین

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

سرویس‌های همراه موتور برنامه

اسناد عمومی موتور برنامه

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

ویدیوها

مجوز

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