1. بررسی اجمالی
مجموعه کدهای ایستگاه انتقال بدون سرور (آموزشهای عملی) و ویدیوهای مرتبط با هدف کمک به توسعهدهندگان بدون سرور Google Cloud برای مدرن کردن برنامههای خود با هدایت آنها از طریق یک یا چند انتقال، عمدتاً از سرویسهای قدیمی دور میشوند. انجام این کار برنامه های شما را قابل حمل تر می کند و گزینه ها و انعطاف پذیری بیشتری در اختیار شما قرار می دهد و به شما امکان می دهد با طیف وسیع تری از محصولات Cloud ادغام شده و به آنها دسترسی داشته باشید و راحت تر به نسخه های زبان جدیدتر ارتقا دهید. در حالی که در ابتدا بر روی اولین کاربران Cloud، عمدتاً توسعه دهندگان App Engine (محیط استاندارد) تمرکز می شود، این مجموعه به اندازه کافی گسترده است که شامل سایر پلتفرم های بدون سرور مانند Cloud Functions و Cloud Run یا در صورت وجود جاهای دیگر است.
هدف از این کد لبه این است که به توسعه دهندگان Python 2 App Engine نشان دهد که چگونه از App Engine Task Queue (وظایف فشاری) به Cloud Tasks مهاجرت کنند. همچنین یک انتقال ضمنی از App Engine NDB به Cloud NDB برای دسترسی به Datastore وجود دارد (که عمدتاً در ماژول 2 پوشش داده شده است).
ما استفاده از وظایف فشار را در ماژول 7 اضافه کردیم، و این استفاده را به وظایف Cloud در اینجا در ماژول 8 منتقل کردیم، سپس به پایتون 3 و فضای ذخیره ابری در ماژول 9 ادامه دادیم. کسانی که از Task Queues برای کارهای کششی استفاده می کنند، به Cloud Pub/Sub مهاجرت می کنند. و در عوض باید به ماژول های 18-19 مراجعه کنید.
شما یاد خواهید گرفت که چگونه
- استفاده از App Engine Task Queue (وظایف فشاری) را با Cloud Tasks جایگزین کنید
- استفاده از App Engine NDB را با Cloud NDB جایگزین کنید (همچنین به ماژول 2 مراجعه کنید)
آنچه شما نیاز دارید
- یک پروژه Google Cloud با یک حساب صورتحساب GCP فعال
- مهارت های پایه پایتون
- دانش کاری دستورات رایج لینوکس
- دانش اولیه توسعه و استقرار برنامه های App Engine
- یک برنامه کاربردی Module 7 App Engine ( لاب کد آن را کامل کنید [توصیه میشود] یا برنامه را از مخزن کپی کنید)
نظرسنجی
چگونه از این آموزش استفاده خواهید کرد؟
تجربه خود را با پایتون چگونه ارزیابی می کنید؟
تجربه خود را در استفاده از خدمات Google Cloud چگونه ارزیابی می کنید؟
2. پس زمینه
App Engine Task Queue از وظایف فشاری و کششی پشتیبانی می کند. برای بهبود قابلیت حمل برنامه، تیم Google Cloud مهاجرت از سرویسهای همراه قدیمی مانند Task Queue به دیگر سرویسهای مستقل Cloud یا مشابه شخص ثالث را توصیه میکند.
- کاربران Task Queue push task باید به Cloud Tasks مهاجرت کنند.
- کاربران Task Queue pull task باید به Cloud Pub/Sub مهاجرت کنند.
انتقال وظیفه کششی در ماژول های مهاجرت 18-19 پوشش داده شده است در حالی که ماژول های 7-9 بر مهاجرت وظیفه فشاری تمرکز دارند. به منظور مهاجرت از وظایف فشاری App Engine Task Queue، ما استفاده از آن را به برنامه نمونه موجود Python 2 App Engine اضافه کردیم که بازدیدهای صفحه جدید را ثبت می کند و آخرین بازدیدها را نمایش می دهد. ماژول 7 کد لبه یک وظیفه فشاری برای حذف قدیمیترین بازدیدها اضافه میکند - آنها دیگر هرگز نشان داده نمیشوند، پس چرا باید فضای ذخیرهسازی بیشتری در Datastore اشغال کنند؟ این کد ماژول 8 همان عملکرد را حفظ می کند اما مکانیسم صف بندی زیربنایی را از وظایف فشاری Task Queue به وظایف Cloud منتقل می کند و همچنین انتقال ماژول 2 را از App Engine NDB به Cloud NDB برای دسترسی به Datastore تکرار می کند.
این آموزش شامل مراحل زیر است:
- راه اندازی/پیش کار
- پیکربندی را به روز کنید
- کد برنامه را تغییر دهید
3. راه اندازی/پیش کار
این بخش توضیح می دهد که چگونه:
- پروژه Cloud خود را راه اندازی کنید
- دریافت نمونه برنامه پایه
- (دوباره) استقرار و تأیید اعتبار برنامه پایه
- خدمات/APIهای جدید Google Cloud را فعال کنید
این مراحل تضمین میکند که شما با کد کار شروع میکنید و برنامه نمونه شما برای انتقال به سرویسهای Cloud آماده است.
1. پروژه راه اندازی
اگر ماژول 7 Codelab را تکمیل کردید، از همان پروژه (و کد) دوباره استفاده کنید. از طرف دیگر، یک پروژه کاملاً جدید ایجاد کنید یا از پروژه موجود دیگری استفاده مجدد کنید. مطمئن شوید که پروژه دارای یک حساب صورتحساب فعال و یک برنامه App Engine فعال است. شناسه پروژه خود را همانطور که نیاز دارید در این کد لبه دستی داشته باشید، پیدا کنید و هر زمان که با متغیر PROJECT_ID
روبرو شدید از آن استفاده کنید.
2. برنامه نمونه پایه را دریافت کنید
یکی از پیش نیازها یک برنامه موتور اپلیکیشن ماژول 7 است: ماژول 7 را تکمیل کنید (توصیه می شود) یا برنامه ماژول 7 را از مخزن کپی کنید. چه از ما استفاده کنید چه از کد ما، کد ماژول 7 جایی است که ما شروع می کنیم ("START"). این نرم افزار کد شما را در مسیر مهاجرت راهنمایی می کند و با کدی که شبیه آنچه در پوشه مخزن ماژول 8 است ("FINISH") به پایان می رسد.
- شروع: مخزن ماژول 7
- FINISH: مخزن ماژول 8
- مخزن کامل (کلون یا دانلود ZIP)
صرف نظر از اینکه از کدام برنامه ماژول 7 استفاده می کنید، پوشه باید مانند زیر باشد، احتمالاً با یک پوشه lib
نیز:
$ ls README.md appengine_config.py requirements.txt app.yaml main.py templates
3. (دوباره) استقرار و تأیید اعتبار برنامه پایه
مراحل زیر را برای استقرار برنامه Module 7 انجام دهید:
- اگر پوشه
lib
وجود دارد، آن را حذف کنید وpip install -t lib -r requirements.txt
را اجرا کنید تاlib
مجدداً پر شود. اگر پایتون 2 و 3 را روی دستگاه توسعه خود نصب کرده اید، ممکن است به جای آن نیاز به استفاده ازpip2
داشته باشید. - مطمئن شوید که ابزار خط فرمان
gcloud
را نصب و راه اندازی کرده اید و استفاده از آن را بررسی کرده اید. - (اختیاری) اگر نمیخواهید
PROJECT_ID
با هر دستورgcloud
که صادر میکنید، پروژه Cloud خود را باgcloud config set project
PROJECT_ID
تنظیم کنید. - برنامه نمونه را با
gcloud app deploy
اجرا کنید - تأیید کنید که برنامه همانطور که انتظار می رود بدون مشکل اجرا شود. اگر Lab کد ماژول 7 را تکمیل کرده باشید، برنامه بازدیدکنندگان برتر را به همراه آخرین بازدیدها نمایش می دهد (تصویر زیر). در پایین نشانی از کارهای قدیمی است که حذف خواهند شد.
4. سرویسها/APIهای جدید Google Cloud را فعال کنید
برنامه قدیمی از خدمات همراه App Engine استفاده میکرد که نیازی به راهاندازی اضافی ندارند، اما سرویسهای Cloud مستقل این کار را میکنند، و برنامه بهروزرسانیشده از Cloud Tasks و Cloud Datastore (از طریق کتابخانه سرویس گیرنده Cloud NDB) استفاده میکند. تعدادی از محصولات Cloud دارای سهمیه ردیف "همیشه رایگان" هستند، از جمله App Engine ، Cloud Datastore و Cloud Tasks . تا زمانی که تحت این محدودیت ها بمانید، نباید برای تکمیل این آموزش هزینه ای متحمل شوید. بسته به اولویت شما، APIهای Cloud را می توان از طریق کنسول Cloud یا از خط فرمان فعال کرد.
از کنسول Cloud
به صفحه کتابخانه مدیر API (برای پروژه صحیح) در Cloud Console بروید و APIهای Cloud Datastore و Cloud Tasks را با استفاده از نوار جستجو در وسط صفحه جستجو کنید:
برای هر API جداگانه روی دکمه فعال کردن کلیک کنید—ممکن است اطلاعات صورتحساب از شما خواسته شود. این نمونه ای است که صفحه کتابخانه Cloud Pub/Sub API را نشان می دهد (API Pub/Sub را برای این Codelab فعال نکنید، فقط Cloud Tasks و Datastore):
از خط فرمان
در حالی که از نظر بصری آموزنده API های کنسول را فعال می کند، برخی خط فرمان را ترجیح می دهند. gcloud services enable cloudtasks.googleapis.com datastore.googleapis.com
:
$ gcloud services enable cloudtasks.googleapis.com datastore.googleapis.com Operation "operations/acat.p2-aaa-bbb-ccc-ddd-eee-ffffff" finished successfully.
ممکن است اطلاعات صورتحساب از شما خواسته شود. اگر میخواهید سایر APIهای Cloud را فعال کنید و میخواهید بدانید «URI» آنها چیست، میتوانید آنها را در پایین صفحه کتابخانه هر API پیدا کنید. به عنوان مثال، pubsub.googleapis.com
به عنوان "نام سرویس" در پایین صفحه Pub/Sub درست در بالا مشاهده کنید.
پس از تکمیل مراحل، پروژه شما قادر به دسترسی به APIها خواهد بود. اکنون زمان آن است که برنامه را برای استفاده از آن API ها به روز کنید.
4. پیکربندی را به روز کنید
بهروزرسانیهای پیکربندی به صراحت به دلیل استفاده اضافی از کتابخانههای سرویس گیرنده Cloud است. صرف نظر از اینکه از کدام یک(های) استفاده می کنید، باید همان تغییرات را در برنامه هایی که از هیچ کتابخانه سرویس گیرنده Cloud استفاده نمی کنند اعمال شود.
الزامات. txt
ماژول 8 استفاده از App Engine NDB و Task Queue را از ماژول 1 با Cloud NDB و Cloud Tasks مبادله می کند. هر دو google-cloud-ndb
و google-cloud-tasks
به requirements.txt
اضافه کنید تا به flask
از ماژول 7 بپیوندید:
flask
google-cloud-ndb
google-cloud-tasks
این فایل requirements.txt
هیچ شماره نسخه ای ندارد، یعنی آخرین نسخه ها انتخاب شده اند. در صورت بروز هرگونه ناسازگاری، یک شماره نسخه برای قفل کردن نسخههای فعال برنامه مشخص کنید.
app.yaml
هنگام استفاده از کتابخانه های سرویس گیرنده Cloud، زمان اجرا Python 2 App Engine به بسته های شخص ثالث خاصی، یعنی grpcio
و setuptools
نیاز دارد. کاربران پایتون 2 باید کتابخانههای داخلی مانند اینها را به همراه نسخه موجود یا «آخرین» در app.yaml
فهرست کنند. اگر هنوز بخش libraries
ندارید، یکی ایجاد کنید و هر دو کتابخانه را مانند این اضافه کنید:
libraries:
- name: grpcio
version: latest
- name: setuptools
version: latest
هنگام مهاجرت برنامه شما ، ممکن است از قبل یک بخش libraries
داشته باشد . اگر اینطور است، و grpcio
و setuptools
وجود ندارند، فقط آنها را به بخش libraries
موجود خود اضافه کنید. اکنون app.yaml
به روز شده باید به شکل زیر باشد:
runtime: python27
threadsafe: yes
api_version: 1
handlers:
- url: /.*
script: main.app
libraries:
- name: grpcio
version: latest
- name: setuptools
version: latest
appengine_config.py
فراخوانی google.appengine.ext.vendor.add()
در appengine_config.py
کتابخانه های شخص ثالث کپی شده (که گاهی اوقات "فروشنده" یا "self-bundling" نامیده می شود) را در lib
به برنامه شما متصل می کند. در بالا در app.yaml
، کتابخانههای شخص ثالث داخلی را اضافه کردهایم، و آنها به setuptools.pkg_resources.working_set.add_entry()
نیاز دارند تا برنامه شما را به بستههای داخلی در lib
متصل کنند. در زیر ماژول 1 اصلی appengine_config.py
و بعد از اینکه ماژول 8 را به روز رسانی کردید آمده است:
قبل از:
from google.appengine.ext import vendor
# Set PATH to your libraries folder.
PATH = 'lib'
# Add libraries installed in the PATH folder.
vendor.add(PATH)
بعد از:
import pkg_resources
from google.appengine.ext import vendor
# Set PATH to your libraries folder.
PATH = 'lib'
# Add libraries installed in the PATH folder.
vendor.add(PATH)
# Add libraries to pkg_resources working set to find the distribution.
pkg_resources.working_set.add_entry(PATH)
شرح مشابهی را میتوان در اسناد مهاجرت برنامه نیز یافت.
5. کد برنامه را تغییر دهید
این بخش بهروزرسانیهای فایل برنامه اصلی، main.py
ارائه میکند، که جایگزین استفاده از صفهای فشاری Task Queue موتور برنامه با وظایف Cloud میشود. هیچ تغییری در قالب وب، templates/index.html
وجود ندارد — هر دو برنامه باید یکسان عمل کنند و داده های یکسانی را نمایش دهند. تغییرات در برنامه اصلی به این چهار "کار" تقسیم می شوند:
- به روز رسانی واردات و مقداردهی اولیه
- به روز رسانی عملکرد مدل داده (Cloud NDB)
- مهاجرت به Cloud Tasks (و Cloud NDB)
- به روز رسانی (فشار) کنترل کننده کار
1. به روز رسانی واردات و مقداردهی اولیه
- App Engine NDB (
google.appengine.ext.ndb
) و Task Queue (google.appengine.api.taskqueue
) را به ترتیب با Cloud NDB (google.cloud.ndb
) و Cloud Tasks (google.cloud.tasks
) جایگزین کنید. - کتابخانه های سرویس گیرنده ابری نیاز به مقداردهی اولیه و ایجاد "کلینت های API" دارند. آنها را به ترتیب به
ds_client
وts_client
اختصاص دهید. - در مستندات Task Queue آمده است: "App Engine یک صف فشار پیشفرض به نام
default
ارائه میکند که پیکربندی شده و آماده استفاده با تنظیمات پیشفرض است." Cloud Tasks یک صفdefault
ارائه نمیکند (زیرا یک محصول Cloud مستقل و مستقل از App Engine است)، بنابراین کد جدیدی برای ایجاد یک صف Cloud Tasks با نامdefault
مورد نیاز است. - App Engine Task Queue نیازی به تعیین منطقه ندارد زیرا از منطقه ای استفاده می کند که برنامه شما در آن اجرا می شود. با این حال، چون Cloud Tasks اکنون یک محصول مستقل است، به یک منطقه نیاز دارد و آن منطقه باید با منطقه ای که برنامه شما در آن اجرا می شود مطابقت داشته باشد. نام منطقه و شناسه پروژه Cloud برای ایجاد یک "مسیر کاملاً واجد شرایط" به عنوان شناسه منحصر به فرد صف مورد نیاز است.
به روز رسانی هایی که در گلوله سوم و چهارم در بالا توضیح داده شد، بخش عمده ای از ثابت های اضافی و مقداردهی اولیه مورد نیاز را تشکیل می دهند. در "قبل" و "بعد" زیر ببینید و این تغییرات را در بالای main.py
انجام دهید.
قبل از:
from datetime import datetime
import logging
import time
from flask import Flask, render_template, request
from google.appengine.api import taskqueue
from google.appengine.ext import ndb
app = Flask(__name__)
بعد از:
from datetime import datetime
import json
import logging
import time
from flask import Flask, render_template, request
from google.cloud import ndb, tasks
app = Flask(__name__)
ds_client = ndb.Client()
ts_client = tasks.CloudTasksClient()
_, PROJECT_ID = google.auth.default()
REGION_ID = 'REGION_ID' # replace w/your own
QUEUE_NAME = 'default' # replace w/your own
QUEUE_PATH = ts_client.queue_path(PROJECT_ID, REGION_ID, QUEUE_NAME)
2. بهروزرسانی عملکرد مدل داده (Cloud NDB)
App Engine NDB و Cloud NDB تقریباً یکسان کار می کنند. هیچ تغییر عمده ای در مدل داده و تابع store_visit()
وجود ندارد. تنها تفاوت قابل توجه این است که ایجاد موجودیت Visit
در store_visit()
اکنون درون یک پایتون with
بلوک کپسوله شده است. Cloud NDB مستلزم این است که تمام دسترسی های Datastore در مدیریت زمینه آن کنترل شود، از این رو عبارت with
. قطعه کد زیر این تفاوت جزئی را هنگام مهاجرت به Cloud NDB نشان می دهد. این تغییر را اجرا کنید.
قبل از:
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()
بعد از:
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'
with ds_client.context():
Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
3. مهاجرت به Cloud Tasks (و Cloud NDB)
مهم ترین تغییر در این مهاجرت، زیرساخت های صف بندی زیربنایی را تغییر می دهد. این در تابع fetch_visits()
انجام می شود که در آن یک وظیفه (فشار) برای حذف بازدیدهای قدیمی ایجاد شده و برای اجرا در صف قرار می گیرد. با این حال، عملکرد اصلی ماژول 7 دست نخورده باقی می ماند:
- برای آخرین بازدیدها پرس و جو کنید.
- به جای بازگرداندن فوری آن بازدیدها، مُهر زمانی آخرین
Visit
را که قدیمیترین بازدید نمایششده است، ذخیره کنید — حذف همه بازدیدهای قدیمیتر از این امن است. - با استفاده از ابزارهای استاندارد پایتون، مهر زمانی را به عنوان یک شناور و یک رشته حذف کنید و از هر دو در ظرفیت های مختلف استفاده کنید، به عنوان مثال، نمایش به کاربر، افزودن به گزارش ها، ارسال به کنترل کننده و غیره.
- یک کار فشاری با این مهر زمانی به عنوان بار آن به همراه
/trim
به عنوان URL ایجاد کنید. - Task handler در نهایت از طریق یک HTTP
POST
به آن URL فراخوانی می شود.
این گردش کار با قطعه کد "before" نشان داده شده است:
قبل از:
def fetch_visits(limit):
'get most recent visits & add task to delete older visits'
data = Visit.query().order(-Visit.timestamp).fetch(limit)
oldest = time.mktime(data[-1].timestamp.timetuple())
oldest_str = time.ctime(oldest)
logging.info('Delete entities older than %s' % oldest_str)
taskqueue.add(url='/trim', params={'oldest': oldest})
return data, oldest_str
در حالی که عملکرد یکسان باقی می ماند، Cloud Tasks به پلت فرم اجرا تبدیل می شود. به روز رسانی های اعمال این تغییر عبارتند از:
- پرس و جو
Visit
را در داخل پایتونwith
بلوک قرار دهید (تکرار انتقال ماژول 2 به Cloud NDB) - ابرداده وظایف Cloud را ایجاد کنید، از جمله ویژگیهای مورد انتظار مانند بارگذاری مهر زمانی و URL، اما نوع MIME و رمزگذاری JSON بار را نیز اضافه کنید.
- از سرویس گیرنده Cloud Tasks API برای ایجاد کار با ابرداده و نام مسیر کامل صف استفاده کنید.
این تغییرات در fetch_visits()
در زیر نشان داده شده است:
بعد از:
def fetch_visits(limit):
'get most recent visits & add task to delete older visits'
with ds_client.context():
data = Visit.query().order(-Visit.timestamp).fetch(limit)
oldest = time.mktime(data[-1].timestamp.timetuple())
oldest_str = time.ctime(oldest)
logging.info('Delete entities older than %s' % oldest_str)
task = {
'app_engine_http_request': {
'relative_uri': '/trim',
'body': json.dumps({'oldest': oldest}).encode(),
'headers': {
'Content-Type': 'application/json',
},
}
}
ts_client.create_task(parent=QUEUE_PATH, task=task)
return data, oldest_str
4. به روز رسانی (فشار) کنترل کار
عملکرد کنترل وظیفه (فشار) به به روز رسانی های عمده نیاز ندارد. فقط نیاز به اجرا دارد. این برای Task Queue یا Cloud Tasks قابل اجرا است. بنابراین آنها می گویند: "کد رمز است". با این حال برخی تغییرات جزئی وجود دارد :
- محموله مهر زمانی به طور کلمه به Task Queue منتقل شد، اما برای وظایف Cloud با JSON کدگذاری شده بود و بنابراین باید پس از ورود با JSON تجزیه شود.
- فراخوانی HTTP
POST
به/trim
با Task Queue دارای یک نوع MIME ضمنیapplication/x-www-form-urlencoded
بود، اما در Cloud Tasks، به صراحت به عنوانapplication/json
تعیین شده است، بنابراین روش کمی متفاوت برای استخراج بار وجود دارد. - از مدیر زمینه کلاینت Cloud NDB API (مهاجرت ماژول 2 به Cloud NDB) استفاده کنید.
در زیر قطعات کد قبل و بعد از انجام این تغییرات در task handler، trim()
آمده است:
قبل از:
@app.route('/trim', methods=['POST'])
def trim():
'(push) task queue handler to delete oldest visits'
oldest = request.form.get('oldest', type=float)
keys = Visit.query(
Visit.timestamp < datetime.fromtimestamp(oldest)
).fetch(keys_only=True)
nkeys = len(keys)
if nkeys:
logging.info('Deleting %d entities: %s' % (
nkeys, ', '.join(str(k.id()) for k in keys)))
ndb.delete_multi(keys)
else:
logging.info('No entities older than: %s' % time.ctime(oldest))
return '' # need to return SOME string w/200
بعد از:
@app.route('/trim', methods=['POST'])
def trim():
'(push) task queue handler to delete oldest visits'
oldest = float(request.get_json().get('oldest'))
with ds_client.context():
keys = Visit.query(
Visit.timestamp < datetime.fromtimestamp(oldest)
).fetch(keys_only=True)
nkeys = len(keys)
if nkeys:
logging.info('Deleting %d entities: %s' % (
nkeys, ', '.join(str(k.id()) for k in keys)))
ndb.delete_multi(keys)
else:
logging.info(
'No entities older than: %s' % time.ctime(oldest))
return '' # need to return SOME string w/200
هیچ بهروزرسانی برای root()
handler اصلی برنامه و نه web templates/index.html
وجود ندارد.
6. خلاصه/پاکسازی
این بخش با استقرار برنامه، این کد را جمعبندی میکند و تأیید میکند که آنطور که در نظر گرفته شده و در هر خروجی منعکسشده کار میکند. پس از تأیید اعتبار برنامه، هر گونه پاکسازی را انجام دهید و مراحل بعدی را در نظر بگیرید.
استقرار و تأیید برنامه
برنامه خود را با gcloud app deploy
اجرا کنید. خروجی باید با برنامه ماژول 7 یکسان باشد، اما متوجه شوید که به محصولی کاملاً متفاوت در صف فشار تغییر کرده اید و برنامه شما را قابل حمل تر از قبل کرده است!
پاک کن
ژنرال
اگر فعلاً کارتان تمام شده است، توصیه میکنیم برنامه 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
".
از سوی دیگر، اگر نمیخواهید با این برنامه یا دیگر کدهای مهاجرت مرتبط ادامه دهید و میخواهید همه چیز را به طور کامل حذف کنید، پروژه خود را خاموش کنید .
مخصوص این کد لبه
خدمات لیست شده در زیر منحصر به این کدلب است. برای اطلاعات بیشتر به مستندات هر محصول مراجعه کنید:
- Cloud Tasks دارای یک لایه رایگان است. برای جزئیات بیشتر به صفحه قیمت آن مراجعه کنید.
- سرویس App Engine Datastore توسط Cloud Datastore (Cloud Firestore در حالت Datastore) ارائه می شود که دارای یک ردیف رایگان نیز می باشد. برای اطلاعات بیشتر به صفحه قیمت آن مراجعه کنید.
مراحل بعدی
با این کار، انتقال ما از وظایف فشاری App Engine Task Queue به Cloud Tasks به پایان می رسد. اگر میخواهید به پورت این برنامه به پایتون 3 ادامه دهید و حتی بیشتر از Cloud NDB به Cloud Datastore مهاجرت کنید، ماژول 9 را در نظر بگیرید.
Cloud NDB به طور خاص برای توسعه دهندگان Python 2 App Engine وجود دارد و تجربه کاربری تقریباً یکسانی را ارائه می دهد، اما Cloud Datastore کتابخانه مشتری بومی خود را دارد که برای کاربران غیرApp Engine یا کاربران جدید App Engine (Python 3) ساخته شده است. با این حال، از آنجایی که Cloud NDB برای Python 2 و 3 در دسترس است، هیچ الزامی برای مهاجرت به Cloud Datastore وجود ندارد.
Cloud NDB و Cloud Datastore هر دو به Datastore دسترسی دارند (البته به روشهای مختلف)، بنابراین تنها دلیلی که میخواهید به Cloud Datastore منتقل شوید این است که از قبل برنامههای دیگری، بهویژه برنامههای غیرApp Engine، با استفاده از Cloud Datastore و تمایل به استانداردسازی در یک واحد داشته باشید. کتابخانه مشتری Datastore. این انتقال اختیاری از Cloud NDB به Cloud Datastore نیز به تنهایی (بدون Task Queue یا Cloud Tasks) در ماژول 3 پوشش داده شده است.
فراتر از ماژولهای 3، 8، و 9، ماژولهای مهاجرت دیگری که بر دور شدن از سرویسهای همراه قدیمی App Engine تمرکز دارند عبارتند از:
- ماژول 2 : از App Engine NDB به Cloud NDB مهاجرت کنید
- ماژولهای 12-13 : انتقال از App Engine Memcache به Cloud Memorystore
- ماژول های 15-16 : از App Engine Blobstore به Cloud Storage مهاجرت کنید
- ماژولهای 18-19 : App Engine Task Queue (کشش وظایف) به 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. منابع اضافی
فهرست زیر منابع اضافی برای توسعه دهندگانی است که این ماژول مهاجرت یا مربوط به آن و همچنین محصولات مرتبط را بررسی می کنند. این شامل مکانهایی برای ارائه بازخورد در مورد این محتوا، پیوندهایی به کد، و اسناد مختلفی است که ممکن است برایتان مفید باشد.
مسائل/بازخورد Codelabs
اگر مشکلی در این کد لبه پیدا کردید، لطفاً قبل از تشکیل پرونده ابتدا مشکل خود را جستجو کنید. پیوندهایی برای جستجو و ایجاد مسائل جدید:
منابع مهاجرت
پیوندهای پوشههای مخزن برای ماژول 7 (START) و ماژول 8 (FINISH) را میتوانید در جدول زیر بیابید.
Codelab | پایتون 2 | پایتون 3 |
کد (در این آموزش نشان داده نشده است) | ||
ماژول 8 (این نرم افزار کد) | (n/a) |
منابع آنلاین
در زیر منابع آنلاینی وجود دارد که ممکن است برای این آموزش مرتبط باشد:
صف وظایف موتور برنامه و وظایف ابری
- نمای کلی صف وظایف موتور برنامه
- مروری بر صفهای فشاری Task Queue Engine App
- App Engine Task Queue وظایف را به Cloud Tasks Migration فشار می دهد
- App Engine Task Queue وظایف را به نمونه اسناد Cloud Tasks فشار دهید
- اسناد Cloud Tasks
- Cloud Tasks نمونه های کتابخانه کلاینت پایتون
- اطلاعات قیمت گذاری Cloud Tasks
App Engine NDB و Cloud NDB (Datastore)
- اسناد NDB Engine App
- مخزن App Engine NDB
- اسناد Google Cloud NDB
- مخزن Google Cloud NDB
- اطلاعات قیمت گذاری Cloud Datastore
پلت فرم 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 مجوز دارد.