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.
"Uygulamanızın tamamı"na sahip olmadığınız durumlar söz konusu olabilir App Engine veya Cloud Run kaynaklarını gerektirmelidir. Kodunuz yalnızca bir mikro hizmet veya basit bir işlevden oluşuyorsa Cloud Functions muhtemelen sizin için daha uygun olacaktır. Bu codelab'de, basit App Engine uygulamalarını taşımayı (veya büyük uygulamaları birden fazla mikro hizmete ayırmanızı) ve bu uygulamaları bunun gibi kullanım alanları için özel olarak oluşturulmuş bir sunucusuz platform olan Cloud Functions'a dağıtmayı öğretebilirsiniz.
Demoda aşağıdaki işlemleri yapmayı öğreneceksiniz:
- Cloud Shell'i kullanma
- Google Cloud Translation API'yi etkinleştirme
- API isteklerinin kimliğini doğrulama
- Küçük bir App Engine uygulamasını Cloud Functions üzerinde çalışacak şekilde dönüştürme
- Kodunuzu Cloud Functions'a dağıtma
Gerekenler
- Etkin bir GCP faturalandırma hesabına sahip bir Google Cloud Platform 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 2 Cloud NDB Python 3 App Engine uygulaması
- Önerilen: Modül 2 codelab'in yanı sıra uygulamayı Python 2'den 3'e taşımayla ilgili bonus adımı tamamlayı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
Google App Engine ve Cloud Functions gibi PaaS sistemleri kullanıcılara birçok kolaylık sağlar. Bu sunucusuz platformlar, teknik ekibinizin ihtiyaç duyulan donanım miktarını belirlemek ve kullanmak için platformları araştırmakla zaman kaybetmek yerine iş çözümleri oluşturmaya odaklanmasını sağlar. Uygulamalar gerektiğinde otomatik olarak ölçeklendirilebilir, maliyetleri kontrol etmek için kullan başına ödeme faturalandırmasıyla sıfıra kadar ölçeklendirme yapabilir ve günümüzün yaygın geliştirme dillerine olanak tanır.
Bununla birlikte, full-stack web uygulaması geliştirme veya mobil uygulamalar için karmaşık arka uçlar, App Engine'e uygun olsa da genellikle geliştiriciler haber feed'ini güncelleme veya ev sahibi takımın play-off maçının son skorunu alma gibi bazı işlevleri internet ortamına taşımaya çalışırlar. Her iki senaryo için de kodlama mantığı mevcut olsa da, ikisi de tam donanımlı "uygulamalar" değildir. App Engine'in gücünü gerektirir. Cloud Functions burada devreye girer.
Cloud Functions, kodun aşağıdaki küçük kısmını dağıtmak için kullanılır:
- Bir uygulamanın tamamının parçası değil
- Geliştirme yığınının tamamında gerekli değildir
- Tek bir şeye odaklanan bir uygulamada veya tek bir mobil uygulama arka ucundadır
Ayrıca Cloud Functions'ı kullanarak büyük bir monolitik uygulamayı birden fazla mikro hizmete bölebilirsiniz. Her bir mikro hizmette, her biri Cloud Firestore veya Cloud SQL gibi ortak kullanılan bir veritabanı kullanılır. İşlevinizin veya mikro hizmetinizin container mimarisine alınıp Cloud Run'da sunucusuz olarak yürütülmesini istiyorsanız bunu da yapabilirsiniz.
Taşıma eğiticilerinin neredeyse tamamında yer alan örnek App Engine uygulamamız, temel işlevleri Cloud Functions'da da çalışan kısa bir uygulamadır. Bu eğiticide, uygulamayı Cloud Functions üzerinde çalışacak şekilde nasıl değiştireceğinizi öğreneceksiniz. App Engine açısından bakıldığında, işlevler uygulamanın tamamından daha basit olduğundan, başlangıç deneyiminiz daha kolay (ve daha hızlı) olmalı ve daha az "ek yük" gerektirmelidir emin olabilirsiniz. Bu taşıma işleminde aşağıdaki adımlar yer alır:
- Kurulum/Ön Çalışma
- Yapılandırma dosyalarını kaldırma
- Uygulama dosyalarını değiştirme
3. Kurulum/Ön Çalışma
Cloud Functions, Python 2'yi desteklemediğinden bu codelab, Modül 2 Cloud NDB App Engine örnek uygulamasının Python 3 sürümüyle başlar. İlk olarak projemizi oluşturup kodu alalım. Sonra, çalışan kodla başladığımızı onaylamak için temel uygulamayı dağıtalım.
1. Proje oluşturun
Modül 2 codelab'ini tamamladıysanız (ve Python 3'e taşıdıysanız) aynı projeyi (ve kodu) yeniden kullanmanızı öneririz. Alternatif olarak, yeni bir proje 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 2 örnek uygulamasına sahip olmaktır. Henüz yoksa buraya geçmeden önce yukarıda bağlantısı verilen eğitimlerden birini tamamlayın. Aksi takdirde, modülün içeriğine aşinaysanız aşağıdaki Modül 2 kodunu alarak başlayabilirsiniz.
İster sizin ister bizimkininkini kullanın, Modül 2 Python 3 kodunu kullanmaya başlayın. Bu Modül 11 codelab'inde, her adımda size yol gösterilir ve Modül 11 depo klasöründeki (FINISH) koda benzeyen bir kod gösterilir.
- BAŞLANGIÇ: Modül 2 kodu (3.x [Modül 2b depo klasörü])
- SON: Modül 11 kodu (3.x)
- Deponun tamamı (ZIP dosyasını klonlamak veya indirmek için)
Python 3 Modül 2 BAŞLANGIÇ dosyalarının dizini (sizin ya da bizimki) şöyle görünmelidir:
$ ls README.md main.py templates app.yaml requirements.txt
3. Temel uygulamayı (yeniden) dağıtma
Hemen yürütmek için kalan ön çalışma adımlarınız:
gcloud
komut satırı aracını yeniden tanıma- Örnek uygulamayı
gcloud app deploy
ile yeniden dağıtın - Uygulamanın App Engine'de sorunsuz çalıştığını onaylayın
Bu adımları başarıyla gerçekleştirdikten sonra, bunları bir Cloud Functions işlevine dönüştürmeye hazır olursunuz.
4. Yapılandırma dosyalarını kaldırma
app.yaml
dosyası, Cloud Functions ile kullanılmayan bir App Engine yapısı olduğundan dosyayı hemen silin. Bunu yapmayı unutursanız veya unutursanız Cloud Functions tarafından kullanılmaz. requirements.txt
, Modül 2'dekiyle aynı kaldığı için yapılan tek yapılandırma değişikliği budur.
Bir Python 2 App Engine uygulamasını Python 3'e de taşıyorsanız appengine_config.py
ve varsa lib
klasörünü silin. Bunlar, Python 3 çalışma zamanında kullanılmayan App Engine yapılarıdır.
5. Uygulama dosyalarını değiştirme
main.py
adlı tek bir uygulama dosyası olduğu için Cloud Functions'a geçiş için gerekli tüm değişiklikler bu dosyada yapılır.
İçe aktarılanlar
Yalnızca işlevlerle çalıştığımız için web uygulaması çerçevesine gerek yok. Bununla birlikte, kolaylık sağlamak amacıyla Python tabanlı Cloud Functions çağrıldığında, kodunuzun gerektiğinde kullanması için bunlara otomatik olarak bir istek nesnesi iletilir. (Cloud Functions ekibi, bu nesneyi işlevinize iletilen bir Flask İsteği nesnesi olarak seçti.)
Web çerçeveleri Cloud Functions ortamının bir parçası olmadığı için, uygulamanızda diğer Flask özellikleri kullanılmadığı sürece Flask'tan içe aktarma yapılmaz. Bizim örneğimiz, bir işleve dönüştürme sonrasında şablon oluşturma işlemi devam ettiğinden, flask.render_template()
çağrısının yapılması hâlâ gereklidir, dolayısıyla öğesi de Flask'tan içe aktarılmaktadır. Web çerçevesi olmadığı için Flask uygulaması örneklendirmenize gerek yoktur. Bu nedenle app = Flask(__name__)
öğesini silin. Değişiklikler uygulanmadan önce ve uygulandıktan sonra kodunuz aşağıdaki gibi görünür:
ÖNCE:
from flask import Flask, render_template, request
from google.cloud import ndb
app = Flask(__name__)
ds_client = ndb.Client()
SONRA:
from flask import render_template
from google.cloud import ndb
ds_client = ndb.Client()
Uygulama nesnesine (app
) veya başka bir web çerçevesi altyapısına bağımlıysanız tüm bu bağımlılıkları çözmeniz, uygun çözümler bulmanız, bunların kullanımını tamamen kaldırmanız ya da proxy bulmanız gerekir. Kodunuzu ancak bu şekilde bir Cloud Functions işlevine dönüştürebilirsiniz. Aksi takdirde App Engine'de kalmanız veya uygulamanızı Cloud Run için container mimarisine almanız daha iyi olur
Ana işleyici işlevi imzasını güncelle
İşlev imzasında yapılması gereken değişiklikler şunlardır:
- Flask, uygulama Cloud Functions işlevine dönüştürüldükten sonra artık kullanılmamaktadır. Bu nedenle rota tasarımcılarını kaldırın.
- Cloud Functions, Flask
Request
nesnesini otomatik olarak parametre olarak aktarır. Bu nedenle, bu nesne için bir değişken oluşturun. Örnek uygulamamızda bunurequest
olarak adlandıracağız. - Dağıtılan Cloud Functions işlevleri adlandırılmalıdır. Ana işleyicimiz, ne olduğunu (kök uygulama işleyici) açıklamak için App Engine'de uygun şekilde
root()
olarak adlandırıldı. Bir Cloud Functions işlevi olarak bu adı kullanmak pek mantıklı değildir. Bunun yerine, Cloud Functions işlevinivisitme
adıyla dağıtacağız. Bu nedenle, Python işlevinin adı olarak bu işlevi de kullanın. Benzer şekilde Modül 4 ve 5'te Cloud Run hizmetini devisitme
olarak adlandırdık.
Bu güncellemelerin öncesinde ve sonrasında yapılan değişiklikler şöyle:
ÖNCE:
@app.route('/')
def root():
'main application (GET) handler'
store_visit(request.remote_addr, request.user_agent)
visits = fetch_visits(10)
return render_template('index.html', visits=visits)
SONRA:
def visitme(request):
'main application (GET) handler'
store_visit(request.remote_addr, request.user_agent)
visits = fetch_visits(10)
return render_template('index.html', visits=visits)
Böylece gerekli güncellemelerin hepsi tamamlanmış oldu. Yapılan değişikliklerin yalnızca uygulamanın "altyapısını" etkilediğini unutmayın girin. Temel uygulama kodunda herhangi bir değişiklik yapılmasına gerek yoktur ve uygulamanın işlevlerinde değişiklik yapılmamıştır. Bu noktayı göstermek için yapılan değişikliklerin resimli gösterimi şunlardır:
Yerel geliştirme ve test
App Engine'de dev_appserver.py
yerel geliştirme sunucusu bulunurken Cloud Functions'da kendi İşlevler Çerçevesi bulunur. Bu çerçeveyle yerel olarak uygulama geliştirip test edebilirsiniz. Kodunuz Cloud Functions'a dağıtılabilir ancak Compute Engine ve Cloud Run gibi diğer bilgi işlem platformlarına, hatta Knative'i destekleyen şirket içi ya da karma bulut sistemlerine de dağıtılabilir. Functions Çerçevesi'nin ek bağlantıları için aşağıya bakın.
6. Derleme ve dağıtma
Cloud Functions'a dağıtım, App Engine'den biraz farklıdır. requirements.txt
dışında yapılandırma dosyası kullanılmadığından, komut satırında kodla ilgili daha fazla bilgi belirtilmelidir. Python 3.10 altında çalışan, HTTP tetiklenmiş yeni Cloud Functions işlevinizi şu komutla dağıtın:
$ gcloud functions deploy visitme --runtime python310 --trigger-http --allow-unauthenticated
Aşağıdakine benzer bir çıkış alırsınız:
Deploying function (may take a while - up to 2 minutes)...⠛ For Cloud Build Logs, visit: https://console.cloud.google.com/cloud-build/builds;region=REGION/f5f6fc81-1bb3-4cdb-8bfe?project=PROJECT_ID Deploying function (may take a while - up to 2 minutes)...done. availableMemoryMb: 256 buildId: f5f6fc81-1bb3-4cdb-8bfe buildName: projects/PROJECT_ID/locations/REGION/builds/f5f6fc81-1bb3-4cdb-8bfe dockerRegistry: CONTAINER_REGISTRY entryPoint: visitme httpsTrigger: securityLevel: SECURE_OPTIONAL url: https://REGION-PROJECT_ID.cloudfunctions.net/visitme ingressSettings: ALLOW_ALL labels: deployment-tool: cli-gcloud name: projects/PROJECT_ID/locations/REGION/functions/visitme runtime: python310 serviceAccountEmail: PROJECT_ID@appspot.gserviceaccount.com sourceUploadUrl: https://storage.googleapis.com/uploads-853031211983.REGION.cloudfunctions.appspot.com/8c923758-cee8-47ce-8e97-5720a5301c34.zip status: ACTIVE timeout: 60s updateTime: '2022-05-16T18:28:06.153Z' versionId: '8'
İşleviniz dağıtıldıktan sonra dağıtım çıkışındaki URL'yi kullanarak uygulamanızı ziyaret edin. URL şu biçimdedir: REGION-PROJECT_ID.cloudfunctions.net/visitme
. Çıkış, App Engine'e daha önce dağıttığınız zamankiyle aynı olmalıdır:
Serideki diğer birçok codelab'de ve videoda olduğu gibi temel uygulama işlevselliği de değişmemiştir. Amaç, bir modernizasyon tekniği uygulayarak uygulamanın aynı şekilde önceki gibi çalışmasını ve daha yeni bir altyapıyı desteklemesini sağlamaktır. Örneğin, eski bir App Engine hizmetinden eski bir App Engine hizmetinden yeni Cloud bağımsız ürününe geçiş yapabilir veya bu eğiticide olduğu gibi bir uygulamayı başka bir Google Cloud sunucusuz platformuna taşıyabilirsiniz.
7. Özet/Temizlik
Tebrikler, bu küçük App Engine uygulamasını bir Cloud Functions işlevine dönüştürdünüz. Bir diğer uygun kullanım alanı da büyük bir monolitik App Engine uygulamasını, her biri Cloud Functions işlevi olacak şekilde bir dizi mikro hizmete ayırmaktadır. Bu, daha fazla "tak-çalıştır" olanağı sağlayan daha modern bir geliştirme tekniğidir bileşen (a la " JAM yığını") stiline sahip olacaktır. Karıştırmaya ve eşleştirmeye ve kodların yeniden kullanılmasına olanak tanır. Bunlar iki hedeftir. Ancak bu mikro hizmetler zaman içinde hata ayıklamaya devam eder. Bu da tutarlı kodlar ve genel bakım maliyetlerini düşürür.
Temizleme
Bu codelab'i tamamladıktan sonra faturalandırmanın tekrarlanmasını önlemek için Modül 2 App Engine uygulamasını geçici veya kalıcı olarak devre dışı bırakabilirsiniz. App Engine platformunun ücretsiz bir kotası vardır. Bu nedenle, kullanım katmanı içinde kaldığınız sürece faturalandırılmazsınız. Aynı durum Datastore için de geçerlidir; daha fazla ayrıntı için Cloud Datastore fiyatlandırma sayfasına bakın.
App Engine ve Cloud Functions gibi platformlara dağıtım yapmak için küçük derleme ve depolama maliyetleri uygulanır. Bazı bölgelerde Cloud Build ve Cloud Storage kendi ücretsiz kotasına sahiptir. Derlemeler bu kotanın bir kısmını kullanır. Özellikle bölgenizde böyle bir ücretsiz katman yoksa olası maliyetleri en aza indirmek için depolama alanı kullanımınızı göz önünde bulundurun.
Maalesef Cloud Functions'da "devre dışı bırak" seçeneği yoktur. özelliğini kullanabilirsiniz. Kodunuzu yedekleyin ve işlevi silin. Daha sonra istediğiniz zaman aynı adla yeniden dağıtabilirsiniz. Ancak başka bir taşıma codelab'ine geçmeyecekseniz ve her şeyi tamamen silmek istiyorsanız Cloud projelerinizi kapatın.
Sonraki adımlar
Bu eğiticinin yanı sıra, incelenecek diğer taşıma modülleri arasında App Engine uygulamanızı Cloud Run için container mimarisine alma yer alır. Modül 4 ve Modül 5 codelab'lerinin bağlantılarına göz atın:
- 4. Modül: Docker ile Cloud Run'a Geçiş
- Docker ile Cloud Run'da çalışması için uygulamanızı container mimarisine alın
- Bu taşıma işlemiyle Python 2'de kalabilirsiniz.
- Modül 5: Cloud Buildpacks ile Cloud Run'a taşıma
- Cloud Buildpacks ile uygulamanızı Cloud Run'da çalıştırmak için container mimarisine alın
- Docker, container'lar veya
Dockerfile
hakkında herhangi bir şey bilmeniz gerekmez. - Uygulamanızın Python 3'e zaten taşınmış olmasını gerektirir (Derleme paketleri, Python 2'yi desteklemez)
Diğer modüllerin çoğunda, geliştiricilere App Engine paket halinde sunulan hizmetlerden Cloud'un bağımsız yedeklerine nasıl geçiş yapılacağını göstermeye odaklanılmıştır:
- Modül 2: App Engine
ndb
'den Cloud NDB'ye geçiş - Modüller 7-9: App Engine Görev Sırası push görevlerini Cloud Tasks'a taşıma
- Modüller 12-13: App Engine Memcache'den Cloud Memorystore'a taşıma
- Modüller 15-16: App Engine Blobstore'dan Cloud Storage'a taşıma
- Modül 18-19: App Engine Görev Sırası'ndan (görev alma) Cloud Pub/Sub'a geçiş
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 Functions yerine Cloud Run'a geçiş yapmayı düşünün. Uygulamanızı Docker ile container mimarisine almak için Modül 4'e; container'lar, Docker bilgileri ya da Dockerfile
olmadan bunu yapmak için Modül 5'e bakın. İster Cloud Functions ister Cloud Run'ı düşünü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 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.
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 8 (START) ve Modül 9 (FINISH) için depo klasörlerinin bağlantılarını aşağıdaki tabloda bulabilirsiniz. Bunlara tüm App Engine codelab taşıma işlemleri için depodan da erişilebilir. Bu depoyu klonlayabilir veya ZIP dosyası indirebilirsiniz.
Codelab | Python 3 |
Çevrimiçi kaynaklar
Aşağıda, bu eğitim için alakalı olabilecek çevrimiçi kaynaklar verilmiştir:
App Engine
- App Engine belgeleri
- Python 2 App Engine (standart ortam) çalışma zamanı
- 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)
- Birinci ve ikinci nesil platformlar
- 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
Cloud Functions
- gcloud Functions dağıtım komutu
- Fiyatlandırma bilgileri
- Cloud Functions yeni nesil duyurusu
- İlk ile arasındaki farklar ikinci nesil işlevler
- Functions Framework (yerel geliştirme) howto, kullanım belgeleri ve depo
- Ürün sayfaları
- Belgeler
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.