App Engine paket hizmetleri için desteğin kapsamı genişletiliyor: Bölüm 1 (Modül 17)

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

Anket

Bu eğitimi nasıl kullanacaksınız?

Yalnızca okuyun Okuyun ve alıştırmaları tamamlayın

Python ile ilgili deneyiminizi nasıl değerlendirirsiniz?

Yeni başlayan Orta düzey Uzman

Google Cloud hizmetlerini kullanma deneyiminizi nasıl değerlendirirsiniz?

Başlangıç Orta İleri

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:

  1. Kurulum/Ön Hazırlık
  2. Yapılandırmayı güncelleyin
  3. 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:

  1. Cloud projenizi ayarlama
  2. Temel örnek uygulamayı edinme
  3. 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.

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:

  1. Varsa lib klasörünü silin ve lib öğesini yeniden doldurmak için pip install -t lib -r requirements.txt komutunu çalıştırın. Hem Python 2 hem de 3 yüklüyse bunun yerine pip2 komutunu kullanmanız gerekebilir.
  2. gcloud komut satırı aracını yüklediğinizden ve başlattığınızdan emin olun ve kullanımını inceleyin.
  3. Verilen her gcloud komutunda PROJECT_ID değerini girmek istemiyorsanız Cloud projenizi gcloud config set project PROJECT_ID ile ayarlayın.
  4. Örnek uygulamayı gcloud app deploy ile dağıtma
  5. 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).

a7a9d2b80d706a2b.png

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:

  1. runtime yönergesini desteklenen Python 3 sürümüyle değiştirin. Örneğin, Python 3.10 için python310 değerini belirtin.
  2. Python 3'te kullanılmadıkları için hem threadsafe hem de api_version yönergelerini silin.
  3. Bu uygulamada yalnızca komut dosyası işleyicileri olduğundan handlers bölümünü tamamen silin. Uygulamanızda statik dosya işleyiciler varsa bunları handlers içinde olduğu gibi bırakın.
  4. 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.yaml içinde libraries bölümü varsa bu bölümün tamamını silin. (Yalnızca gerekli paketlerin requirements.txt içinde listelenmesi gerekir. Örneğin, yerleşik olmayan kitaplıklar.) Örnek uygulamamızda libraries bölümü bulunmadığından bir sonraki adıma geçin.
  5. Kullanmak için app_engine_apis yönergesi oluşturun ve true olarak ayarlayın. Bu, yukarıdaki requirements.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.py dosyasını silme
  • lib klasö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:

a7a9d2b80d706a2b.png

Son notlar

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/images
  • console.cloud.google.com/storage/browser/staging.PROJECT_ID.appspot.com
  • Yukarıdaki depolama bağlantıları, PROJECT_ID ve *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:

Sonraki adımlar

Buradan sonra birkaç farklı yöne gidebilirsiniz:

  1. Daha fazla kod değişikliği gerektiren paketlenmiş hizmetleri kullanarak kodu güncelleme
  2. Paketlenmiş hizmetlerden bağımsız Cloud ürünlerine geçiş
  3. 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:

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 Dockerfile olmadan 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

1. Modül

code

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

App Engine ile ilgili genel belgeler

Diğer Cloud bilgileri

Videolar

Lisans

Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.