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

1. Genel Bakış

Bu codelab serisi (kendi hızınızda ilerleyebileceğiniz, uygulamalı eğitimler), bir dizi taşıma işlemi boyunca yol göstererek Google App Engine (Standart) geliştiricilerinin uygulamalarını modernleştirmelerine yardımcı olmayı amaçlar. En önemli adım, yeni nesil çalışma zamanları daha esnek olduğundan ve kullanıcılara daha fazla hizmet seçeneği sunduğundan orijinal çalışma zamanı paketli hizmetlerden uzaklaşmaktır. Daha yeni nesil çalışma zamanına geçiş yaparak Google Cloud ürünleriyle daha kolay entegrasyon sağlayabilir, daha geniş bir desteklenen hizmet yelpazesinden yararlanabilir ve mevcut dil sürümlerini destekleyebilirsiniz.

Bu ilk eğitimde, App Engine uygulamalarındaki web çerçevesini modernleştirme için ilk taşıma adımları (webapp2'dan Flask'e geçiş) gösterilmektedir. Uygulamanızda yönlendirmeyi işleyen herhangi bir web çerçevesini kullanabilirsiniz ancak bu eğitimde topluluk tarafından yaygın olarak kullanıldığı için Flask'ı kullanacağız.

Öğrenecekleriniz

  • Üçüncü taraf kitaplıklarını (dahili veya başka) kullanma
  • Yapılandırma dosyalarını güncelleme
  • Basit bir uygulamayı webapp2'dan Flask'e taşıma

Gerekenler

Anket

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

Sadece okuyun Okuyun ve alıştırmaları tamamlayın

2. Arka plan

webapp çerçevesi, App Engine 2008'de ilk kez Python 2.5'te kullanıma sunulduğunda paketlenmişti. Yıllar sonra, 2013'te 2.7 çalışma zamanı 2.5'in desteğini sonlandırdığında yerini webapp2 aldı.

webapp2 (dokümanlara bakın) hâlâ mevcut olsa ve App Engine dışında WSGI uyumlu bir web çerçevesi olarak kullanılabilse de kullanıcı isteklerini uygulamadaki uygun koda yönlendirme işlemini kendi başına yapmaz. Bunun yerine, web trafiğinin ilgili "işleyicilere" yönlendirilmesi için App Engine, yapılandırma dosyaları ve geliştiriciden yararlanır. Ayrıca, webapp2'nın temel avantajları App Engine'in paketlenmiş hizmetleriyle ayrılmaz bir şekilde bağlantılıdır. Bu nedenle, Python 3'te çalışmasına rağmen etkili bir şekilde desteği sonlandırılmıştır (ilgili soruna da bakın).

