1. Genel Bakış
Sunucusuz Taşıma İstasyonu codelab'leri serisi (kendi kendine ilerleyen, uygulamalı eğiticiler) ve ilgili videolar, Google Cloud sunucusuz geliştiricilerinin uygulamalarını bir veya daha fazla taşıma işleminde yönlendirerek uygulamalarını modernleştirmelerine yardımcı olmayı amaçlar. Bu videolar genellikle eski hizmetlerden uzaklaştırılır. Bu sayede uygulamalarınızı daha taşınabilir hale getirir, daha fazla seçenek ve esneklik elde edebilir, daha geniş bir Cloud ürünü yelpazesiyle entegrasyon ve erişim elde edebilir, ayrıca yeni dil sürümlerine kolayca geçiş yapabilirsiniz. Başlangıçta özellikle App Engine (standart ortam) geliştiricileri olmak üzere ilk Cloud kullanıcılarına odaklanan bu seri, Cloud Functions ve Cloud Run gibi diğer sunucusuz platformları veya uygun olduğu durumlarda diğer sunucusuz platformları ya da diğer platformları kapsayacak kadar geniş kapsamlıdır.
Önceden, geliştiricilerin App Engine'in eski "gruplandırılmış hizmetlerinden" geçmesi gerekiyordu . Geliştiriciler, paket halinde sunulan temel hizmetlerin birçoğunu 2. nesil App Engine hizmetinde kullanıma sunarak artık uygulamalarını en yeni çalışma zamanlarına taşıyabilir ve aynı zamanda paket halinde sunulan hizmetlerin (çoğunu) kullanmaya devam edebilir. Bu codelab'de, Datastore paket hizmetini kullanmaya devam ederken örnek bir uygulamayı Python 2'den 3'e yükseltme (App Engine NDB kitaplığı aracılığıyla) konusunda size yol göstereceğiz. Paket halinde sunulan çoğu hizmetin kullanımı, bu eğiticide açıklandığı gibi yalnızca kodda küçük bir güncelleme yapılmasını gerektirir. Ancak daha kapsamlı değişiklikler gerektiren başka hizmetler de vardır. bunlar "Bölüm 2," ve codelab'den yararlanabilirsiniz.
Demoda aşağıdaki işlemleri yapmayı öğreneceksiniz:
- Örnek App Engine uygulamasını Python 2'den 3'e bağlama
- Uygulama yapılandırmasını App Engine SDK'sını içerecek şekilde güncelleme
- Python 3 gibi 2. nesil çalışma zamanlarında paketlenmiş hizmetleri destekleyen uygulamaya SDK kodu ekleyin
Gerekenler
- Etkin bir GCP faturalandırma hesabına sahip bir Google Cloud projesi
- Temel Python becerileri
- Yaygın Linux komutlarıyla ilgili bilgi
- App Engine uygulamalarını geliştirme ve dağıtma ile ilgili temel bilgiler
- Çalışan bir Modül 1 App Engine uygulaması (kod laboratuvarını tamamlayın [önerilir] veya depodan uygulamayı kopyalayın)
Anket
Bu eğiticiden nasıl yararlanacaksınız?
Python 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ı dünya genelinde oluşturup dağıtmasını kolaylaştırmak için bir dizi eski API'yi (artık paketlenmiş hizmetler olarak biliniyor) içeriyordu. Bu hizmetler arasında Datastore, Memcache ve Görev Sırası bulunur. Kullanıcılar her ne kadar kolaylık sağlasa da, özel API'leri kullanırken uygulamalarının taşınabilirliği konusunda endişe duymaya başladı ve onları App Engine'e bağlayarak uygulamalarının daha taşınabilir olmasını istedi. Paket halinde sunulan bu hizmetlerden birçoğunun kendi bağımsız Cloud ürünleri olması için olgunlaşması da bu yaklaşımla birlikte, App Engine ekibini 2018'de onlar olmadan yeni nesil platformu kullanıma sunmaya yöneltti.
Python 3'e geçmek isteyen Python 2 geliştiricileriyle bugünlere yolculuğa çıkın. Paket halinde sunulan hizmetleri kullanan 2.x uygulamalarının, uygulamaları 3.x'e taşınmadan önce bu hizmetlerden taşınması gerekiyor. Bu da arka arkaya iki zorunlu taşıma işlemini temsil ediyordu. Bu da zorlayıcı olabiliyor. Bu geçişe yardımcı olmak için App Engine ekibi, 2021 Sonbaharı'nda bir "solucan deliği"ni kullanıma sundu. ile yeni nesil çalışma zamanlarında çalışan uygulamaların bu paket servis edilen hizmetlerin çoğuna erişmesine olanak tanıyor. Bu sürüm, orijinal çalışma zamanlarında bulunan tüm hizmetleri içermese de Datastore, Görev Sırası ve Memcache gibi ana oynatıcılar kullanılabilir.
Bu codelab'de, paketlenmiş hizmetlerin kullanımını korurken uygulamanızı Python 3'e yükseltmeniz için gereken değişiklikler gösterilmiştir. Buradaki amaç, uygulamalarınızı en yeni çalışma zamanlarında çalıştırmaktır. Böylece, 3.x yükseltmesini engellemek yerine, paketlenmiş hizmetlerden Cloud bağımsız eşdeğerlerine veya üçüncü taraf alternatiflerine kendi zaman çizelgelerinize göre geçiş yapabilirsiniz. Paketlenmiş hizmetlerden geçiş yapmak artık gerekmiyor. Ancak bu sayede, uygulamalarınızın barındırılabileceği yerler konusunda daha fazla taşınabilirlik ve esneklik elde edebilirsiniz. Örneğin, iş yükleriniz için daha iyi hizmet verebilecek platformlara geçiş yapabilir veya biraz önce açıklandığı gibi daha modern bir dil sürümüne geçerken App Engine'i kullanmaya devam edebilirsiniz.
Modül 1 Python 2 örnek uygulaması, App Engine NDB üzerinden Datastore paketlenmiş hizmetini kullanır. Uygulama daha önce webapp2'den Flask'a taşıdı. Modül 1 codelab'de tamamlandı. Ancak Datastore kullanımı değişmedi.
Bu eğitim aşağıdaki adımları içerir:
- Kurulum/Ön Çalışma
- Yapılandırmayı güncelleyin
- Uygulama kodunu değiştir
3. Kurulum/Ön Çalışma
Bu bölümde aşağıdakilerin nasıl yapılacağı açıklanmaktadır:
- Cloud projenizi oluşturun
- Temel örnek uygulamayı al
- Temel uygulamayı (yeniden) dağıtma ve doğrulama
Bu adımlar, çalışan bir kodla başlamanızı sağlar.
1. Proje oluşturun
Modül 1 codelab'ini tamamladıysanız aynı projeyi (ve kodu) yeniden kullanmanızı öneririz. Alternatif olarak, yeni bir Cloud projesi oluşturabilir veya mevcut başka bir projeyi yeniden kullanabilirsiniz. Projede, App Engine hizmetinin etkinleştirildiği etkin bir faturalandırma hesabı bulunduğundan emin olun.
2. Temel örnek uygulamayı al
Bu codelab'in ön koşullarından biri, çalışan bir Modül 1 App Engine uygulamasına sahip olmaktır: Modül 1 codelab'ini tamamlayın (önerilen) veya depodan Modül 1 uygulamasını kopyalayın. İster sizinkini ister bizimkiyi kullanın, Modül 1 kodunu "BAŞLAT" olalım. Bu codelab'de her adımda size yol gösterilir ve Modül 7 depo klasöründeki "FINISH" kod deposuna benzeyen bir kod gösterilir.
- BAŞLAT: Modül 1 klasörü (Python 2)
- SON: Modül 1b klasörü (Python 3)
- Deponun tamamı (ZIP dosyasını klonlamak veya indirmek için)
Kullandığınız Modül 1 uygulamasından bağımsız olarak, klasör aşağıdaki gibi görünmelidir. Büyük olasılıkla bir lib
klasörü de vardır:
$ ls README.md appengine_config.py requirements.txt app.yaml main.py templates
3. Temel uygulamayı (yeniden) dağıtma
Modül 1 uygulamasını (yeniden) dağıtmak için aşağıdaki adımları uygulayın:
- Varsa
lib
klasörünü silin velib
öğesini yeniden doldurmak içinpip install -t lib -r requirements.txt
komutunu çalıştırın. Cihazınızda Python 2 ve 3 yüklüyse bunun yerinepip2
komutunu kullanmanız gerekebilir. gcloud
komut satırı aracını yüklediğinizden, başlattığınızdan ve kullanımını incelediğinizden emin olun.- Verilen her
gcloud
komutundaPROJECT_ID
girmek istemiyorsanız Cloud projenizigcloud config set project
PROJECT_ID
olarak ayarlayın. - Örnek uygulamayı
gcloud app deploy
ile dağıtın - Modül 1 uygulamasının en son ziyaretleri göstererek sorunsuz bir şekilde ç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ükten sonra, yapılandırma ile başlayarak bu uygulamayı Python 3'e taşımaya hazır olursunuz.
Gereklilikler.txt dosyasına SDK ekleyin
App Engine Python 3 çalışma zamanı, üçüncü taraf kitaplıklar için ek yükü önemli ölçüde azaltır. Tek yapmanız gereken, bu öğeleri requirements.txt
sayfasında listelemektir. Paketlenmiş hizmetleri Python 3'te kullanmak için App Engine SDK paketini (appengine-python-standard
) ekleyin. SDK paketi, Modül 1'deki Flask'a katılıyor:
flask
appengine-python-standard
app.yaml'yi güncelle
Yapılandırma değişikliklerini app.yaml
dosyanıza uygulamak için aşağıdaki adımları uygulayın:
runtime
yönergesini, desteklenen Python 3 sürümüyle değiştirin; Örneğin, Python 3.10 içinpython310
değerini belirtin.- Python 3'te kullanılmadığından hem
threadsafe
hem deapi_version
yönergelerini silin. - Bu uygulamada yalnızca komut dosyası işleyiciler bulunduğu için
handlers
bölümünü tamamen silin. Uygulamanızda statik dosya işleyiciler varsa bunlarıhandlers
içinde olduğu gibi bırakın. - Python 3 çalışma zamanı, Python 2 çalışma zamanı gibi yerleşik üçüncü taraf kitaplıkları desteklemez. Uygulamanızın
app.yaml
içindelibraries
bölümü varsa, bu bölümün tamamını silin. (Gerekli paketlerin, yerleşik olmayan kitaplıklar gibi yalnızcarequirements.txt
içinde listelenmesi gerekir.) Örnek uygulamamızınlibraries
bölümü olmadığından sonraki adıma geçin. - Kullanılması için
true
değerine ayarlanmış birapp_engine_apis
yönergesi oluşturun. Bu, App Engine SDK paketinin yukarıdakirequirements.txt
öğesine eklenmesine karşılık gelir.
app.yaml
üzerinde yapılması gereken değişikliklerin özeti:
ÖNCE:
runtime: python27
threadsafe: yes
api_version: 1
handlers:
- url: /.*
script: main.app
SONRA:
runtime: python310
app_engine_apis: true
Diğer yapılandırma dosyaları
appengine_config.py
içinde özel bir öğeniz olmadığı sürece tüm üçüncü taraf paketlerin yalnızca requirements.txt
içinde listelenmesi gerektiğinden buna gerek yoktur, bu nedenle silin. Benzer şekilde, tüm 3. taraf kitaplıklar derleme işlemi sırasında otomatik olarak yüklendiğinden bunları kopyalamanıza veya tedarik etmenize gerek yoktur. Yani pip install
komutu veya lib
klasörü gerekmez. Dolayısıyla bunları silin. Özetleniyor:
appengine_config.py
dosyayı sillib
klasörü sil
Böylece, gerekli tüm yapılandırma değişiklikleri tamamlanmış olur.
5. Uygulama kodunu değiştir
Python 3 çalışma zamanı ortamında sunulan paketli hizmetlerin çoğuna erişmek için main.py
içindeki Web Server Gateway Interface (WSGI) uygulama nesnesini sarmalayan kısa bir kod parçası gerekir. Sarmalayıcı işlevi google.appengine.api.wrap_wsgi_app()
şeklindedir. Bu işlevi içe aktarıp WSGI nesnenizi bununla sarmalayarak kullanırsınız. main.py
ürününde Flask için gerekli güncellemeyi yansıtmak üzere aşağıdaki değişiklikleri yapın:
ÖNCE:
from flask import Flask, render_template, request
from google.appengine.ext import ndb
app = Flask(__name__)
SONRA:
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çeveleriyle ilgili WSGI sarmalama örnekleri için belgelere bakın.
Bu örnek, uygulamanızın Python 3'te paketlenmiş hizmetlerin çoğuna erişmesini sağlamak için kullanılabilir ancak 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.
Bu işlemle, App Engine paketlenmiş hizmetlerinin kullanımını Modül 1 örnek uygulamasına eklemek için gereken tüm değişiklikler tamamlanmıştır. Uygulama zaten Python 2 ve 3 ile uyumludur. Bu nedenle, uygulamanın Python 3'e taşınması için yapılandırmada yaptıklarınız dışında başka bir değişiklik yoktur. Son adım: Değiştirilen bu 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/Temizlik
Bu bölümde, uygulamayı dağıtıp amaçlandığı şekilde ve yansıtılan herhangi bir çıkışta çalıştığını doğrulayarak bu codelab'i özetledik. Uygulama doğrulamasından sonra tüm temizlik işlemlerini yapın ve sonraki adımları değerlendirin.
Uygulamayı dağıtma ve doğrulama
Python 3 uygulamasını gcloud app deploy
ile dağıtın ve uygulamanın Python 2'de olduğu gibi çalıştığından emin olun. İşlevlerde hiçbir değişiklik olmayacağından çıkış, 1. Modül uygulamasıyla aynı olmalıdır:
Son notlar
- İçeriklerinizi Modül 1b klasöründe (FINISH) bulunanlarla karşılaştırın ve gerekirse yanlış bir adım attıysanız gerekli değişiklikleri yapın.
- Uygulamanız hâlâ
webapp2
kullanıyorsa Modül 0main.py
ile bu sayfadaki Modül 1bmain.py
ile yan yana karşılaştırın. Ardından,webapp2
ürününden Flask'a nasıl geçiş yapacağınızı öğrenmek için Modül 1 codelab'ini tamamlayın.
Tebrikler, Python 2 App Engine uygulamalarınızı Python 3'e taşıyarak paket haline getirilmiş hizmetleri kullanmaya devam edebilirsiniz.
Temizleme
Genel
Şimdilik işiniz bittiyse faturalandırılma olmaması için App Engine uygulamanızı devre dışı bırakmanızı öneririz. Bununla birlikte, daha fazla test veya deneme yapmak isterseniz App Engine platformunun ücretsiz bir kotası vardır ve bu kullanım katmanını aşmadığınız sürece sizden ücret alınmaz. Burası işlem içindir, ancak ilgili App Engine hizmetleri için de ücret alınabilir. Daha fazla bilgi için fiyatlandırma sayfasına göz atın. Bu taşıma işlemi başka Cloud hizmetlerini içeriyorsa bunlar ayrı olarak faturalandırılır. Her iki durumda da (geçerliyse) "Bu codelab'e özel" bölümünü inceleyin bölümüne bakın.
Ayrıntılı açıklama için, App Engine gibi Google Cloud sunucusuz bilgi işlem platformuna dağıtım yapmak küçük derleme ve depolama maliyetleri gerektirir. Cloud Build'in ve Cloud Storage'ın kendi ücretsiz kotası vardır. Söz konusu resmin depolanması bu kotanın bir kısmını kullanır. Ancak, bu kadar ücretsiz katmanın olmadığı bir bölgede yaşıyor olabilirsiniz. Bu nedenle, olası maliyetleri en aza indirmek için depolama alanı kullanımınız konusunda dikkatli olun. Belirli Cloud Storage "klasörleri" şunları incelemeniz gerekir:
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
- Yukarıdaki depolama alanı bağlantıları
PROJECT_ID
ve *LOC
*ifadenize bağlıdır (örneğin, "us
") Uygulamanız ABD'de barındırılıyorsa.
Öte yandan, bu uygulamayı veya diğer ilgili taşıma codelab'lerini kullanmayacak 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, aynı zamanda ücretsiz bir katmana sahip olan Cloud Datastore (Data Store modunda Cloud Firestore) tarafından sağlanır; Daha fazla bilgi için fiyatlandırma sayfasını inceleyin.
Sonraki adımlar
Buradan birkaç yol tarifi alabilirsiniz:
- Daha fazla kod değişikliği gerektiren paketlenmiş hizmetleri kullanarak kodu güncelleme
- Paketlenmiş hizmetlerden Cloud bağımsız ürünlerine geçiş
- App Engine'den başka bir Cloud sunucusuz platformuna geçiş yapın
Blobstore, Mail ve Ertelenen gibi paket halinde sunulan diğer hizmetlere erişmek için daha fazla kod değişikliği gerekir. Aşağıdakiler, App Engine'in eski paket halinde sunulan hizmetlerinden uzaklaşmaya odaklanan taşıma modülleridir:
- Modül 2: App Engine NDB'den Cloud NDB'ye
- Modüller 7-9: App Engine TaskQueue (görevler) Cloud Tasks'a aktarılır
- Modül 12-13: App Engine Memcache'den Cloud Memorystore'a
- Modüller 15-16: App Engine Blobstore'dan Cloud Storage'a
- Modül 18-19: Cloud Pub/Sub'a App Engine TaskQueue (görevleri çekme)
App Engine artık Google Cloud'daki tek sunucusuz platform değil. Küçük bir App Engine uygulamanız varsa veya sınırlı işlevselliğe sahip bir uygulamanız varsa ve bunu bağımsız bir mikro hizmete dönüştürmek ya da monolitik bir uygulamayı yeniden kullanılabilir birden fazla bileşene ayırmak istiyorsanız Cloud Functions'a geçmek için iyi nedenler olabilir. Container mimarisine alma işlemi, uygulama geliştirme iş akışınızın bir parçası haline geldiyse, özellikle de bir CI/CD (sürekli entegrasyon/sürekli teslim veya dağıtım) ardışık düzeninden oluşuyorsa Cloud Run'a geçiş yapmayı düşünün. Bu senaryolar aşağıdaki modüllerde ele alınmıştır:
- App Engine'den Cloud Functions'a geçiş: Modül 11'e bakın
- App Engine'den Cloud Run'a taşıma: Uygulamanızı Docker ile container mimarisine almak için Modül 4'e, bu işlemi container'lar, Docker bilgileri ya da
Dockerfile
olmadan yapmak için Modül 5'e bakın.
Başka bir sunucusuz platforma geçmek isteğe bağlıdır. Bu nedenle, herhangi bir değişiklik yapmadan önce uygulamalarınız ve kullanım alanlarınız için en iyi seçenekleri değerlendirmenizi öneririz.
Bir sonraki taşıma modülünden bağımsız olarak tüm Sunucusuz Taşıma İstasyonu içeriklerine (codelab'ler, videolar, kaynak kodu [kullanılabilir olduğunda]) açık kaynak deposundan erişebilirsiniz. Deponun README
özelliği, hangi taşıma işlemlerinin göz önünde bulundurulacağı ve ilgili "siparişler" hakkında da bilgi sağlar. göz atmanızı öneririm.
7. Ek kaynaklar
Aşağıda, geliştiricilerin bu veya ilgili Taşıma Modülü'nü ve ilgili ürünleri daha ayrıntılı bir şekilde inceleyen ek kaynaklar verilmiştir. Bu bölümde, söz konusu içerikle ilgili geri bildirimde bulunabileceğiniz yerler, kod bağlantıları ve yararlı bulabileceğiniz çeşitli belgeler yer alır.
Codelab sorunları/geri bildirimi
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 1 (START) ve Modül 1b (FINISH) için depo klasörlerinin bağlantılarını aşağıdaki tabloda bulabilirsiniz. Bu dosyalara tüm App Engine codelab taşıma işlemleri için depodan da erişilebilir.
Codelab | Python 2 | Python 3 |
Yok | ||
17. Modül (bu codelab) | Yok | kod (mod1b-flask) |
Çevrimiçi kaynaklar
Aşağıda, bu eğitim için alakalı olabilecek çevrimiçi kaynaklar verilmiştir:
App Engine paket 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) uygulamasının yan yana karşılaştırması
- App Engine SDK'sı web çerçevesi WSGI nesne sarmalayıcı örnekleri
- Yeni nesil çalışma zamanlarında App Engine paket hizmetleri desteği (2021)
App Engine genel belgeleri
- App Engine belgeleri
- Python 2 App Engine (standart ortam) çalışma zamanı
- Python 2 App Engine'de App Engine yerleşik kitaplıklarını kullanma
- Python 3 App Engine (standart ortam) çalışma zamanı
- Python 2 ile Python 2 arasındaki farklar 3 App Engine (standart ortam) çalışma zamanı
- Python 2'den 3'e App Engine (standart ortam) taşıma kılavuzu
- App Engine fiyatlandırması 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
- Topluluğun katkıda bulunduğu taşıma örnekleri deposu
Diğer Cloud bilgileri
- Google Cloud Platform'da Python
- Google Cloud Python istemci kitaplıkları
- Google Cloud "Daima Ücretsiz" katman
- Google Cloud SDK'sı (
gcloud
komut satırı aracı) - Tüm Google Cloud belgeleri
Videolar
- Sunucusuz Taşıma İstasyonu
- Sunucusuz Keşif Seferleri
- Google Cloud Teknolojisi'ne 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.