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.
App Engine veya Cloud Run kaynaklarını gerektirecek "tam bir uygulamanızın" olmadığı durumlar olabilir. Kodunuz yalnızca bir mikro hizmetten veya basit bir işlevden oluşuyorsa Cloud Functions sizin için daha uygun olabilir. Bu codelab'de, basit App Engine uygulamalarını nasıl taşıyacağınız (veya daha büyük uygulamaları birden fazla mikro hizmete nasıl ayıracağınız) ve bunları Cloud Functions'a (özellikle bu gibi kullanım alanları için oluşturulmuş başka bir sunucusuz platform) nasıl dağıtacağınız açıklanmaktadır.
Bu demoda aşağıdaki işlemleri yapmayı öğreneceksiniz:
- Cloud Shell'i kullanma
- Google Cloud Translation API'yi etkinleştirin
- API isteklerinin kimliğini doğrulama
- Küçük bir App Engine uygulamasını Cloud Functions'ta çalışacak şekilde dönüştürme
- Kodunuzu Cloud Functions'a dağıtma
İhtiyacınız olanlar
- Etkin bir GCP faturalandırma hesabına sahip bir Google Cloud Platform 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 Module 2 Cloud NDB Python 3 App Engine uygulaması
- Önerilen: 2. modül codelab'ini ve uygulamanın Python 2'den 3'e taşınmasıyla ilgili bonus adımı tamamlayı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
Google App Engine ve Cloud Functions gibi PaaS sistemleri, kullanıcılar için birçok kolaylık sağlar. Bu sunucusuz platformlar, teknik ekibinizin kullanılacak platformları araştırmak ve gereken donanım miktarını belirlemekle zaman harcamak yerine işletme çözümleri oluşturmaya odaklanmasını sağlar. Uygulamalar gerektiğinde otomatik olarak ölçeklenebilir, maliyetleri kontrol etmek için kullandıkça öde faturalandırmasıyla sıfıra kadar ölçeği azaltılabilir ve günümüzün yaygın geliştirme dillerinin çeşitliğini destekler.
Ancak App Engine, tam yığın web uygulaması geliştirme veya mobil uygulamalar için karmaşık arka uçlar konusunda çok uygun olsa da geliştiriciler genellikle bazı işlevleri internete taşımaya çalışır. Örneğin, haber feed'ini güncelleme veya ev sahibi takımın playoff maçındaki son skorunu getirme gibi. Her iki senaryo için de kodlama mantığı mevcut olsa da ikisi de App Engine'in gücünü gerektiren tam teşekküllü "uygulamalar" gibi görünmüyor. Bu noktada Cloud Functions devreye girer.
Cloud Functions, aşağıdaki işlemleri yapan küçük kod parçalarını dağıtmak için kullanılır:
- Tam bir uygulamanın parçası değildir.
- Geliştirme yığınının tamamında gerekli değildir.
- Tek bir şeye odaklanan bir uygulamada veya tek bir mobil uygulama arka ucunda olmalıdır.
Ayrıca, büyük ve tek bir uygulamayı, her biri Cloud Firestore veya Cloud SQL gibi ortak bir veritabanı kullanan birden fazla mikro hizmete ayırmak için Cloud Functions'ı da kullanabilirsiniz. Ayrıca, işlevinizin veya mikro hizmetinizin container mimarisine alınmasını ve Cloud Run'da sunucusuz olarak yürütülmesini istiyorsanız bunu da yapabilirsiniz.
Neredeyse tüm taşıma eğitimlerinde yer alan örnek App Engine uygulamamız, Cloud Functions'ta da aynı şekilde çalışan temel işlevlere sahip kısa bir uygulamadır. Bu eğitimde, söz konusu uygulamayı Cloud Functions'ta çalışacak şekilde nasıl değiştireceğinizi öğreneceksiniz. App Engine açısından, işlevler uygulamalardan daha basit olduğundan, başlangıç deneyiminiz daha kolay (ve daha hızlı) olmalı ve genel olarak daha az "ek yük" içermelidir. Bu taşıma işlemi aşağıdaki adımlardan oluşur:
- Kurulum/Ön Hazırlık
- Yapılandırma dosyalarını kaldırma
- Uygulama dosyalarını değiştirme
3. Kurulum/Ön Hazırlık
Cloud Functions, Python 2'yi desteklemediği için bu codelab, 2. Modül Cloud NDB App Engine örnek uygulamasının Python 3 sürümüyle başlar. Öncelikle projemizi oluşturalım, kodu alalım ve ardından temel uygulamayı dağıtarak çalışan bir kodla başladığımızı doğrulayalım.
1. Proje oluşturma
2. Modül adlı codelab'i tamamladıysanız (ve Python 3'e taşıdıysanız) aynı projeyi (ve kodu) yeniden kullanmanızı öneririz. Alternatif olarak, yepyeni bir proje oluşturabilir veya mevcut başka bir projeyi yeniden kullanabilirsiniz. Projenin, App Engine hizmetinin etkin olduğu 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 2. Modül örnek uygulamasına sahip olmaktır. Çalışan bir örnek uygulamanız yoksa yukarıda bağlantısı verilen eğitimlerden birini tamamlayıp bu codelab'e geçin. İçeriği biliyorsanız aşağıdaki 2. Modül kodunu alarak başlayabilirsiniz.
Sizin kodunuzu veya bizim kodumuzu kullanıyor olmanız fark etmez. 2. Modül Python 3 kodu, BAŞLAYACAĞIMIZ yerdir. Bu 11. Modül codelab'i, her adımda size yol gösterir ve 11. Modül depo klasöründeki (FINISH) koda benzer bir kodla sonuçlanır.
- BAŞLANGIÇ: Module 2 code (3.x [Module 2b repo folder])
- BİTİRME: Module 11 code (3.x)
- Deponun tamamı (klonlamak veya ZIP olarak indirmek için)
Python 3 Modülü 2 BAŞLANGIÇ dosyalarının (sizinki veya bizimkiler) dizini şu şekilde görünmelidir:
$ ls README.md main.py templates app.yaml requirements.txt
3. Temel uygulamayı (yeniden) dağıtma
Şimdi yapmanız gereken kalan ön hazırlık adımları:
gcloudkomut satırı aracı hakkında bilgi edinin- Örnek uygulamayı
gcloud app deployile yeniden dağıtın. - Uygulamanın App Engine'de sorunsuz çalıştığını onaylayın.
Bu adımları başarıyla uyguladıktan sonra, işlevi Cloud Function'a dönüştürmeye hazırsınız demektir.
4. Yapılandırma dosyalarını kaldırma
app.yaml dosyası, Cloud Functions ile kullanılmayan bir App Engine yapıtıdır. Bu nedenle hemen silin. Bunu yapmazsanız veya yapmayı unutursanız Cloud Functions bu özelliği kullanmadığı için herhangi bir sorun yaşamazsınız. requirements.txt, 2. modüldekiyle aynı kaldığı için yapılandırmada yapılan tek değişiklik budur.
Bir Python 2 App Engine uygulamasını Python 3'e 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
Yalnızca bir uygulama dosyası (main.py) vardır. Bu nedenle, 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 yoktur. Ancak kolaylık sağlamak için Python tabanlı Cloud Functions işlevleri çağrıldığında, kodunuzun gerektiğinde kullanması için otomatik olarak bir istek nesnesi iletilir. (Cloud Functions ekibi, işlevinize iletilecek Flask Request nesnesi olarak seçti.)
Web çerçeveleri Cloud Functions ortamının bir parçası olmadığından, uygulamanız diğer Flask özelliklerini kullanmıyorsa Flask'tan içe aktarma işlemi yapılmaz ancak uygulamanız diğer Flask özelliklerini kullanıyorsa içe aktarma işlemi yapılır. Bu, şablona dönüştürme işlemi işlevlere dönüştürüldükten sonra da devam ettiğinden flask.render_template() çağrısı yapılması gerektiği ve bu nedenle Flask'tan içe aktarılması gerektiği için bizim durumumuzda da geçerlidir. Web çerçevesi olmadığından Flask uygulamasını başlatmaya gerek yoktur. Bu nedenle app = Flask(__name__) öğesini silin. Kodunuz, değişiklikler uygulanmadan önce ve uygulandıktan sonra aşağıdaki gibi görünür:
ÖNCESİ:
from flask import Flask, render_template, request
from google.cloud import ndb
app = Flask(__name__)
ds_client = ndb.Client()
SONRASI:
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ğlıysanız uygun geçici çözümler bularak tüm bu bağımlılıkları çözmeniz, bunların kullanımını tamamen kaldırmanız ya da proxy'ler bulmanız gerekir. Kodunuzu ancak bu durumda Cloud Functions işlevine dönüştürebilirsiniz. Aksi takdirde, App Engine'de kalmanız veya uygulamanızı Cloud Run için kapsüllemeniz daha iyi olur.
Ana işleyici işlev imzasını güncelleme
İşlev imzasında yapılması gereken değişiklikler şunlardır:
- Uygulama Cloud Function'a dönüştürüldükten sonra Flask kullanılmaz. Bu nedenle, rota dekoratörlerini kaldırın.
- Cloud Functions, Flask
Requestnesnesini otomatik olarak parametre olarak iletir. Bu nedenle, nesne için bir değişken oluşturun. Örnek uygulamamızda bunarequestadını vereceğiz. - Dağıtılan Cloud Functions işlevleri adlandırılmalıdır. Ana işleyicimiz, ne olduğunu (kök uygulama işleyicisi) açıklamak için App Engine'de uygun şekilde
root()olarak adlandırıldı. Cloud Functions olarak bu adı kullanmak pek mantıklı değildir. Bunun yerine, Cloud Functions işlevinivisitmeadıyla dağıtacağız. Bu nedenle, Python işlevinin adı olarak da bu adı kullanın. Benzer şekilde, 4. ve 5. modüllerde Cloud Run hizmetine devisitmeadını verdik.
Bu güncellemelerden önce ve sonraki görünümü aşağıda bulabilirsiniz:
ÖNCESİ:
@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)
SONRASI:
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)
Gerekli tüm güncellemeler tamamlandı. Yapılan değişikliklerin yalnızca uygulamanın "altyapı" kodunu etkilediğini unutmayın. Temel uygulama kodunda herhangi bir değişiklik yapılması gerekmez ve uygulamanın işlevselliğinde herhangi bir değişiklik yapılmaz. Bu noktayı açıklamak için yapılan değişikliklerin resimli gösterimini aşağıda bulabilirsiniz:

Yerel geliştirme ve test
App Engine'de dev_appserver.py yerel geliştirme sunucusu bulunurken Cloud Functions'da Functions Framework bulunur. Bu çerçeveyle yerel olarak geliştirme ve test yapabilirsiniz. Kodunuz Cloud Functions'a dağıtılabileceği gibi Compute Engine, Cloud Run gibi diğer işlem platformlarına veya hatta Knative'i destekleyen şirket içi ya da karma bulut sistemlerine de dağıtılabilir. Functions Framework ile ilgili ek bağlantılar için aşağıya bakın.
6. Derleme ve dağıtma
Cloud Functions'a dağıtma işlemi App Engine'e dağıtma işleminden biraz farklıdır. requirements.txt dışında yapılandırma dosyası kullanılmadığından komut satırında kod hakkında daha fazla bilgi belirtilmelidir. Python 3.10 altında çalışan yeni HTTP tetiklemeli Cloud Functions işlevinizi şu komutla dağıtın:
$ gcloud functions deploy visitme --runtime python310 --trigger-http --allow-unauthenticated
Aşağıdakine benzer bir çıktı 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 çıktısındaki URL'yi kullanarak uygulamanızı ziyaret edin. URL şu biçimdedir: REGION-PROJECT_ID.cloudfunctions.net/visitme. Çıkış, daha önce App Engine'e dağıttığınız zamankiyle aynı olmalıdır:

Serideki diğer birçok codelab ve videoda olduğu gibi, temel uygulama işlevselliği değişmez. Amaç, bir modernizasyon tekniği uygulamak ve uygulamanın tam olarak eskisi gibi çalışmasını sağlamaktır. Ancak bu kez uygulama, daha yeni bir altyapı tarafından desteklenir. Örneğin, eski bir App Engine eski hizmetinden yerine geçen Cloud bağımsız ürününe geçiş yapma veya bu eğitimde olduğu gibi bir uygulamayı başka bir Google Cloud sunucusuz platformuna taşıma.
7. Özet/Temizleme
Bu küçük App Engine uygulamasını Cloud Function'a dönüştürdüğünüz için tebrik ederiz. Bir başka uygun kullanım alanı da büyük bir monolitik App Engine uygulamasını, her biri bir Cloud Function olacak şekilde bir dizi mikro hizmete ayırmaktır. Bu, daha modern bir geliştirme tekniğidir ve daha "tak ve çalıştır" bileşen (ör. "JAM yığını") stiliyle sonuçlanır. Bu yaklaşım, iki hedef olan karıştırma ve eşleştirme ile kodun yeniden kullanılmasına olanak tanır. Ancak bir diğer avantajı da bu mikro hizmetlerin zaman içinde hata ayıklanmaya devam etmesidir. Bu da genel olarak kararlı kod ve daha düşük bakım maliyetleri anlamına gelir.
Temizleme
Bu codelab'i tamamladıktan sonra faturalandırmayı önlemek için 2. Modül App Engine uygulamasını devre dışı bırakabilirsiniz (geçici veya kalıcı olarak). App Engine platformunda ücretsiz kota bulunur. Bu nedenle, kullanım katmanında kaldığınız sürece faturalandırılmazsınız. Aynı durum Datastore için de geçerlidir. Daha fazla bilgi için Cloud Datastore fiyatlandırma sayfasına bakın.
App Engine ve Cloud Functions gibi platformlara dağıtım yaparken küçük derleme ve depolama maliyetleri oluşur. Bazı bölgelerde Cloud Build ve Cloud Storage'ın kendi ücretsiz kotaları vardır. Derlemeler, bu kotanın bir kısmını kullanır. Özellikle bölgenizde ücretsiz katman yoksa olası maliyetleri en aza indirmek için depolama alanı kullanımınıza dikkat edin.
Cloud Functions'da maalesef "devre dışı bırakma" özelliği yoktur. Kodunuzu yedekleyin ve işlevi silin. Daha sonra aynı adla yeniden dağıtabilirsiniz. Ancak başka bir taşıma codelab'i ile devam etmeyecek ve her şeyi tamamen silmek istiyorsanız Cloud projelerinizi kapatın.
Sonraki adımlar
Bu eğitimin yanı sıra, Cloud Run için App Engine uygulamanızı kapsayıcıya dönüştürme gibi diğer taşıma modüllerine de göz atabilirsiniz. 4. ve 5. modül codelab'lerinin bağlantılarını inceleyin:
- 4. Modül: Docker ile Cloud Run'a taşıma
- Uygulamanızı Docker ile Cloud Run'da çalışacak şekilde container'a dönüştürme
- Bu taşıma işlemi, Python 2'de kalmanıza olanak tanır.
- 5. Modül: Cloud Buildpacks ile Cloud Run'a taşıma
- Cloud Buildpacks ile Cloud Run'da çalışacak şekilde uygulamanızı container'a dönüştürme
- Docker, container'lar veya
Dockerfile'ler hakkında hiçbir şey bilmeniz gerekmez. - Uygulamanızın Python 3'e taşınmış olması gerekir (Buildpacks, Python 2'yi desteklemez).
Diğer modüllerin çoğu, geliştiricilere App Engine paketlenmiş hizmetlerinden Cloud'un bağımsız alternatiflerine nasıl geçileceğini göstermeye odaklanır:
- 2. Modül: App Engine
ndb'den Cloud NDB'ye taşıma - 7-9. modüller: App Engine görev sırası push görevlerinden Cloud Tasks'e geçiş
- 12-13. modüller: App Engine Memcache'ten Cloud Memorystore'a geçiş
- 15-16. Modüller: App Engine Blobstore'dan Cloud Storage'a geçiş
- 18-19. Modüller: App Engine görev sırasından (çekme görevleri) Cloud Pub/Sub'a geçiş
Kapsülleme, özellikle CI/CD (sürekli entegrasyon/sürekli teslimat veya dağıtım) ardışık düzeninden oluşuyorsa uygulama geliştirme iş akışınızın bir parçası haline geldiyse Cloud Functions yerine Cloud Run'a geçmeyi düşünebilirsiniz. Uygulamanızı Docker ile kapsüllemek için 4. Modül'e, kapsülleme işlemini kapsayıcılar, Docker bilgisi veya Dockerfile olmadan yapmak için 5. Modül'e bakın. Cloud Functions veya Cloud Run'ı değerlendirirken başka bir sunucusuz platforma geçiş yapmak 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 değerlendirmenizi ö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.
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ı
8. Modül (BAŞLANGIÇ) ve 9. Modül (BİTİŞ) ile ilgili depo klasörlerinin bağlantılarını aşağıdaki tabloda bulabilirsiniz. Bu dokümanlara, tüm App Engine codelab'lerinin taşındığı depodan da erişebilirsiniz. Bu depoyu klonlayabilir veya ZIP dosyası olarak indirebilirsiniz.
Codelab | Python 3 |
Online kaynaklar
Bu eğitimle ilgili olabilecek online kaynakları aşağıda bulabilirsiniz:
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 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)
- Birinci ve ikinci nesil platformları karşılaştırma
- Eski çalışma zamanları için uzun süreli destek
- Belge taşıma örnekleri deposu
- Topluluk tarafından gönderilen taşıma örnekleri deposu
Cloud Functions
- gcloud functions deploy komutu
- Fiyatlandırma bilgileri
- Cloud Functions yeni nesil duyurusu
- Birinci ve ikinci nesil işlevler arasındaki farklar
- Functions Framework (yerel geliştirme) nasıl yapılır, 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 "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.