Bu modül, uygulayıcılara basit bir webapp2 uygulamasını Flask'e taşıma konusunda uygulamalı deneyim kazandırır. Flask, App Engine ve Google Cloud dışındaki birçok hizmet tarafından desteklenen bir çerçeve olduğundan uygulamalar çok daha taşınabilir hale gelir. Flask, uygulamanızı taşımak istediğiniz bir çerçeve değilse kendi yönlendirmesini yaptığı sürece başka bir çerçeve seçebilirsiniz. Bu codelab'de, bilgi teknolojileriyle ilgili karar vericilere (ITDM'ler) ve geliştiricilere taşıma adımları gösterilir. Böylece, hangi çerçeveye taşıma yaparsanız yapın bu süreç hakkında bilgi edinebilirsiniz.

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

  1. Kurulum/Ön Hazırlık
  2. Flask üçüncü taraf kitaplığı ekleme
  3. Uygulama dosyalarını güncelleme
  4. HTML şablon dosyasını güncelleme

3. Kurulum/Ön Hazırlık

Eğitimin ana bölümüne başlamadan önce projemizi ayarlayalım, kodu alalım, ardından gcloud komutunu tekrar hatırlayalım ve temel uygulamayı dağıtalım. Böylece, çalışır durumda olan bir kodla başladığımızı biliriz.

1. Proje oluşturma

Mevcut bir geliştirici olarak, App Engine kontrol panelinizde hangi hizmetleri çalıştırdığınız muhtemelen gösteriliyordur. Bu eğitici için yepyeni bir proje oluşturmanızı veya mevcut bir projeyi yeniden kullanmanızı öneririz. Projenin etkin bir faturalandırma hesabına sahip olduğundan ve App Engine'in (uygulama) etkinleştirildiğinden emin olun.

2. Referans değeri örnek uygulamasını indirme

GAE migration repo'da ihtiyacınız olan tüm kodlar bulunur. Klonlayın veya ZIP dosyasını indirin. Bu eğitimde, Module 0 klasöründeki (START) kodla başlayacaksınız. Eğitimi tamamladığınızda kodunuz Module 1 klasöründeki (FINISH) kodla eşleşmelidir. Değilse bir sonraki laboratuvara geçebilmek için farklılıkları inceleyin.

POSIX ls komutuyla gösterildiği gibi, Module 0 klasöründe aşağıdaki gibi görünen dosyalar olmalıdır:

$ ls
app.yaml        index.html      main.py

3. gcloud komutlarını (yeniden) öğrenme

Makinenizde henüz gcloud komutu yoksa Google Cloud SDK'yı yükleyin ve gcloud komutunun yürütme yolunuzda kullanılabilir olduğundan emin olun. Ayrıca aşağıdaki gcloud komutları hakkında bilgi edinin:

  1. gcloud components update — Google Cloud SDK'yı güncelleme
  2. gcloud auth login: Kimlik bilgileriyle erişilen hesabınıza giriş yapın.
  3. gcloud config list: GCP proje 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 kurulumu tamamlamanız gerekir. Bu komutlara hızlıca göz atalım.

İlk olarak, gcloud components update en son Cloud SDK sürümüne sahip olmanızı sağlar. Bu komut çalıştırıldığında 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, bundan sonra vereceğiniz gcloud komutları için kimliğinizi doğrulamak üzere gcloud auth login kodunu 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ı görmek için gcloud config list simgesini 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 bir proje oluşturma veya mevcut bir projeyi seçme konusunda size yol gösterecektir. gcloud config list komutunun çıktısı, bu eğitimde kullanmayı planladığınız seçili 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ünü takip ederek isterseniz yeni bir proje oluşturabilir veya mevcut projelerinizden birini kullanabilirsiniz. Projenizin kontrol panelinde, kimliğini (proje adı ve numarasıyla birlikte) gösteren proje bilgileri kartını görmeniz gerekir:

proje bilgi kartı

Son komut (#5), gcloud app deploy, uygulamanızı App Engine'e dağıtmak için kullanılır. Bu özellik yeni kullanıma sunulduğu için şu anda çalıştırmak isteğe bağlıdır. Ancak, çalışıp çalışmadığını doğrulamak için Modül 0 kodunu dağıtmanızı kesinlikle tavsiye ederiz. Yürütme sırasında, uygulamanın çalışmasını istediğiniz coğrafi bölgeyi (genellikle bulunduğunuz yer) seçin. Ancak bu ayar yapıldıktan sonra değiştirilemez. Ardından, dağıtım bilgilerinin geri kalanını izleyin. İşlem tamamlandığında uygulamanızın yayınlanacağı URL hakkında bilgilendirilirsiniz. Görebileceğiniz bilgilerin kısaltılmış bir versiyonunu aşağıda 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 kullanmıyorsanız orijinal dağıtım appcfg.py update komutunun gcloud app deploy ile değiştirildiğini fark edebilirsiniz. gcloud app deploy hakkında daha fazla bilgi edinmek için dokümanlar sayfasına göz atın.

Yakın zamanda yapılan bir diğer değişiklik ise dağıtılan uygulamaların URL'sinde yapıldı. URL, http://PROJECT_ID.appspot.com olarak değiştirildi.http://PROJECT_ID.REG_ABBR.r.appspot.com Çoğu uygulama sonunda yeni formata dönüştürülecek. İstekler ve yönlendirme dokümanlarında URL biçimi hakkında daha fazla bilgi edinin.

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

visitme uygulaması

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

4. Flask üçüncü taraf kitaplığı ekleme

Python 2 App Engine çalışma zamanı, "yerleşik" üçüncü taraf kitaplıkları sunar. Bu kitaplıkları kullanmak için app.yaml dosyanızda belirtmeniz yeterlidir. Bu taşıma işleminde kullanılması gerekmese de bu işlevler bir sonraki taşıma eğitiminde (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. Daha fazla bilgi için üçüncü taraf kitaplıklarını paketleme dokümanlarına bakın.

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

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

1. requirements.txt oluştur

Paketlerinizi belirtmek için requirements.txt dosyası oluşturun. Bizim örneğimizde, gerekli olan üçüncü taraf kitaplığı Flask'tır. Bu yazı yazıldığı sırada en son sürüm 1.1.2 olduğundan, aşağıdaki tek satırla requirements.txt oluşturun:

Flask==1.1.2

Kabul edilen biçimler hakkında daha fazla bilgi edinmek için requirements.txt belgelerine göz atın.

2. appengine_config.py oluştur

Bir sonraki adım, App Engine'in harici üçüncü taraf kitaplıklarını tanımasını sağlamaktır. Aşağıdaki içeriklere 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 gibi App Engine'i kopyalanan kitaplıkların bulunduğu lib klasörüne yönlendirir.

3. Paketleri ve bağımlılıkları yükleme

Şimdi pip install komutunu çalıştırarak lib klasörünü oluşturun ve Flask ile bağımlılıklarını bu klasöre yükleyin:

$ pip install -t lib -r requirements.txt

pip veya pip2 kullanmış olsanız da paket yükleme işlemi tamamlandıktan sonra lib klasörünüzde aşağıdakilere benzer içerikler bulunur:

$ 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üncelleme

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

1. İçe aktarılanlar

Tüm Python dosyalarında olduğu gibi, içe aktarmalar önce gelir. webapp2 çerçeve içe aktarma işleminden sonra ndb Datastore kitaplığı ve son olarak Django tarzı şablonları işleyen App Engine uzantısı gelir. Aşağıdaki ekranı görmeniz gerekir:

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

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

  • ŞU TARİHTEN SONRA:
from flask import Flask, render_template, request
from google.appengine.ext import ndb

2. Başlangıç

webapp2 kullanan uygulamalar, herhangi bir Python dosyasındaki tüm rotaları ve işleyicileri listeleyen tek bir dizi (Python listesi) gerektirir (başka dosyalar da olabilir):

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

app.yaml'nın daha üst düzey yönlendirme yaptığını ve farklı işleyicileri çağırabileceğini unutmayın. Örnek uygulama, tüm rotaların main.py işleyicisine ulaşacağı kadar basittir.

Flask bu tür yönlendirme tablolarını kullanmaz. Bu nedenle main.py dosyasında bu satırları silin. Flask'ın da başlatılması gerekir. Bu nedenle, main.py dosyasının en üstüne, içe aktarma işlemlerinin hemen altına aşağıdaki satırı ekleyin:

  • ŞU TARİHTEN SONRA:
app = Flask(__name__)

Flask'te önce çerçeveyi başlatır, ardından rotaları tanımlamak için dekoratörleri kullanırsınız. Ayrıca, rotalar sınıflar veya yöntemlerle değil, işlevlerle eşleştirilir.

Bu codelab'e Flask eğitimi dahil edilmemiştir. Bu nedenle, Flask eğitimini inceleyerek ve Flask belgelerini gözden geçirerek bu çerçeveye alışmak için biraz zaman ayırın.

3. Veri modeli

Burada herhangi bir değişiklik yok. Bir sonraki codelab'de Datastore'a odaklanacağız.

4. İşleyiciler

Hangi çerçeveyi kullanırsanız kullanın (webapp2 veya Flask), uygulama 3 işlem yapar:

  1. Kök yolu (/) GET isteklerini işleme
  2. Web sayfası "ziyareti" kaydetme (Visit nesnesi oluşturma/saklama)
  3. En son 10 ziyaretin (önceden tanımlanmış bir şablonla, index.html) gösterilmesi

webapp2 çerçevesi, desteklenen her HTTP yöntemi için işleyicilerin oluşturulduğu sınıfa dayalı bir yürütme modeli kullanır. Basit örneğimizde yalnızca GET olduğundan get() yöntemi tanımlanır:

  • ÖNCESİ:
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 yazıp bunları çağrılmaları gereken rotayla süslersiniz. Kullanıcılar, dekoratör çağrısında işlenen HTTP yöntemlerini belirtebilir. Örneğin: @app.route('/app/', methods=['GET', 'POST']). Varsayılan olarak yalnızca GET (ve dolaylı olarak HEAD) olduğundan devre dışı bırakılabilir.

Flask'e geçiş yaparken MainHandler sınıfını ve get() yöntemini aşağıdaki Flask yönlendirme işleviyle değiştirin:

  • ŞU TARİHTEN SONRA:
@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)

Elbette bu örnek, uygulamanızı temsil etmez. Uygulamanız kesinlikle bu örnekten daha karmaşıktır. Bu eğitici kılavuzların temel amaçlarından biri, başlamanıza,"kas hafızası" oluşturmanıza ve App Engine'e özgü kodda değişiklikleri nerede yapacağınızı anlamanıza yardımcı olmaktır. Bu değişikliği doğru şekilde yaptığınızı onaylamak için kendi kodunuzu 1. Modül main.py ile karşılaştırın.

5. Yardımcı dosyalar

.gcloudignore dosyasında değişiklik yapılmamıştır. Bu dosyanın amacı, yardımcı Python, kaynak kontrolü, depo şablonu ve diğer dosyalar dahil ancak bunlarla sınırlı olmamak üzere, uygulamanın dağıtılması ve yürütülmesi için gereksiz olan ve App Engine'e dağıtılmayacak dosyaları belirtmektir. .gcloudignore şeklimiz (kısa olması için yorumlar 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şıma

Temel depo klasöründe (Modül 0), index.html şablon dosyası uygulama dosyalarıyla aynı klasördedir. Flask, HTML dosyalarının templates klasörüne yerleştirilmesini gerektirdiğinden bu klasörü (mkdir templates) oluşturup index.html dosyasını buraya taşımanız gerekir. Linux veya Mac OS X gibi POSIX uyumlu bir sistemde komutlar şu şekilde olur:

mkdir templates
mv index.html templates

2. Şablon dosyasını güncelleme

index.html öğesini templates içine taşıdıktan sonra küçük ama gerekli bir düzenleme yapmanız gerekir. Orijinal şablon dosyasına bir bütün olarak bakalı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 gibi çağrılabilir öğeleri parantez ( ) olmadan yürüten Django şablonlarını kullanırken Jinja2, bunların açıkça belirtilmesini gerektirir. Bu küçük bir değişiklik gibi görünse de Jinja şablonları, çağrılarda bağımsız değişkenler iletebildiğiniz için kutudan çıktığı haliyle daha güçlüdür.

Django'da "şablon etiketi" oluşturmanız veya filtre yazmanız gerekir. Bu bilgiyi kullanarak index.html çağrısına bir parantez çifti ekleyerek index.html öğesini güncelleyin:visit.timestamp.ctime

  • ÖNCESİ:
<li>{{ visit.timestamp.ctime }} from {{ visit.visitor }}</li>
  • ŞU TARİHTEN SONRA:
<li>{{ visit.timestamp.ctime() }} from {{ visit.visitor }}</li>

Gerekli olan tek değişiklik budur. Kalan tüm taşıma codelab'leri için index.html'da başka değişiklik yapılması gerekmez.

7. Özet/Temizleme

Uygulamayı dağıtma

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

Orijinal Modül 0 kodunu dağıtırken yaptığımız gibi gcloud app deploy komutunu kullanın. Uygulamaya PROJECT_ID.appspot.com adresinden erişerek (web tarayıcısından veya curl ya da wget komutundan) beklendiği gibi çalıştığını doğrulayın.

Bir tür sunucu hatası alırsanız bu genellikle Python kodunuzda bir yazım hatası olduğu anlamına gelir. İncelemek için uygulama günlüklerinize göz atın. Ayrıca dosyalarınızı 1. Modül deposundaki dosyalarla (hemen yukarıdaki bağlantı) 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 yapma konusunda ne yapmalısınız? Mevcut geliştiriciler olarak App Engine'in fiyatlandırma bilgileri hakkında bilgi sahibi olabilirsiniz.

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

Henüz bir sonraki eğitime geçmeye hazır değilseniz ücretlendirilmemek için uygulamanızı devre dışı bırakın. Bir sonraki codelab'e geçmeye hazır olduğunuzda yeniden etkinleştirebilirsiniz. Uygulamanız devre dışıyken ücretlendirmeye neden olacak trafik almaz. Ancak Datastore kullanımınız ücretsiz kotayı aşarsa bu kullanım için de faturalandırılabilirsiniz. Bu nedenle, bu sınırın altında kalmak için yeterli miktarda veri silin.

Diğer yandan, taşımalara devam etmeyecekseniz ve her şeyi tamamen silmek istiyorsanız projenizi kapatabilirsiniz.

Sonraki adımlar

Tamamlanan 1. Modül koduyla BAŞLAYAN iki taşıma modülü vardır: 2. ve 7. Modüller:

  • 2. Modül (Datastore kullanıyorsanız zorunlu)
    • App Engine'den ndb Cloud NDB'ye taşıma
    • Cloud NDB'ye geçtikten sonra birçok başka seçenek kullanılabilir hâle gelir.
      • Uygulamanızı Cloud Run'da çalışacak şekilde container'a dönüştürme
      • Uygulamanızı Cloud Datastore istemci kitaplığına daha fazla taşıma
      • Firebase özelliklerine erişmek için uygulamanızı Cloud Firestore'a taşıma
  • 7. Modül ([push] görev sıralarını kullanıyorsanız zorunlu)
    • App Engine (push) taskqueue kullanımını ekleme
    • 8. modülde Cloud Tasks'a taşıma için 1. modül uygulamasını hazırlar.

8. Ek kaynaklar

App Engine taşıma modülüyle ilgili codelab sorunları/geri bildirimleri

Bu codelab ile ilgili sorun bulursanız lütfen göndermeden önce sorununuzu arayın. Arama yapma ve yeni sorunlar oluşturma bağlantıları:

Taşıma kaynakları

Modül 0 (BAŞLANGIÇ) ve Modül 1 (BİTİŞ) ile ilgili depo klasörlerinin bağlantılarını aşağıdaki tabloda bulabilirsiniz. Ayrıca, tüm App Engine geçişleri için kullanılan depodan da erişilebilir. Bu depoyu klonlayabilir veya ZIP dosyası olarak indirebilirsiniz.

Codelab

Python 2

Python 3

Modül 0

code

(yok)

1. Modül

code

(yok)

App Engine kaynakları

Bu özel taşıma işlemiyle ilgili ek kaynakları aşağıda bulabilirsiniz: