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 با یک حساب صورتحساب GCP فعال
- مهارت های پایه پایتون
- دانش کاری دستورات رایج لینوکس
- دانش اولیه توسعه و استقرار برنامه های App Engine
- یک برنامه کاربردی Module 1 App Engine ( لاب کد آن را کامل کنید [توصیه میشود] یا برنامه را از مخزن کپی کنید)
نظرسنجی
چگونه از این آموزش استفاده خواهید کرد؟
تجربه خود را با پایتون چگونه ارزیابی می کنید؟
تجربه خود را در استفاده از خدمات 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 آن دست نخورده است.
این آموزش شامل مراحل زیر است:
- راه اندازی/پیش کار
- پیکربندی را به روز کنید
- کد برنامه را تغییر دهید
3. راه اندازی/پیش کار
این بخش توضیح می دهد که چگونه:
- پروژه Cloud خود را راه اندازی کنید
- دریافت نمونه برنامه پایه
- (دوباره) استقرار و تأیید اعتبار برنامه پایه
این مراحل تضمین می کند که شما با کد کار شروع می کنید.
1. پروژه راه اندازی
اگر آزمایشگاه کد ماژول 1 را تکمیل کرده اید، توصیه می کنیم از همان پروژه (و کد) دوباره استفاده کنید. روش دیگر، ایجاد یک پروژه Cloud کاملاً جدید یا استفاده مجدد از پروژه موجود دیگر. مطمئن شوید که پروژه دارای یک حساب صورتحساب فعال است که در آن سرویس App Engine فعال شده است.
2. برنامه نمونه پایه را دریافت کنید
یکی از پیش نیازهای این کد لبه، داشتن یک برنامه کاربردی Module 1 App Engine است: ماژول 1 Codelab را تکمیل کنید (توصیه می شود) یا برنامه Module 1 را از مخزن کپی کنید. چه از ما استفاده کنید چه از کد ما، کد ماژول 1 جایی است که "شروع" می کنیم. این لبه کد شما را در هر مرحله راهنمایی می کند و با کدی که شبیه آنچه در پوشه مخزن ماژول 7 "FINISH" است، به پایان می رسد.
- START: پوشه ماژول 1 (Python 2)
- FINISH: پوشه Module 1b (Python 3)
- مخزن کامل (برای شبیه سازی یا دانلود فایل ZIP )
صرف نظر از اینکه از کدام برنامه ماژول 1 استفاده می کنید، پوشه باید مانند زیر باشد، احتمالاً با یک پوشه lib
نیز:
$ ls README.md appengine_config.py requirements.txt app.yaml main.py templates
3. (دوباره) استقرار برنامه پایه
مراحل زیر را برای استقرار مجدد برنامه ماژول 1 انجام دهید:
- در صورت وجود پوشه
lib
حذف کنید و اجرا کنید:pip install -t lib -r requirements.txt
برای پر کردن مجددlib
اجرا کنید. اگر پایتون 2 و 3 را نصب کرده اید، ممکن است به جای آن از دستورpip2
استفاده کنید. - مطمئن شوید که ابزار خط فرمان
gcloud
را نصب و راه اندازی کرده اید و استفاده از آن را بررسی کرده اید. - اگر نمیخواهید با هر دستور
gcloud
صادر شدهPROJECT_ID
خود را وارد کنید، پروژه Cloud خود را باgcloud config set project
PROJECT_ID
تنظیم کنید. - برنامه نمونه را با
gcloud app deploy
اجرا کنید - تأیید کنید که برنامه Module 1 همانطور که انتظار می رود بدون مشکل نمایش آخرین بازدیدها اجرا شود (تصویر زیر)
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
مراحل زیر را دنبال کنید:
- دستور
runtime
را با نسخه پشتیبانی شده پایتون 3 جایگزین کنید. به عنوان مثال،python310
برای Python 3.10 مشخص کنید. - هر دو دستورالعمل
threadsafe
وapi_version
را حذف کنید زیرا هیچ کدام در پایتون 3 استفاده نمی شوند. - بخش
handlers
به طور کامل حذف کنید زیرا این برنامه فقط کنترلکنندههای اسکریپت دارد. اگر برنامه شما دارای کنترل کننده های فایل ثابت است، آنها را درhandlers
دست نخورده بگذارید. - زمان اجرا پایتون 3 مانند زمان اجرا پایتون 2 از کتابخانه های شخص ثالث داخلی پشتیبانی نمی کند. اگر برنامه شما دارای بخش
libraries
درapp.yaml
است، کل بخش را حذف کنید. (بستههای مورد نیاز فقط باید مانند کتابخانههای داخلی درrequirements.txt
فهرست شوند.) برنامه نمونه ما بخشlibraries
ندارد، بنابراین به مرحله بعد بروید. - برای استفاده از آن یک دستورالعمل
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 یکسان باشد:
یادداشت های پایانی
- اگر در طول مسیر اشتباهی مرتکب شده اید، آنچه را که دارید با آنچه در پوشه Module 1b است مقایسه کنید (FINISH) و در صورت لزوم تنظیم کنید.
- اگر برنامه شما همچنان از
webapp2
استفاده میکند، ماژول 0main.py
کنار هم با ماژول 1bmain.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
".
از سوی دیگر، اگر نمیخواهید با این برنامه یا دیگر کدهای مهاجرت مرتبط ادامه دهید و میخواهید همه چیز را به طور کامل حذف کنید، پروژه خود را خاموش کنید .
مخصوص این کد لبه
خدمات لیست شده در زیر منحصر به این کدلب است. برای اطلاعات بیشتر به مستندات هر محصول مراجعه کنید:
- سرویس App Engine Datastore توسط Cloud Datastore (Cloud Firestore در حالت Datastore) ارائه می شود که دارای یک ردیف رایگان نیز می باشد. برای اطلاعات بیشتر به صفحه قیمت آن مراجعه کنید.
مراحل بعدی
چندین مسیر برای رفتن از اینجا وجود دارد:
- کد را با استفاده از سرویسهای همراه که به تغییرات کد بیشتری نیاز دارند، بهروزرسانی کنید
- از خدمات همراه به محصولات مستقل Cloud مهاجرت کنید
- از App Engine به پلتفرم دیگر بدون سرور Cloud مهاجرت کنید
دسترسی به سایر سرویسهای همراه مانند Blobstore ، Mail و Deferred به تغییرات کد بیشتری نیاز دارد. ماژولهای مهاجرت با تمرکز بر دور شدن از خدمات همراه قدیمی App Engine که باید در نظر گرفته شوند عبارتند از:
- ماژول 2 : App Engine NDB به Cloud NDB
- ماژولهای 7-9 : App Engine TaskQueue (تکلیف فشار) به Cloud Tasks
- ماژولهای 12-13 : App Engine Memcache به Cloud Memorystore
- ماژولهای 15-16 : App Engine Blobstore به Cloud Storage
- ماژولهای 18-19 : App Engine TaskQueue (کشش وظایف) به Cloud Pub/Sub
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 |
N/A | ||
ماژول 17 (این آزمایشگاه کد) | N/A | کد (mod1b-flask) |
منابع آنلاین
در زیر منابع آنلاینی وجود دارد که ممکن است برای این آموزش مرتبط باشد:
خدمات همراه App Engine
- دسترسی به خدمات همراه در زمان اجرای نسل بعدی پایتون 3
- مقایسه کنار هم برنامه ماژول 0 (Python 2) در مقابل برنامه Module 1b (Python 3)
- نمونه های بسته بندی شی WSGI چارچوب وب SDK Engine App
- پشتیبانی از خدمات همراه App Engine در راهاندازی زمان اجرا نسل بعدی (2021)
اسناد عمومی App Engine
- مستندات App Engine
- زمان اجرا Python 2 App Engine (محیط استاندارد).
- استفاده از کتابخانه های داخلی App Engine در Python 2 App Engine
- زمان اجرا Python 3 App Engine (محیط استاندارد).
- تفاوت بین زمان اجرا Python 2 و 3 App Engine (محیط استاندارد).
- راهنمای مهاجرت Python 2 به 3 App Engine (محیط استاندارد).
- اطلاعات قیمت و سهمیه موتور App
- راه اندازی پلتفرم App Engine نسل دوم (2018)
- پشتیبانی طولانی مدت از زمان های اجرا قدیمی
- مخزن نمونه مهاجرت اسناد
- مخزن نمونه مهاجرت با مشارکت جامعه
سایر اطلاعات Cloud
- پایتون در پلتفرم ابری گوگل
- کتابخانه های سرویس گیرنده Google Cloud Python
- لایه Google Cloud "همیشه رایگان".
- Google Cloud SDK (ابزار خط فرمان
gcloud
) - تمام اسناد Google Cloud
ویدیوها
- ایستگاه مهاجرت بدون سرور
- اکسپدیشن های بدون سرور
- در Google Cloud Tech مشترک شوید
- در Google Developers مشترک شوید
مجوز
این اثر تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد.