1. Genel Bakış
Serverless Migration Station serisi codelab'ler (kendi hızınızda ilerleyebileceğiniz, uygulamalı eğitimler) ve ilgili videolar, Google Cloud sunucusuz geliştiricilerin öncelikle eski hizmetlerden uzaklaşarak bir veya daha fazla taşıma işlemi yapmalarına rehberlik ederek uygulamalarını modernleştirmelerine yardımcı olmayı amaçlar. Bu sayede uygulamalarınız daha taşınabilir hale gelir, daha fazla seçenek ve esneklik elde edersiniz. Böylece daha geniş bir Cloud ürün yelpazesiyle entegrasyon yapabilir, bu ürünlere erişebilir ve yeni dil sürümlerine daha kolay yükseltebilirsiniz. Başlangıçta öncelikle App Engine (standart ortam) geliştiricileri olmak üzere en eski Cloud kullanıcılarına odaklanılsa da bu seri, Cloud Functions ve Cloud Run gibi diğer sunucusuz platformları veya uygun olduğu durumlarda başka platformları da kapsayacak kadar geniştir.
Daha önce geliştiricilerin dil sürümlerini yükseltebilmeleri için App Engine'in Datastore ve Memcache gibi eski "paketlenmiş hizmetlerinden" geçiş yapmaları gerekiyordu. Bu iki işlem, arka arkaya yapılması gereken ve zorlu olabilecek işlemlerdi. Paketlenmiş temel hizmetlerin birçoğunu 2. nesil App Engine hizmetinde kullanıma sunarak geliştiricilerin, uygulamalarını en yeni çalışma zamanlarına taşımasına ve paketlenmiş hizmetlerin (çoğunu) kullanmaya devam etmesine olanak tanıyoruz. Bu codelab'de, Datastore paketlenmiş hizmetinin (App Engine NDB kitaplığı aracılığıyla) kullanımını korurken örnek bir uygulamayı Python 2'den 3'e yükseltme adımları açıklanmaktadır. Bu eğitimde ele alınacağı üzere, paketlenmiş hizmetlerin çoğunun kullanımı için kodda yalnızca küçük bir güncelleme yapılması gerekir. Ancak daha kapsamlı değişiklikler gerektiren hizmetler de vardır. Bu hizmetler, takip modülü ve codelab olan "Bölüm 2"de ele alınacaktır.
Bu demoda aşağıdaki işlemleri yapmayı öğreneceksiniz:
- Örnek App Engine uygulamasını Python 2'den 3'e taşıma
- Uygulama yapılandırmasını App Engine SDK'sını içerecek şekilde güncelleyin.
- Python 3 gibi 2. nesil çalışma zamanlarında paketlenmiş hizmetleri destekleyen uygulamaya SDK kodu ekleme
İhtiyacınız olanlar
- Etkin bir GCP faturalandırma hesabına sahip bir Google Cloud projesi
- Temel Python becerileri
- Yaygın Linux komutları hakkında çalışma bilgisi
- App Engine uygulamalarını geliştirme ve dağıtma hakkında temel bilgiler
- Çalışan bir 1. Modül App Engine uygulaması (codelab'ini tamamlayın [önerilir] veya uygulamayı depodan kopyalayın)
Anket
Bu eğitimi nasıl kullanacaksınız?
Python ile ilgili deneyiminizi nasıl değerlendirirsiniz?
Google Cloud hizmetlerini kullanma deneyiminizi nasıl değerlendirirsiniz?
2. Arka plan
2008'de kullanıma sunulan orijinal App Engine hizmeti, geliştiricilerin uygulamaları küresel olarak oluşturup dağıtmasını kolaylaştırmak için bir dizi eski API (artık paketlenmiş hizmetler olarak bilinir) ile birlikte geliyordu. Bu hizmetler arasında Datastore, Memcache ve Task Queue yer alır. Kullanıcılar, App Engine'e bağlı özel API'leri kullanırken uygulamalarının taşınabilirliği konusunda endişelenmeye başladı ve uygulamalarının daha taşınabilir olmasını istedi. Bu durum ve paketlenmiş hizmetlerin birçoğunun kendi bağımsız Cloud ürünleri haline gelmesi, App Engine ekibinin 2018'de yeni nesil platformu bu hizmetler olmadan başlatmasına neden oldu.
Python 2 geliştiricilerinin Python 3'e yükseltme konusunda istekli olduğu günümüze hızlıca geçelim. Paketlenmiş hizmetleri kullanan bir 2.x uygulamasının, uygulamaları 3.x'e taşınmadan önce bu hizmetlerden taşınması gerekiyordu. Bu da arka arkaya iki zorunlu taşıma anlamına geliyordu ve bu taşımalar zorlayıcı olabiliyordu. Bu geçişe yardımcı olmak için App Engine ekibi 2021 sonbaharında geçmişe yönelik bir "solucan deliği" oluşturdu. Bu sayede yeni nesil çalışma zamanlarında çalışan uygulamalar, paketlenmiş hizmetlerin çoğuna erişebiliyor. Bu sürüm, orijinal çalışma zamanlarında bulunan hizmetlerin tümünü içermese de Datastore, Task Queue ve Memcache gibi önemli hizmetler mevcuttur.
Bu codelab'de, paketlenmiş hizmetlerin kullanımını korurken uygulamanızı Python 3'e yükseltmek için yapmanız gereken değişiklikler gösterilmektedir. Amaç, uygulamalarınızın en yeni çalışma zamanlarında çalışmasını sağlamaktır. Böylece, 3.x sürümüne yükseltme işlemini engellemek yerine, kendi zaman çizelgelerinize göre paketlenmiş hizmetlerden Cloud bağımsız eşdeğerlerine veya üçüncü taraf alternatiflerine geçiş yapabilirsiniz. Paketlenmiş hizmetlerden geçiş yapmak artık zorunlu olmasa da bu geçiş, uygulamalarınızın nerede barındırılabileceği konusunda daha fazla taşınabilirlik ve esneklik sağlar. Örneğin, iş yüklerinize daha iyi hizmet edebilecek platformlara geçebilir veya daha modern bir dil sürümüne yükseltirken App Engine'de kalabilirsiniz.
1. Modül Python 2 örnek uygulaması, App Engine NDB aracılığıyla Datastore paketlenmiş hizmetini kullanır. Uygulama, 1. modüldeki codelab'de tamamlanan webapp2'den Flask'e geçişi zaten yaptı ancak Datastore kullanımı değişmedi.
Bu eğitimde aşağıdaki adımlar yer almaktadır:
- Kurulum/Ön Hazırlık
- Yapılandırmayı güncelleyin
- Uygulama kodunu değiştirme
3. Kurulum/Ön Hazırlık
Bu bölümde aşağıdakilerin nasıl yapılacağı açıklanmaktadır:
- Cloud projenizi ayarlama
- Temel örnek uygulamayı edinme
- Temel uygulamayı (yeniden) dağıtma ve doğrulama
Bu adımlar, çalışan bir kodla başlamanızı sağlar.
1. Proje oluşturma
1. Modül'deki codelab'i tamamladıysanız aynı projeyi (ve kodu) yeniden kullanmanızı öneririz. Alternatif olarak, yepyeni bir Cloud projesi oluşturabilir veya mevcut başka bir projeyi yeniden kullanabilirsiniz. Projenin, App Engine hizmetinin etkinleştirildiği aktif bir faturalandırma hesabına sahip olduğundan emin olun.
2. Temel örnek uygulamayı edinme
Bu codelab'in ön koşullarından biri, çalışan bir 1. Modül App Engine uygulamasının olmasıdır: 1. Modül codelab'ini tamamlayın (önerilir) veya 1. Modül uygulamasını depodan kopyalayın. Sizinkini veya bizimkini kullanıyor olmanız fark etmez. 1. Modül kodu, "BAŞLAYACAĞIMIZ" yerdir. Bu codelab, her adımı ayrıntılı olarak açıklar ve 7. modülün "FINISH" adlı depo klasöründeki koda benzer bir kodla sonuçlanır.
- BAŞLANGIÇ: Module 1 folder (Python 2)
- BİTİRME: Module 1b folder (Python 3)
- Deponun tamamı (ZIP dosyasını klonlamak veya indirmek için)
1. Modül uygulamasından hangisini kullanırsanız kullanın, klasör aşağıdaki gibi görünmelidir. Klasörde lib klasörü de olabilir:
$ ls README.md appengine_config.py requirements.txt app.yaml main.py templates
3. Temel uygulamayı (yeniden) dağıtma
1. Modül uygulamasını (yeniden) dağıtmak için aşağıdaki adımları uygulayın:
- Varsa
libklasörünü silin veliböğesini yeniden doldurmak içinpip install -t lib -r requirements.txtkomutunu çalıştırın. Hem Python 2 hem de 3 yüklüyse bunun yerinepip2komutunu kullanmanız gerekebilir. gcloudkomut satırı aracını yüklediğinizden ve başlattığınızdan emin olun ve kullanımını inceleyin.- Verilen her
gcloudkomutundaPROJECT_IDdeğerini girmek istemiyorsanız Cloud projenizigcloud config set projectPROJECT_IDile ayarlayın. - Örnek uygulamayı
gcloud app deployile dağıtma - 1. Modül uygulamasının, en son ziyaretleri gösterirken sorunsuz bir şekilde beklendiği gibi çalıştığını onaylayın (aşağıda gösterilmiştir).

4. Yapılandırmayı güncelleyin
Bu adımları başarıyla uygulayıp web uygulamanızın çalıştığını gördüğünüzde, bu uygulamayı Python 3'e taşımaya hazırsınız demektir. Bu işlem için öncelikle yapılandırmadan başlayın.
requirements.txt dosyasına SDK ekleme
App Engine Python 3 çalışma zamanı, üçüncü taraf kitaplıklarını kullanmayla ilgili iş yükünü önemli ölçüde azaltır. Tek yapmanız gereken bunları requirements.txt içinde listelemektir. Python 3'te paketlenmiş hizmetleri kullanmak için App Engine SDK paketini (appengine-python-standard) ekleyin. SDK paketi, 1. Modül'den Flask'e katılır:
flask
appengine-python-standard
app.yaml dosyasını güncelleme
Yapılandırma değişikliklerini app.yaml dosyanıza uygulamak için aşağıdaki adımları uygulayın:
runtimeyönergesini desteklenen Python 3 sürümüyle değiştirin. Örneğin, Python 3.10 içinpython310değerini belirtin.- Python 3'te kullanılmadıkları için hem
threadsafehem deapi_versionyönergelerini silin. - Bu uygulamada yalnızca komut dosyası işleyicileri olduğundan
handlersbölümünü tamamen silin. Uygulamanızda statik dosya işleyiciler varsa bunlarıhandlersiçinde olduğu gibi bırakın. - Python 3 çalışma zamanı, Python 2 çalışma zamanının desteklediği gibi yerleşik üçüncü taraf kitaplıklarını desteklemez. Uygulamanızda
app.yamliçindelibrariesbölümü varsa bu bölümün tamamını silin. (Yalnızca gerekli paketlerinrequirements.txtiçinde listelenmesi gerekir. Örneğin, yerleşik olmayan kitaplıklar.) Örnek uygulamamızdalibrariesbölümü bulunmadığından bir sonraki adıma geçin. - Kullanmak için
app_engine_apisyönergesi oluşturun vetrueolarak ayarlayın. Bu, yukarıdakirequirements.txtöğesine App Engine SDK paketini eklemeye karşılık gelir.
app.yaml üzerinde yapılması gereken değişikliklerin özeti:
ÖNCESİ:
runtime: python27
threadsafe: yes
api_version: 1
handlers:
- url: /.*
script: main.app
SONRASI:
runtime: python310
app_engine_apis: true
Diğer yapılandırma dosyaları
Üçüncü taraf paketlerin tümünün yalnızca requirements.txt içinde listelenmesi gerektiğinden, appengine_config.py içinde özel bir durumunuz yoksa bu paket gerekli değildir. Bu nedenle, paketi silin. Benzer şekilde, tüm üçüncü taraf kitaplıklar derleme işlemi sırasında otomatik olarak yüklendiğinden bunları kopyalamanıza veya satmanıza gerek yoktur. Bu da pip install komutunun ve lib klasörünün artık kullanılmayacağı anlamına gelir. Bu nedenle, bunları silebilirsiniz. Özetleme:
appengine_config.pydosyasını silmelibklasörünü silme
Gerekli tüm yapılandırma değişiklikleri tamamlandı.
5. Uygulama kodunu değiştirme
Python 3 çalışma zamanı ortamında kullanılabilen paketlenmiş hizmetlerin çoğuna erişmek için Web Server Gateway Interface (WSGI) uygulama nesnesini main.py içine alan kısa bir kod parçası gerekir. Sarmalayıcı işlev google.appengine.api.wrap_wsgi_app()'dır. Bu işlevi, içe aktararak ve WSGI nesnenizi bu işlevle sarmalayarak kullanırsınız. main.py'da Flask için gerekli güncellemeyi yansıtmak üzere aşağıdaki değişiklikleri yapın:
ÖNCESİ:
from flask import Flask, render_template, request
from google.appengine.ext import ndb
app = Flask(__name__)
SONRASI:
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)
Diğer Python çerçeveleri için WSGI sarmalama örneklerini dokümanlarda bulabilirsiniz.
Bu örnek, uygulamanızın Python 3'teki paketlenmiş hizmetlerin çoğuna erişmesini sağlasa da Blobstore ve Mail gibi diğer hizmetler için ek kod gerekir. Bu örnekleri başka bir taşıma modülünde ele alacağız.
App Engine paketlenmiş hizmetlerinin kullanımını 1. Modül örnek uygulamasına eklemek için gereken tüm değişiklikler tamamlandı. Uygulama zaten Python 2 ve 3 ile uyumlu olduğundan, yapılandırmada yaptığınız değişikliklerin dışında Python 3'e taşıma için ek değişiklik yapmanız gerekmez. Son adım: Bu değiştirilmiş uygulamayı yeni nesil App Engine Python 3 çalışma zamanına dağıtın ve güncellemelerin başarılı olduğunu onaylayın.
6. Özet/Temizleme
Bu bölümde, uygulamayı dağıtarak, amaçlandığı gibi çalıştığını ve yansıtılan tüm çıktılarda çalıştığını doğrulayarak bu codelab'i tamamlıyoruz. Uygulama doğrulandıktan sonra temizleme işlemlerini yapın ve sonraki adımları göz önünde bulundurun.
Uygulamayı dağıtma ve doğrulama
Python 3 uygulamasını gcloud app deploy ile dağıtın ve uygulamanın Python 2'deki gibi çalıştığını doğrulayın. İşlevsellik değişmediğinden çıktı, 1. Modül uygulamasının çıktısıyla aynı olmalıdır:

Son notlar
- Elinizdekileri 1b klasöründekilerle (FINISH) karşılaştırın. Yol boyunca yanlış bir adım attıysanız gerekli düzenlemeleri yapın.
- Uygulamanız hâlâ
webapp2kullanıyorsa 0. Modülmain.pyile 1b Modülümain.py'nü bu sayfada yan yana karşılaştırın. Ardından,webapp2'den Flask'e nasıl geçeceğinizi öğrenmek için 1. Modül codelab'ini yapın.
Python 2 App Engine uygulamalarınızı Python 3'e taşımak ve paketlenmiş hizmetleri kullanmaya devam etmek için ilk adımı attığınızdan dolayı tebrik ederiz.
Temizleme
Genel
Şimdilik işiniz bittiyse faturalandırmayı önlemek için App Engine uygulamanızı devre dışı bırakmanızı öneririz. Ancak biraz daha test veya deneme yapmak isterseniz App Engine platformunda ücretsiz kota bulunur. Bu nedenle, kullanım katmanını aşmadığınız sürece sizden ücret alınmaz. Bu, işlem için geçerlidir ancak ilgili App Engine hizmetleri için de ücret alınabilir. Daha fazla bilgi için fiyatlandırma sayfasını inceleyin. Bu taşıma işlemine başka Cloud hizmetleri de dahilse bunlar ayrı olarak faturalandırılır. Her iki durumda da varsa aşağıdaki "Bu codelab'e özel" bölümüne bakın.
Tam açıklama yapmak gerekirse App Engine gibi bir Google Cloud sunucusuz bilgi işlem platformuna dağıtım yapıldığında küçük derleme ve depolama maliyetleri oluşur. Cloud Build ve Cloud Storage'ın kendi ücretsiz kotaları vardır. Bu görüntünün depolanması, kotanın bir kısmını kullanır. Ancak, böyle bir ücretsiz katmanın olmadığı bir bölgede yaşıyor olabilirsiniz. Bu nedenle, olası maliyetleri en aza indirmek için depolama alanı kullanımınıza dikkat edin. İncelemeniz gereken belirli Cloud Storage "klasörleri" şunlardır:
console.cloud.google.com/storage/browser/LOC.artifacts.PROJECT_ID.appspot.com/containers/imagesconsole.cloud.google.com/storage/browser/staging.PROJECT_ID.appspot.com- Yukarıdaki depolama bağlantıları,
PROJECT_IDve *LOC*ınıza bağlıdır. Örneğin, uygulamanız ABD'de barındırılıyorsa "us" olur.
Öte yandan, bu uygulamaya veya ilgili diğer taşıma codelab'lerine devam etmeyecekseniz ve her şeyi tamamen silmek istiyorsanız projenizi kapatın.
Bu codelab'e özel
Aşağıda listelenen hizmetler bu codelab'e özeldir. Daha fazla bilgi için her ürünün belgelerine bakın:
- App Engine Datastore hizmeti, ücretsiz katmanı da olan Cloud Datastore (Datastore modunda Cloud Firestore) tarafından sağlanır. Daha fazla bilgi için fiyatlandırma sayfasına bakın.
Sonraki adımlar
Buradan sonra birkaç farklı yöne gidebilirsiniz:
- Daha fazla kod değişikliği gerektiren paketlenmiş hizmetleri kullanarak kodu güncelleme
- Paketlenmiş hizmetlerden bağımsız Cloud ürünlerine geçiş
- App Engine'den başka bir bulut sunucusuz platforma geçiş
Blobstore, Mail ve Deferred gibi diğer paketlenmiş hizmetlere erişmek için daha fazla kod değişikliği yapılması gerekir. App Engine'in eski paketlenmiş hizmetlerinden uzaklaşmaya odaklanan ve dikkate alınması gereken taşıma modülleri şunlardır:
- 2. Modül: App Engine NDB'den Cloud NDB'ye
- 7-9. modüller: App Engine TaskQueue (push görevleri) - Cloud Tasks
- 12-13. Modüller: App Engine Memcache'ten Cloud Memorystore'a
- Modüller 15-16: App Engine Blobstore'dan Cloud Storage'a
- 18-19. Modüller: App Engine TaskQueue (çekme görevleri) - Cloud Pub/Sub
App Engine artık Google Cloud'daki tek sunucusuz platform değil. Küçük bir App Engine uygulamanız veya sınırlı işlevselliğe sahip bir uygulamanız varsa ve bunu bağımsız bir mikro hizmete dönüştürmek istiyorsanız ya da tek bir uygulamayı birden fazla yeniden kullanılabilir bileşene ayırmak istiyorsanız Cloud Functions'a geçmeyi düşünebilirsiniz. Container mimarisine alma, özellikle CI/CD (sürekli entegrasyon/sürekli teslim veya dağıtım) ardışık düzeninden oluşuyorsa uygulama geliştirme iş akışınızın bir parçası haline geldiyse Cloud Run'a geçmeyi düşünebilirsiniz. Bu senaryolar aşağıdaki modüllerde ele alınır:
- App Engine'den Cloud Functions'a geçiş: 11. Modül'e bakın.
- App Engine'den Cloud Run'a taşıma: Uygulamanızı Docker ile container mimarisine almak için 4. Modül'e, container'lar, Docker bilgisi veya
Dockerfileolmadan yapmak için 5. Modül'e bakın.
Başka bir sunucusuz platforma geçmek isteğe bağlıdır. Herhangi bir değişiklik yapmadan önce uygulamalarınız ve kullanım alanlarınız için en iyi seçenekleri göz önünde bulundurmanızı öneririz.
Bir sonraki geçiş modülünüz hangisi olursa olsun, tüm Serverless Migration Station içeriklerine (codelab'ler, videolar, kaynak kodu [varsa]) açık kaynaklı depodan erişebilirsiniz. Depodaki README, hangi taşımaların dikkate alınması gerektiği ve ilgili "sıra" hakkında da rehberlik sağlar.
7. Ek kaynaklar
Bu veya ilgili geçiş modülünü ve ilgili ürünleri daha ayrıntılı incelemek isteyen geliştiriciler için ek kaynaklar aşağıda listelenmiştir. Bu sayfada, içerikle ilgili geri bildirimde bulunabileceğiniz yerler, kod bağlantıları ve faydalı bulabileceğiniz çeşitli belgeler yer alır.
Codelab ile ilgili sorunlar/geri bildirimler
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ı
1. Modül (BAŞLANGIÇ) ve 1b Modülü (BİTİŞ) için depo klasörlerinin bağlantılarını aşağıdaki tabloda bulabilirsiniz. Ayrıca, tüm App Engine Codelab'leri için geçiş deposundan da erişilebilirler.
Codelab | Python 2 | Python 3 |
Yok | ||
Modül 17 (bu codelab) | Yok | code (mod1b-flask) |
Online kaynaklar
Bu eğitimle ilgili olabilecek online kaynakları aşağıda bulabilirsiniz:
App Engine paketlenmiş hizmetleri
- Python 3 yeni nesil çalışma zamanında paketlenmiş hizmetlere erişme
- Modül 0 uygulaması (Python 2) ile Modül 1b uygulaması (Python 3) yan yana karşılaştırması
- App Engine SDK web çerçevesi WSGI nesne sarmalayıcı örnekleri
- Yeni nesil çalışma zamanlarının kullanıma sunulmasıyla birlikte App Engine paketlenmiş hizmetleri için destek (2021)
App Engine ile ilgili genel belgeler
- App Engine belgeleri
- Python 2 App Engine (standart ortam) çalışma zamanı
- Python 2 App Engine'de App Engine'in yerleşik kitaplıklarını kullanma
- Python 3 App Engine (standart ortam) çalışma zamanı
- Python 2 ve 3 App Engine (standart ortam) çalışma zamanları arasındaki farklar
- Python 2'den 3'e App Engine (standart ortam) taşıma kılavuzu
- App Engine fiyatlandırma ve kota bilgileri
- İkinci nesil App Engine platformunun kullanıma sunulması (2018)
- Eski çalışma zamanları için uzun süreli destek
- Belge taşıma örnekleri deposu
- Topluluk tarafından gönderilen taşıma örnekleri deposu
Diğer Cloud bilgileri
- Google Cloud Platform'da Python
- Google Cloud Python istemci kitaplıkları
- Google Cloud "Her Zaman Ücretsiz" katmanı
- Google Cloud SDK (
gcloudkomut satırı aracı) - Tüm Google Cloud belgeleri
Videolar
- Sunucusuz Taşıma İstasyonu
- Sunucusuz Expeditions
- Google Cloud Tech kanalına abone olun.
- Google Developers'a abone olun.
Lisans
Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.