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
- Şu özelliklere sahip bir Google Cloud Platform projesi:
- Temel Python becerileri
- Temel Linux komutlarıyla ilgili bilgi sahibi olma
- App Engine uygulamalarını geliştirme ve dağıtma ile ilgili temel bilgiler
Anket
Bu codelab'i nasıl kullanacaksınız?
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:
- Kurulum/Ön Çalışma
- Flask 3. taraf kitaplığı ekleme
- Uygulama dosyalarını güncelle
- 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.
- START: Modül 0 kodu
- FINISH: Modül 1 kodu
- Deponun tamamı (ZIP dosyasını klonlamak veya indirmek iç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:
gcloud components update
- Google Cloud SDK'yı güncelleyingcloud auth login
— Kimlik bilgisi içeren hesabınıza giriş yapıngcloud config list
- GCP projesi yapılandırma ayarlarını listelergcloud config set project PROJECT_ID
- GCP proje kimliğini ayarlayıngcloud 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.
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:
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:
- Kök yolu (
/
) GET isteklerini işleme - Bir web sayfası "ziyaretini" kaydettirme (
Visit
nesneyi oluştur/depola) - 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
- App Engine'den
- 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
- App Engine (push)
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 | (Yok) | |
1. Modül | (Yok) |
App Engine kaynakları
Bu taşıma işlemiyle ilgili ek kaynaklar aşağıda verilmiştir:
- Python mikro web çerçeveleri
- (ESKİ) Python 2.5'ten 2.7'ye ve
webapp
'denwebapp2
'a taşıma - Python 3 ve GAE yeni nesil çalışma zamanına geçiş
- Genel