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

1. بررسی اجمالی

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

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

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

  • نمونه برنامه App Engine را از Python 2 به 3 منتقل کنید
  • پیکربندی برنامه را برای گنجاندن App Engine SDK به‌روزرسانی کنید
  • کد SDK را به برنامه‌ای که از سرویس‌های همراه پشتیبانی می‌کند در زمان‌های اجرا نسل دوم مانند پایتون 3 اضافه کنید.

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

نظرسنجی

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

فقط از طریق آن را بخوانید آن را بخوانید و تمرینات را کامل کنید

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

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

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

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

2. پس زمینه

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

با توسعه دهندگان Python 2 که مشتاق ارتقاء به Python 3 هستند، به سرعت به سمت امروز حرکت کنید. یک برنامه 2.x با استفاده از سرویس های همراه نیاز به مهاجرت از آن سرویس ها قبل از اینکه برنامه های آنها به 3.x منتقل شوند، نشان دهنده یک جفت مهاجرت اجباری به عقب است. پشت، آنهایی که بالقوه چالش برانگیز بیش از حد. برای کمک به این انتقال، تیم App Engine در پاییز 2021 یک "کرم‌چاله" به گذشته معرفی کرد که به برنامه‌هایی که در زمان‌های اجرا نسل بعدی اجرا می‌شوند اجازه می‌داد به بسیاری از این سرویس‌های همراه دسترسی داشته باشند. در حالی که این نسخه شامل تمام سرویس‌های موجود در زمان‌های اجرا اصلی نمی‌شود، بازیکنان اصلی مانند Datastore، Task Queue و Memcache در دسترس هستند .

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

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

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

  1. راه اندازی/پیش کار
  2. پیکربندی را به روز کنید
  3. کد برنامه را تغییر دهید

3. راه اندازی/پیش کار

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

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

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

1. پروژه راه اندازی

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

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

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

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

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

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

مراحل زیر را برای استقرار مجدد برنامه ماژول 1 انجام دهید:

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

a7a9d2b80d706a2b.png

4. پیکربندی را به روز کنید

هنگامی که آن مراحل را با موفقیت انجام دادید و مشاهده کردید که برنامه وب شما کار می کند، آماده هستید که این برنامه را به Python 3 پورت کنید و با تنظیمات شروع کنید.

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

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

flask
appengine-python-standard

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

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

  1. دستور runtime را با نسخه پشتیبانی شده پایتون 3 جایگزین کنید. به عنوان مثال، python310 برای Python 3.10 مشخص کنید.
  2. هر دو دستورالعمل threadsafe و api_version را حذف کنید زیرا هیچ کدام در پایتون 3 استفاده نمی شوند.
  3. بخش handlers به طور کامل حذف کنید زیرا این برنامه فقط کنترل‌کننده‌های اسکریپت دارد. اگر برنامه شما دارای کنترل کننده های فایل ثابت است، آنها را در handlers دست نخورده بگذارید.
  4. زمان اجرا پایتون 3 مانند زمان اجرا پایتون 2 از کتابخانه های شخص ثالث داخلی پشتیبانی نمی کند. اگر برنامه شما دارای بخش 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 حذف کنید

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

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

دسترسی به اکثر سرویس‌های همراه موجود در محیط زمان اجرا پایتون 3 به یک کد کوتاه نیاز دارد که شی برنامه کاربردی رابط دروازه سرور وب (WSGI) را در main.py قرار دهد. تابع wrapper 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 برای سایر چارچوب‌های پایتون مراجعه کنید.

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

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

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

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

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

برنامه Python 3 را با gcloud app deploy اجرا کنید، و تأیید کنید که برنامه مانند Python 2 کار می کند. هیچ یک از عملکردها تغییر نمی کند، بنابراین خروجی باید با برنامه Module 1 یکسان باشد:

a7a9d2b80d706a2b.png

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

  • اگر در طول مسیر اشتباهی مرتکب شده اید، آنچه را که دارید با آنچه در پوشه Module 1b است مقایسه کنید (FINISH) و در صورت لزوم تنظیم کنید.
  • اگر برنامه شما همچنان از webapp2 استفاده می‌کند، ماژول 0 main.py کنار هم با ماژول 1b main.py در این صفحه مقایسه کنید، سپس کد ماژول 1 را انجام دهید تا نحوه انتقال از webapp2 به Flask را بیاموزید.

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

پاک کن

ژنرال

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

برای افشای کامل، استقرار در یک پلت فرم محاسباتی بدون سرور 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 * شما بستگی دارد، به عنوان مثال، اگر برنامه شما در ایالات متحده میزبانی می شود، " us ".

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

مخصوص این کد لبه

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

مراحل بعدی

چندین مسیر برای رفتن از اینجا وجود دارد:

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

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

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

  • مهاجرت از App Engine به Cloud Functions: به ماژول 11 مراجعه کنید
  • مهاجرت از App Engine به Cloud Run: به ماژول 4 مراجعه کنید تا برنامه خود را با Docker محفظه کنید، یا ماژول 5 را بدون کانتینر، دانش Docker یا Dockerfile s انجام دهید.

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

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

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

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

مسائل/بازخوردهای Codelab

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

منابع مهاجرت

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

Codelab

پایتون 2

پایتون 3

ماژول 1

کد

N/A

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

N/A

کد (mod1b-flask)

منابع آنلاین

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

خدمات همراه App Engine

اسناد عمومی App Engine

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

ویدیوها

مجوز

این اثر تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد.