1. Modül: App Engine webapp2'den Flask'a taşıma

1. Genel Bakış

Bu codelab'lerden oluşan bu seri, Google App Engine (Standart) geliştiricilerinin bir dizi taşıma işleminde rehberlik ederek uygulamalarını modernleştirmelerine yardımcı olmayı amaçlamaktadır. En önemli adım, çalışma zamanında paket haline getirilmiş orijinal hizmetlerden uzaklaşmaktır. Bunun nedeni, yeni nesil çalışma zamanlarının daha esnek olması ve kullanıcılara daha fazla hizmet seçeneği sunmasıdır. Daha yeni nesil çalışma zamanına geçmek, Google Cloud ürünleriyle daha kolay entegrasyon yapmanızı, daha geniş bir desteklenen hizmet yelpazesinden yararlanmanızı ve mevcut dil sürümlerini desteklemenizi sağlar.

Bu ilk eğitimde, App Engine uygulamalarında web çerçevesini modernleştirmeye yönelik ilk taşıma adımları gösterilmektedir: webapp2'ten Flask'a geçiş. Uygulamanızda, yönlendirme işlemini yürüten herhangi bir web çerçevesini kullanabilirsiniz ancak bu eğitimde, topluluğun yaygın olarak kullandığından Flask'ı kullanıyoruz.

Neler öğreneceksiniz?

  • Üçüncü taraf kitaplıklarını (yerleşik veya başka türlü) kullanma
  • Yapılandırma dosyalarını güncelleme
  • Basit bir uygulamayı webapp2 uygulamasından Flask'a taşıyın

Gerekenler

Anket

Bu codelab'i nasıl kullanacaksınız?

Yalnızca baştan sona oku Okuyun ve alıştırmaları tamamlayın

2. Arka plan

webapp çerçevesi, App Engine 2008'de Python 2.5'te ilk kez kullanıma sunulduğunda paket halinde sunuluyordu. Yıllar sonra, 2013'te 2.7 çalışma zamanı 2.5 desteği sonlandırıldığında yerini webapp2 aldı.

webapp2 (belgelere bakın) hâlâ mevcuttur ve WSGI uyumlu bir web çerçevesi olarak App Engine dışında kullanılabilir. Bununla birlikte, kullanıcı isteklerini uygulamadaki uygun koda yönlendirmez. Bunun yerine, web trafiğini ilgili "işleyicilere" yönlendirmek için App Engine'e, yapılandırma dosyalarına ve geliştiriciye güvenir. Dahası, webapp2 ürününün temel avantajları, App Engine'in paket halinde sunulan hizmetleriyle ayrılmaz bir şekilde ilişkilidir. App Engine, Python 3 üzerinde çalışmasına rağmen bu özelliği etkili bir şekilde kullanımdan kaldırır (ayrıca ilgili soruna bakın).

Bu modül, basit bir webapp2 uygulamasını App Engine tarafından desteklenen bir çerçeve olan Flask'a ve Google Cloud dışındaki birçok hizmete taşıma konusunda uygulamalı deneyim sağlayarak uygulamaları çok daha taşınabilir hale getirir. Flask, uygulamanızın taşınması için istenen bir çerçeve değilse kendi yönlendirmesini yaptığı sürece başka bir çerçeve seçebilirsiniz. Bu codelab'de, bilgi teknolojisiyle ilgili karar mercileri (BTDM'ler) ve geliştiricilerle taşıma adımları hakkında bilgiler verilmektedir. Böylece, hangi çerçeveye geçiş yaptığınız fark etmeksizin bu süreç hakkında bilgi edinebilirsiniz.

Bu taşıma işleminin temel adımları şunlardır:

  1. Kurulum/Ön Çalışma
  2. Flask 3. taraf kitaplığı ekleme
  3. Uygulama dosyalarını güncelle
  4. HTML şablon dosyasını güncelleme

3. Kurulum/Ön Çalışma

Eğiticinin ana bölümüne geçmeden önce projemizi oluşturalım, kodu alın ve ardından gcloud komutunu yeniden öğrenip temel uygulamayı dağıtalım. Böylece, çalışan bir kodla başladığımızı anlayabiliriz.

1. Proje oluşturun

Mevcut bir geliştirici olarak, kullandığınız hizmetleri muhtemelen App Engine kontrol panelinizde gösteriyordur. Bu eğitimin amacı doğrultusunda, yeni bir proje oluşturmanızı veya mevcut bir projeyi yeniden bu eğitim için yeniden kullanmanızı öneririz. Projenin etkin bir faturalandırma hesabı olduğundan ve App Engine'in (uygulamanın) etkin olduğundan emin olun.

2. Temel örnek uygulamayı indir

İhtiyacınız olan tüm kodları GAE taşıma deposu'nda bulabilirsiniz. Dosyayı klonlayın veya ZIP dosyasını indirin. Bu eğitim için Modül 0 klasöründeki (START) kodla başlayacaksınız ve eğiticiyi tamamladığınızda, kodunuz Modül 1 klasörüyle (FINISH) eşleşmelidir. Yanıtınız hayırsa, farklara göz atarak bir sonraki laboratuvara geçin.

POSIX ls komutuyla gösterildiği gibi, Modül 0 klasöründe aşağıdakine benzer dosyalar bulunmalıdır:

$ ls
app.yaml        index.html      main.py

3. (gcloud komutlarıyla) kendinizi tanıma

Makinenizde gcloud komutu henüz yoksa Google Cloud SDK'yı yükleyin, gcloud komutunun yürütme yolunuzun bir parçası olarak kullanılabildiğinden emin olun ve aşağıdaki gcloud komutları hakkında bilgi edinin:

  1. gcloud components update - Google Cloud SDK'yı güncelleyin
  2. gcloud auth login — Kimlik bilgisi içeren hesabınıza giriş yapın
  3. gcloud config list - GCP projesi yapılandırma ayarlarını listeler
  4. gcloud config set project PROJECT_ID - GCP proje kimliğini ayarlayın
  5. gcloud app deploy — App Engine uygulamanızı dağıtma

Son zamanlarda gcloud ile App Engine geliştirme yapmadıysanız sonraki adımlara geçmeden önce ilk dört komutu (1-#4) çalıştırarak kurulum yapmanız gerekir. Şimdi bu komutlara hızlıca göz atalım.

İlk olarak gcloud components update, en son Google Cloud SDK sürümüne sahip olduğunuzdan emin olur. Bu komutu çalıştırdığınızda aşağıdaki gibi bir çıkış elde edilir:

$ gcloud components update

Your current Cloud SDK version is: 317.0.0
You will be upgraded to version: 318.0.0

┌──────────────────────────────────────────────────┐
│        These components will be updated.         │
├──────────────────────────┬────────────┬──────────┤
│           Name           │  Version   │   Size   │
├──────────────────────────┼────────────┼──────────┤
│ Cloud SDK Core Libraries │ 2020.11.06 │ 15.5 MiB │
│ gcloud cli dependencies  │ 2020.11.06 │ 10.6 MiB │
└──────────────────────────┴────────────┴──────────┘

The following release notes are new in this upgrade.
Please read carefully for information about new features, breaking changes,
and bugs fixed.  The latest full release notes can be viewed at:
  https://cloud.google.com/sdk/release_notes

318.0.0 (2020-11-10)

      . . .
      (release notes)
      . . .

    Subscribe to these release notes at
    https://groups.google.com/forum/#!forum/google-cloud-sdk-announce.

Do you want to continue (Y/n)?

╔════════════════════════════════════════════════════════════╗
╠═ Creating update staging area                             ═╣
╠════════════════════════════════════════════════════════════╣
╠═ Uninstalling: Cloud SDK Core Libraries                   ═╣
╠════════════════════════════════════════════════════════════╣
╠═ Uninstalling: gcloud cli dependencies                    ═╣
╠════════════════════════════════════════════════════════════╣
╠═ Installing: Cloud SDK Core Libraries                     ═╣
╠════════════════════════════════════════════════════════════╣
╠═ Installing: gcloud cli dependencies                      ═╣
╠════════════════════════════════════════════════════════════╣
╠═ Creating backup and activating new installation          ═╣
╚════════════════════════════════════════════════════════════╝

Performing post processing steps...done.

Update done!

To revert your SDK to the previously installed version, you may run:
  $ gcloud components update --version 317.0.0

Ardından, daha sonra vereceğiniz gcloud komutları için kimliğinizi doğrulamak üzere gcloud auth login kullanın:

$ gcloud auth login
Your browser has been opened to visit:

    https://accounts.google.com/o/oauth2/auth?response_type=code&client_id= . . .

You are now logged in as [YOUR_EMAIL].
Your current project is [PROJECT_ID].  You can change this setting by running:
  $ gcloud config set project PROJECT_ID

Mevcut proje ayarlarınızı öğrenmek için gcloud config list kullanın:

$ gcloud config list
[core]
account = YOUR_EMAIL
disable_usage_reporting = False
project = PROJECT_ID

Your active configuration is: [default]

Yukarıdaki komut, yeni proje oluştururken veya mevcut bir projeyi seçerken size yol gösterecektir. gcloud config list çıktısı bu eğitim için kullanmak istediğiniz seçilen projeyle eşleşmiyorsa proje kimliğini ayarlamak için gcloud config set project PROJECT_ID komutunu çalıştırın. Ardından gcloud config list komutunu tekrar çalıştırarak doğru proje kimliğinin ayarlandığını onaylayın.

$ gcloud config set project PROJECT_ID
Updated property [core/project].

Bunun yerine Cloud Console'u kullanmayı tercih ederseniz kullanıcı arayüzünden yararlanarak yeni bir proje oluşturabilir veya önceden mevcut olan bir projeyi kullanabilirsiniz. Projenizin kontrol panelinde, proje kimliği ve numarasıyla birlikte proje bilgi kartını görürsünüz.

proje bilgi kartı

Son komut (5) olan gcloud app deploy, uygulamanızı App Engine'e dağıtmak içindir. Yeni başladığımız için onu çalıştırmak isteğe bağlıdır. Ancak Modül 0 kodunun çalıştığını onaylamak için bu kodu dağıtmayı kesinlikle önermeyiz. Yürütüldükten sonra, uygulamanın çalışmasını istediğiniz coğrafi bölgeyi seçin (genellikle bulunduğunuz yer). Bununla birlikte, bir kez ayarlandıktan sonra değiştirilemez. Ardından, dağıtım bilgilerinin kalan kısmını inceleyin. İnceleme tamamlandığında uygulamanızın hangi URL'de sunulacağı size bildirilir. Aşağıda, görebileceğiniz verilerin kısaltılmış bir versiyonunu bulabilirsiniz:

$ gcloud app deploy
Services to deploy:

descriptor:      [/private/tmp/mod0-baseline/app.yaml]
source:          [/private/tmp/mod0-baseline]
target project:  [PROJECT_ID]
target service:  [default]
target version:  [20201116t220827]
target url:      [https://PROJECT_ID.REG_ABBR.r.appspot.com]


Do you want to continue (Y/n)?

Beginning deployment of service [default]...
╔════════════════════════════════════════════════════════════╗
╠═ Uploading 1 file to Google Cloud Storage                 ═╣
╚════════════════════════════════════════════════════════════╝
File upload done.
Updating service [default]...done.
Setting traffic split for service [default]...done.
Deployed service [default] to [https://PROJECT_ID.REG_ABBR.r.appspot.com]

You can stream logs from the command line by running:
  $ gcloud app logs tail -s default

To view your application in the web browser run:
  $ gcloud app browse

App Engine'i bir süredir kullanmadıysanız orijinal dağıtım appcfg.py update komutunun gcloud app deploy tarafından değiştirildiğini fark edebilirsiniz. gcloud app deploy hakkında daha fazla bilgi edinmek için belgeler sayfasına göz atın.

Son değişikliklerden bir diğeri de, URL, http://PROJECT_ID.appspot.com iken http://PROJECT_ID.REG_ABBR.r.appspot.com olarak ayarlandı. Çoğu uygulama zaman içinde yeni biçime dönüştürülür. URL biçimi hakkında daha fazla bilgiye istekler ve yönlendirme dokümanlarında ulaşabilirsiniz.

Uygulama dağıtıldıktan sonra son ziyaretleri görmek için tarayıcıyı (muhtemelen birkaç kez) yenileyin:

ziyaretme uygulaması

Uygulamanız yeniyse yalnızca bir veya birkaç ziyaret görürsünüz.

4. Flask 3. taraf kitaplığı ekleme

Python 2 App Engine çalışma zamanı, bir dizi "yerleşik" üçüncü taraf kitaplıklarını app.yaml dosyanızda belirtmeniz yeterlidir. Bu taşıma işlemi için kullanım gerekmez ancak bir sonraki taşıma eğiticisinde (2. Modül için) yer alacaktır.

Yerleşik olmayan üçüncü taraf kitaplıkları, requirements.txt adlı bir dosyada belirtilmeli ve her şeyin App Engine'e yüklendiği uygulama koduyla aynı dizindeki lib klasörüne yerel olarak yüklenmelidir. Üçüncü taraf kitaplıklarını paketlemeyle ilgili dokümanlarda daha fazla bilgi bulabilirsiniz.

Flask gibi kopyalanan kitaplıklar için App Engine'e, appengine_config.py yapılandırma dosyasını kullanarak bu kitaplıkları lib klasöründe aramasını bildirmeniz gerekir. appengine_config.py yapılandırma dosyası, requirements.txt ve lib ile aynı üst düzey uygulama klasörüne yerleştirilir. Eğiticinin bu bölümünde şunları yapacaksınız:

  • requirements.txt oluşturma (kopyalanan [yerleşik olmayan] üçüncü taraf kitaplıkları belirtin)
  • appengine_config.py oluştur (üçüncü taraf kitaplıklarını tanır)
  • (3. taraf) paketleri ve bağımlılıkları yükleme

1. requirements.txt oluştur

Paketlerinizi belirtmek için bir requirements.txt dosyası oluşturun. Bizim örneğimizde Flask, gerekli olan üçüncü taraf kitaplığıdır. Bu yazının yazıldığı zaman en son sürüm 1.1.2'dir, dolayısıyla requirements.txt öğesini şu tek satırla oluşturun:

Flask==1.1.2

Kabul edilen biçimler hakkında daha fazla bilgi edinmek için requirements.txt belgelerini inceleyin.

2. appengine_config.py oluştur

Bir sonraki adım, App Engine'in harici üçüncü taraf kitaplıkları tanımasını sağlamaktır. Aşağıdaki içeriğe sahip appengine_config.py adlı bir dosya oluşturun:

from google.appengine.ext import vendor

# Set PATH to your libraries folder.
PATH = 'lib'
# Add libraries installed in the PATH folder.
vendor.add(PATH)

Bu kod daha önce belirttiğimiz işlemi uygular. Yani App Engine'i, kopyalanan kitaplıklar için lib klasörüne yönlendirir.

3. Paketleri ve bağımlıları yükleme

Şimdi lib klasörünü oluşturmak ve Flask ile bağımlılıklarını buraya yüklemek için pip install komutunu çalıştırın:

$ pip install -t lib -r requirements.txt

İster pip ister pip2 kullanın, paket kurulumu tamamlandıktan sonra, aşağıdakine benzer içerik barındıran bir lib klasörünüz olması gerekir:

$ ls lib
bin/
click/
click-7.1.2.dist-info/
flask/
Flask-1.1.2.dist-info/
itsdangerous/
itsdangerous-1.1.0.dist-info/
jinja2/
Jinja2-2.11.2.dist-info/
markupsafe/
MarkupSafe-1.1.1.dist-info/
werkzeug/
Werkzeug-1.0.1.dist-info/

5. Uygulama dosyalarını güncelle

Şimdi main.py uygulama dosyasını güncelleyelim.

1. İçe aktarılanlar

İçe aktarma işlemleri tüm Python dosyalarında olduğu gibi önce gelir. webapp2 çerçevesi içe aktarma işleminin ardından ndb Datastore kitaplığı ve son olarak Django aromalı şablonları işleyen App Engine uzantısı gelir. Aşağıdaki ekranı görmeniz gerekir:

  • ÖNCE:
import webapp2
from google.appengine.ext import ndb
from google.appengine.ext.webapp import template

Flask'a geçtiğinizde hem Flask hem de şablon oluşturucu parçalarını aynı anda içe aktarırsınız. webapp2 ile ilişkili içe aktarma çiftini silin ve aşağıdaki gibi değiştirin (ndb içe aktarma işlemini olduğu gibi bırakın):

  • SONRASI:
from flask import Flask, render_template, request
from google.appengine.ext import ndb

2. Başlangıç

webapp2 kullanan uygulamalar için herhangi bir Python dosyasındaki tüm rotaları ve işleyicileri listeleyen tek bir dizi (Python listesi) gerekir (başkaları da olabilir):

  • ÖNCE:
app = webapp2.WSGIApplication([
    ('/', MainHandler),
], debug=True)

app.yaml uygulamasının daha üst düzey yönlendirme gerçekleştirdiğini ve farklı işleyiciler çağırabileceğini unutmayın. Örnek uygulama, tüm rotaların main.py işleyicisine gelebileceği kadar basit.

Flask, bunun gibi yönlendirme tabloları kullanmadığından main.py içinde bu satırları silin. Flask'ın başlatılması da gerekir. Bu nedenle, aşağıdaki satırı main.py öğesinin üst kısmına, içe aktarma işlemlerinin hemen altına ekleyin:

  • SONRASI:
app = Flask(__name__)

Flask'ta çerçeveyi başlatırsınız ve ardından rotaları tanımlamak için tasarımcıları kullanırsınız. Ayrıca, rotalar sınıflar veya yöntemlerle değil, işlevlerle eşleştirilir.

Bu codelab'de Flask eğiticisine yer vermek kapsam dışıdır. Bu nedenle, çerçeveyi daha rahat kullanmak için Flask eğitimini incelemeye biraz zaman ayırın ve Flask belgelerini inceleyin.

3. Veri modeli

Burada herhangi bir değişiklik yok. Datastore, bir sonraki codelab'in odak noktası olacaktır.

4. İşleyiciler

Uygulama, kullandığınız çerçeveden (webapp2 veya Flask) bağımsız olarak 3 şey yapar:

  1. Kök yolu (/) GET isteklerini işleme
  2. Bir web sayfası "ziyaretini" kaydettirme (Visit nesneyi oluştur/depola)
  3. Son 10 ziyareti görüntüleyin (önceden tanımlanmış bir şablonla, index.html)

webapp2 çerçevesi, desteklenen her HTTP yöntemi için işleyicilerin oluşturulduğu sınıf tabanlı bir yürütme modeli kullanır. Basit örneğimizde yalnızca GET var. Bu nedenle get() yöntemi tanımlanmıştır:

  • ÖNCE:
class MainHandler(webapp2.RequestHandler):
    def get(self):
        store_visit(self.request.remote_addr, self.request.user_agent)
        visits = fetch_visits(10) or ()  # empty sequence if None
        tmpl = os.path.join(os.path.dirname(__file__), 'index.html')
        self.response.out.write(template.render(tmpl, {'visits': visits}))

Yukarıda belirtildiği gibi, Flask kendi yönlendirmesini yapar. İşleyici sınıfı yerine işlevler yazar ve bunları çağrılmaları gereken rotayla süslersiniz. Kullanıcılar, süslemeci çağrısında işlenen HTTP yöntemlerini (ör. @app.route('/app/', methods=['GET', 'POST']). Varsayılan yalnızca GET (ve dolaylı olarak HEAD) olduğu için atlanabilir.

Flask'a taşıma sırasında MainHandler sınıfını ve get() yöntemini aşağıdaki Flask yönlendirme işleviyle değiştirin:

  • SONRASI:
@app.route('/')
def root():
    store_visit(request.remote_addr, request.user_agent)
    visits = fetch_visits(10) or ()  # empty sequence if None
    return render_template('index.html', visits=visits)

Bu kuşkusuz uygulamanızı temsil etmez. Bu durum kesinlikle bu örnekten daha karmaşık olacaktır. Bu eğitimlerin temel amaçlarından biri başlamanıza yardımcı olmak, "kas hafızasının" bir kısmını oluşturmanıza yardımcı olmaktır. ve App Engine'e özel kodda nerede değişiklik yapılması gerektiğini anlayabilirsiniz. Bu değişikliği doğru şekilde yaptığınızı onaylamak için kendi değişikliğinizi Modül 1 main.py ile karşılaştırın.

5. Yardımcı dosyalar

.gcloudignore dosyasında değişiklik yok. Amacı; yardımcı Python, kaynak kontrolü, kod deposu ve diğer dosyalar dahil ancak bunlarla sınırlı olmamak üzere uygulamanın dağıtımı ve yürütülmesi için gerekli olmayan App Engine'e dağıtım yapılmaması gereken dosyaları belirtmektir. .gcloudignore etiketimiz şuna benzer (yorumlar kısaltılması için kaldırılmıştır):

.gcloudignore
.git
.gitignore
.hgignore
.hg/
*.pyc
*.pyo
__pycache__/
/setup.cfg
README.md

6. HTML şablon dosyasını güncelleme

1. Şablon dosyasını taşı

Referans depo klasöründe (Modül 0) index.html şablon dosyası, uygulama dosyalarıyla aynı klasörde yer alır. Flask için HTML dosyalarının bir templates klasörüne yerleştirilmiş olması gerektiğinden, bu klasörü (mkdir templates) oluşturmanız ve index.html klasörünü oraya taşımanız gerekir. Linux veya Mac OS X gibi POSIX uyumlu bir sistemde komutlar şöyle olur:

mkdir templates
mv index.html templates

2. Şablon dosyasını güncelleyin

index.html URL'sini templates klasörüne taşıdıktan sonra küçük ancak gerekli bir düzenleme yapabilirsiniz. Orijinal şablon dosyasının tamamına göz atalım:

<!doctype html>
<html>
<head>
<title>VisitMe Example</title>
<body>

<h1>VisitMe example</h1>
<h3>Last 10 visits</h3>
<ul>
{% for visit in visits %}
    <li>{{ visit.timestamp.ctime }} from {{ visit.visitor }}</li>
{% endfor %}
</ul>

</body>
</html>

webapp2, visit.timestamp.ctime parantez olmadan ( ) gibi çağrılabilirleri yürüten Django şablonlarını kullanırken Jinja2 bunları açıkça zorunlu kılar. Bu ufak bir düzenleme gibi görünse de, çağrılarda bağımsız değişkenleri iletebildiğiniz için Jinja şablonları kullanıma hazır olarak daha güçlüdür.

Django'da web için bir "şablon etiketi" veya filtre yazın. Bu anlayış doğrultusunda, visit.timestamp.ctime çağrısına bir parantez çifti ekleyerek index.html güncellemesi yapın:

  • ÖNCE:
<li>{{ visit.timestamp.ctime }} from {{ visit.visitor }}</li>
  • SONRASI:
<li>{{ visit.timestamp.ctime() }} from {{ visit.visitor }}</li>

Tek değişiklik yapmanız gerekiyor; kalan tüm taşıma codelab'leri için index.html ürününde ek değişiklik yapılmasına gerek yoktur.

7. Özet/Temizlik

Uygulamayı dağıtma

Bu eğiticideki tüm değişiklikleri tamamladığınızda, uygulama klasörünüzdeki dosyalar Modül 1 depo klasöründeki dosyayla aynı (veya neredeyse aynı) olmalıdır. Şimdi, Module 1 Flask uygulamanızın Modül 0 webapp2 sürümüyle aynı şekilde çalıştığını görün.

Daha önce orijinal Modül 0 kodunu dağıtırken yaptığımız gibi gcloud app deploy komutunu kullanın. Uygulamanın beklendiği gibi çalıştığını onaylamak için web tarayıcısından veya curl ya da wget komutundan uygulamaya PROJECT_ID.appspot.com üzerinden erişme.

Bir tür sunucu hatası alırsanız bu, genellikle Python kodunuzda yazım hatası olduğu anlamına gelir. İncelemek için uygulama günlüklerinize göz atın. Ayrıca, dosyalarınızı Modül 1 deposundaki (yukarıdaki bağlantı) ile karşılaştırın.

İsteğe bağlı: Temizleme

Bir sonraki taşıma codelab'ine geçmeye hazır olana kadar faturalandırılmamak için temizlik yapmaya ne dersiniz? Mevcut geliştiriciler olarak muhtemelen App Engine'in fiyatlandırma bilgileri konusunda yeterince bilgi sahibisinizdir.

İsteğe bağlı: Uygulamayı devre dışı bırakma

Henüz bir sonraki eğitime geçmeye hazır değilseniz sizden ücret alınmasını önlemek için uygulamanızı devre dışı bırakın. Bir sonraki codelab'e geçmeye hazır olduğunuzda projeyi yeniden etkinleştirebilirsiniz. Uygulamanız devre dışı bırakıldığında ücretlendirilecek trafik almazsınız ancak ücretsiz kotayı aşarsanız Datastore kullanımınız için faturalandırılabilirsiniz. Bu nedenle, bu sınırın altına düşecek kadar silin.

Öte yandan, taşıma işlemine devam etmeyecekseniz ve her şeyi tamamen silmek istiyorsanız projenizi kapatabilirsiniz.

Sonraki adımlar

1. Modül kodunun tamamlanmasıyla başlayan iki taşıma modülü vardır: Modül 2 ve 7:

  • Modül 2 (Datastore kullanıyorsanız gereklidir)
    • App Engine'den ndb Cloud NDB'ye taşıma
    • Cloud NDB'ye geçtikten sonra birçok başka seçenek kullanılabilir
      • Cloud Run'da çalışması için uygulamanızı container mimarisine alma
      • Uygulamanızı Cloud Datastore istemci kitaplığına daha fazla taşıma
      • Firebase özelliklerine erişmek için uygulamanızı Cloud Firestore'a taşıma
  • Modül 7 ([push] Görev Sıraları'nı kullanıyorsanız gereklidir)
    • App Engine (push) taskqueue kullanımını ekleyin
    • 1. Modül uygulamasını 8. Modül'de Cloud Tasks'a geçiş için hazırlar

8. Ek kaynaklar

App Engine taşıma modülü codelab'leri ile ilgili sorunlar/geri bildirimler

Bu codelab'de herhangi bir sorun bulursanız lütfen göndermeden önce sorununuzu arayın. Arama ve yeni sayı oluşturma bağlantıları:

Taşıma kaynakları

Modül 0 (START) ve Modül 1 (FINISH) için depo klasörlerinin bağlantılarını aşağıdaki tabloda bulabilirsiniz. Bu dosyalara tüm App Engine taşıma işlemleri için depodan da erişilebilir. Bu depoyu klonlayabilir veya ZIP dosyası indirebilirsiniz.

Codelab

Python 2

Python 3

Modül 0

kod

(Yok)

1. Modül

kod

(Yok)

App Engine kaynakları

Bu taşıma işlemiyle ilgili ek kaynaklar aşağıda verilmiştir: