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

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

Anket

Bu eğiticiden nasıl yararlanacaksınız?

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

Python deneyiminizi nasıl değerlendirirsiniz?

Acemi Orta Yeterli

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

Acemi Orta Yeterli

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:

  1. Kurulum/Ön Çalışma
  2. Yapılandırmayı güncelleyin
  3. Uygulama kodunu değiştir

3. Kurulum/Ön Çalışma

Bu bölümde aşağıdakilerin nasıl yapılacağı açıklanmaktadır:

  1. Cloud projenizi oluşturun
  2. Temel örnek uygulamayı al
  3. 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.

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:

  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. Cihazınızda Python 2 ve 3 yüklüyse bunun yerine pip2 komutunu kullanmanız gerekebilir.
  2. gcloud komut satırı aracını yüklediğinizden, başlattığınızdan ve kullanımını incelediğinizden emin olun.
  3. Verilen her gcloud komutunda PROJECT_ID girmek istemiyorsanız Cloud projenizi gcloud config set project PROJECT_ID olarak ayarlayın.
  4. Örnek uygulamayı gcloud app deploy ile dağıtın
  5. 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)

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ü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:

  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ığından hem threadsafe hem de api_version yönergelerini silin.
  3. 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.
  4. Python 3 çalışma zamanı, Python 2 çalışma zamanı gibi yerleşik üçüncü taraf kitaplıkları desteklemez. Uygulamanızın app.yaml içinde libraries bölümü varsa, bu bölümün tamamını silin. (Gerekli paketlerin, yerleşik olmayan kitaplıklar gibi yalnızca requirements.txt içinde listelenmesi gerekir.) Örnek uygulamamızın libraries bölümü olmadığından sonraki adıma geçin.
  5. Kullanılması için true değerine ayarlanmış bir app_engine_apis yönergesi oluşturun. Bu, App Engine SDK paketinin yukarıdaki requirements.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ı sil
  • lib 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:

a7a9d2b80d706a2b.png

Son notlar

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:

Sonraki adımlar

Buradan birkaç yol tarifi alabilirsiniz:

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

1. Modül

kod

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

App Engine genel belgeleri

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.