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.
Bu codelab'in amacı, Python 2 App Engine geliştiricilerine App Engine Görev Sırası'ndan (push görevleri) Cloud Tasks'a nasıl geçiş yapılacağını göstermektir. Ayrıca, Datastore erişimi için App Engine NDB'den Cloud NDB'ye dolaylı geçiş de mevcuttur (esas olarak Modül 2'de ele alınmıştır).
7. Modül'de push görevlerinin kullanımını, 8. Modül'de bu kullanımı Cloud Tasks'a taşımayı ve ardından Modül 9'da Python 3 ve Cloud Datastore'u kullanmaya devam ettik. pull görevleri için Görev Sıraları'nı kullananlar, Cloud Pub/Sub'a taşınacaktır ve bunun yerine 18-19 arasındaki Modüllere başvurmaları gerekir.
Demoda aşağıdaki işlemleri yapmayı öğreneceksiniz:
- App Engine Görev Sırası (push görevleri) kullanımını Cloud Görevler ile değiştirin
- App Engine NDB kullanımını Cloud NDB ile değiştirin (Modül 2'ye de bakın)
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 7 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
App Engine Görev Sırası, hem push hem de pull görevlerini destekler. Google Cloud ekibi, uygulama taşınabilirliğini iyileştirmek için Task Queue gibi eski paket hizmetlerden, Cloud'un bağımsız veya eşdeğer üçüncü taraf hizmetlerine geçiş yapmanızı öneriyor.
- Görev Sırası aktarma görevi kullanıcıları, Cloud Görevler'e taşınmalıdır.
- Görev Sırası pull görevi kullanıcıları, Cloud Pub/Sub'a geçiş yapmalıdır.
Push görevi taşıma işlemi 18-19 arasındaki Taşıma Modülleri'nde, Modül 7-9'da ise push görevi taşımaya odaklanılır. App Engine Görev Sırası push görevlerinden geçiş yapmak için bu görevlerin kullanımını, yeni sayfa ziyaretlerini kaydeden ve en son ziyaretleri gösteren mevcut Python 2 App Engine örnek uygulamasına ekledik. Modül 7 codelab'de, en eski ziyaretleri silmek için bir aktarma görevi eklenir. Bu ziyaretler bir daha asla gösterilmez. Peki, Datastore'da neden ek depolama alanı kullanmaları gerekir? Bu Modül 8 codelab'inde aynı işlev korunur ancak temel sıraya alma mekanizmasını Görev Sırası aktarma görevlerinden Cloud Tasks'a taşır ve Modül 2'nin App Engine NDB'den Datastore erişimi için Cloud NDB'ye taşıma işlemini tekrarlar.
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
- Yeni Google Cloud hizmetlerini/API'lerini etkinleştirme
Bu adımlar, çalışan bir kodla başlamanızı ve örnek uygulamanızın Cloud hizmetlerine taşınmaya hazır olmasını sağlar.
1. Proje oluşturun
Modül 7 codelab'ini tamamladıysanız aynı projeyi (ve kodu) yeniden kullanın. Alternatif olarak, yeni bir proje oluşturabilir veya mevcut başka bir projeyi yeniden kullanabilirsiniz. Projenin etkin bir faturalandırma hesabı ve etkin bir App Engine uygulamasının bulunduğundan emin olun. Bu codelab'de ihtiyacınız olduğunda proje kimliğinizi bulun ve PROJECT_ID
değişkeniyle her karşılaştığınızda kullanın.
2. Temel örnek uygulamayı al
Ön koşullardan biri, çalışan bir Modül 7 App Engine uygulamasıdır: Modül 7 codelab'ini tamamlayın (önerilen) veya depodan Modül 7 uygulamasını kopyalayın. İster sizin ister bizimkininkini kullanın, Modül 7 kodu ile başlayalım ("BAŞLAYIN"). Bu codelab'de, Module 8 depo klasöründekine ("FINISH") benzeyen bir kodla sonlandırılır ve taşıma işleminde size yol gösterilir.
- BAŞLANGIÇ: Modül 7 deposu
- FINISH: Modül 8 deposu
- Deponun tamamı (ZIP dosyasını klonlayın veya indirin)
Hangi Modül 7 uygulamasını kullandığınıza bakılmaksızın, 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 ve doğrulama
Modül 7 uygulamasını 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. Geliştirme makinenizde hem Python 2 hem de 3 yüklüysepip2
kullanmanız gerekebilir. gcloud
komut satırı aracını yükleyip başlattığınızdan ve kullanımını incelediğinizden emin olun.- (İsteğe bağlı) Verdiğiniz her
gcloud
komutuyla birliktePROJECT_ID
girmek istemiyorsanız Cloud projenizigcloud config set project
PROJECT_ID
olarak ayarlayın. - Örnek uygulamayı
gcloud app deploy
ile dağıtın - Uygulamanın beklendiği gibi ve sorunsuz çalıştığını onaylayın. Modül 7 codelab'ini tamamladıysanız uygulama, en son ziyaretlerle birlikte en çok ziyaret edilen ziyaretçileri de gösterir (aşağıda gösterilmiştir). En altta, silinecek eski görevler gösterilir.
4. Yeni Google Cloud hizmetlerini/API'lerini etkinleştirme
Eski uygulama, ek kurulum gerektirmeyen ancak bağımsız Cloud hizmetleri tarafından sağlanan App Engine paket hizmetlerini kullanıyordu. Güncellenen uygulama, hem Cloud Tasks'ı hem de Cloud Datastore'u (Cloud NDB istemci kitaplığı aracılığıyla) kullanacak. Bazı Cloud ürünlerinde "Daima Ücretsiz" App Engine, Cloud Datastore ve Cloud Tasks dahil olmak üzere tier kotaları. Bu sınırların altında kaldığınız sürece bu eğitimi tamamlarken sizden ücret alınmaz. Cloud APIs, tercihinize bağlı olarak Cloud Console'dan veya komut satırından etkinleştirilebilir.
Cloud Console'dan
Doğru proje için Cloud Console'da API Yöneticisi'nin Kitaplık sayfasına gidin ve sayfanın ortasındaki arama çubuğunu kullanarak Cloud Datastore ve Cloud Tasks API'lerini arayın:
Her API için Etkinleştir düğmesini ayrı ayrı tıklayın. Fatura bilgileri istenebilir. Bu, Cloud Pub/Sub API Kitaplığı sayfasını içeren bir örnektir (bu codelab için Pub/Sub API'yi etkinleştirmeyin, yalnızca Cloud Tasks ve Datastore'u etkinleştirin):
Komut satırından
Konsoldaki API'leri etkinleştirme konusunda görsel açıdan bilgilendirici olsa da bazıları komut satırını tercih eder. İki API'yi aynı anda etkinleştirmek için gcloud services enable cloudtasks.googleapis.com datastore.googleapis.com
komutunu çalıştırın:
$ gcloud services enable cloudtasks.googleapis.com datastore.googleapis.com Operation "operations/acat.p2-aaa-bbb-ccc-ddd-eee-ffffff" finished successfully.
Fatura bilgileriniz istenebilir. Diğer Cloud API'lerini etkinleştirmek ve "URI"lerini öğrenmek istiyorsanız bunları her API'nin Kitaplık sayfasının alt kısmında bulabilirsiniz. Örneğin, "Hizmet adı" olarak pubsub.googleapis.com
tıklayın.
Adımlar tamamlandıktan sonra projeniz API'lere erişebilir. Artık bu API'leri kullanmak için uygulamayı güncelleyebilirsiniz.
4. Yapılandırmayı güncelleyin
Yapılandırmadaki güncellemeler, açıkça ek Cloud istemci kitaplıklarının kullanılması nedeniyle yapılır. Hangi uygulamaları kullandığınızdan bağımsız olarak, hiçbir Cloud istemci kitaplığı kullanmayan uygulamalarda da aynı değişikliklerin yapılması gerekir.
requirements.txt
8. Modül, Modül 1'deki App Engine NDB ve Görev Sırası kullanımını Cloud NDB ve Cloud Tasks ile değiştirmektedir. Modül 7'den flask
ürününe katılmak için hem google-cloud-ndb
hem de google-cloud-tasks
öğelerini requirements.txt
hedefine ekleyin:
flask
google-cloud-ndb
google-cloud-tasks
Bu requirements.txt
dosyasında sürüm numarası bulunmadığından en son sürümler seçildi. Herhangi bir uyumsuzluk oluşursa uygulamanın çalışan sürümlerini kilitlemek için bir sürüm numarası belirtin.
app.yaml
Cloud istemci kitaplıklarını kullanırken Python 2 App Engine çalışma zamanı için grpcio
ve setuptools
adlı belirli üçüncü taraf paketleri gerekir. Python 2 kullanıcıları, bunun gibi yerleşik kitaplıkları, app.yaml
içinde mevcut sürümle veya "en yeni sürüm" ile birlikte listelemelidir. Henüz bir libraries
bölümünüz yoksa bir tane oluşturun ve aşağıdaki gibi iki kitaplığı da ekleyin:
libraries:
- name: grpcio
version: latest
- name: setuptools
version: latest
Uygulamanız taşınırken zaten libraries
bölümü bulunuyor olabilir. Varsa ve grpcio
ile setuptools
eksikse bunları mevcut libraries
bölümünüze eklemeniz yeterlidir. Güncellenen app.yaml
aşağıdaki gibi görünecektir:
runtime: python27
threadsafe: yes
api_version: 1
handlers:
- url: /.*
script: main.app
libraries:
- name: grpcio
version: latest
- name: setuptools
version: latest
appengine_config.py
appengine_config.py
öğesindeki google.appengine.ext.vendor.add()
çağrısı, lib
ürününde kopyalanan (bazen "tedarikçi firma" veya "kendi kendine paketleme" olarak da adlandırılır) üçüncü taraf kitaplıklarınızı uygulamanıza bağlar. Yukarıda, app.yaml
sürümünde yerleşik üçüncü taraf kitaplıklar eklendi. Bu kitaplıklar, uygulamanızı lib
uygulamasındaki bu yerleşik paketlere bağlamak için setuptools.pkg_resources.working_set.add_entry()
gereklidir. Orijinal Modül 1'i (appengine_config.py
) ve siz Modül 8 güncellemelerini yaptıktan sonra aşağıda bulabilirsiniz:
ÖNCE:
from google.appengine.ext import vendor
# Set PATH to your libraries folder.
PATH = 'lib'
# Add libraries installed in the PATH folder.
vendor.add(PATH)
SONRA:
import pkg_resources
from google.appengine.ext import vendor
# Set PATH to your libraries folder.
PATH = 'lib'
# Add libraries installed in the PATH folder.
vendor.add(PATH)
# Add libraries to pkg_resources working set to find the distribution.
pkg_resources.working_set.add_entry(PATH)
Benzer bir açıklamayı App Engine taşıma belgelerinde de bulabilirsiniz.
5. Uygulama kodunu değiştir
Bu bölümde, main.py
ana uygulama dosyasında (main.py
) yapılan güncellemeler yer almaktadır. Bu güncellemeler, App Engine Görev Sırası push sıralarının kullanımını Cloud Görevler ile değiştirmektedir. templates/index.html
web şablonunda değişiklik yoktur. Her iki uygulama da aynı verileri gösterecek şekilde çalışmalıdır. Ana uygulamada yapılan değişiklikler şu dört "yapılacak" bölümüne ayrılır:
- İçe aktarma işlemlerini ve başlatmayı güncelleme
- Veri modeli işlevini güncelleme (Cloud NDB)
- Cloud Tasks'a (ve Cloud NDB) geçiş
- Görev işleyiciyi güncelleme (push)
1. İçe aktarma işlemlerini ve başlatmayı güncelleme
- App Engine NDB (
google.appengine.ext.ndb
) ve Görev Sırası (google.appengine.api.taskqueue
) özelliklerini sırasıyla Cloud NDB (google.cloud.ndb
) ve Cloud Tasks (google.cloud.tasks
) ile değiştirin. - Cloud istemci kitaplıkları, "API istemcileri"nin başlatılmasını ve oluşturulmasını gerektirir. bunları sırasıyla
ds_client
vets_client
öğelerine atayın. - Görev Sırası dokümanlarında şu durum yer alıyor: "App Engine,
default
adlı, yapılandırılmış ve varsayılan ayarlarla kullanıma hazır olan bir varsayılan push sırası sağlıyor." Cloud Tasks,default
sırası sağlamaz (çünkü App Engine'den bağımsız bir Cloud ürünü olduğundan),default
adlı bir Cloud Tasks sırası oluşturmak için yeni kod gerekir. - App Engine Görev Sırası, uygulamanızın çalıştığı bölgeyi kullandığından bölge belirtmenizi gerektirmez. Ancak Cloud Tasks artık bağımsız bir ürün olduğundan, bir bölge gerektir ve bu bölge, uygulamanızın çalıştığı bölgeyle eşleşmelidir. "Tam nitelikli yol adı" oluşturmak için bölge adı ve Cloud projesi kimliği gerekir. sıranın benzersiz tanımlayıcısıdır.
Yukarıdaki üçüncü ve dördüncü maddede açıklanan güncellemeler, gereken ek sabit değerlerin ve başlatma işleminin büyük kısmını oluşturur. "Önce" ve "sonrası" ve bu değişiklikleri main.py
üstünde yapın.
ÖNCE:
from datetime import datetime
import logging
import time
from flask import Flask, render_template, request
from google.appengine.api import taskqueue
from google.appengine.ext import ndb
app = Flask(__name__)
SONRA:
from datetime import datetime
import json
import logging
import time
from flask import Flask, render_template, request
from google.cloud import ndb, tasks
app = Flask(__name__)
ds_client = ndb.Client()
ts_client = tasks.CloudTasksClient()
_, PROJECT_ID = google.auth.default()
REGION_ID = 'REGION_ID' # replace w/your own
QUEUE_NAME = 'default' # replace w/your own
QUEUE_PATH = ts_client.queue_path(PROJECT_ID, REGION_ID, QUEUE_NAME)
2. Veri modeli işlevini güncelleme (Cloud NDB)
App Engine NDB ve Cloud NDB neredeyse aynı şekilde çalışır. Veri modelinde veya store_visit()
işlevinde önemli bir değişiklik yoktur. Dikkat çekici tek fark, store_visit()
ürününde Visit
varlığı oluşturma işleminin artık bir Python with
bloğunun içine alınmasıdır. Cloud NDB, tüm Datastore erişiminin kendi bağlam yöneticisi içinde kontrol edilmesini zorunlu kılmaktadır. Bu da with
ifadesinden kaynaklanır. Aşağıdaki kod snippet'leri, Cloud NDB'ye geçiş yaparken bu küçük farkı göstermektedir. Bu değişikliği uygulayın.
ÖNCE:
class Visit(ndb.Model):
'Visit entity registers visitor IP address & timestamp'
visitor = ndb.StringProperty()
timestamp = ndb.DateTimeProperty(auto_now_add=True)
def store_visit(remote_addr, user_agent):
'create new Visit entity in Datastore'
Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
SONRA:
class Visit(ndb.Model):
'Visit entity registers visitor IP address & timestamp'
visitor = ndb.StringProperty()
timestamp = ndb.DateTimeProperty(auto_now_add=True)
def store_visit(remote_addr, user_agent):
'create new Visit entity in Datastore'
with ds_client.context():
Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
3. Cloud Tasks'a (ve Cloud NDB) geçiş
Bu taşıma sürecindeki en önemli değişiklik, temel sıraya ekleme altyapısını değiştirir. Bu işlem fetch_visits()
işlevinde gerçekleştirilir. Burada, eski ziyaretleri silmeye yönelik bir (push) görevi oluşturulur ve yürütme için sıraya alınır. Ancak 7. Modül'deki orijinal işlevler bozulmadan kalır:
- En son ziyaretlerle ilgili sorgu.
- Bu ziyaretleri hemen geri getirmek yerine, görüntülenen en eski zamanın
Visit
zaman damgasını kaydedin. Bundan daha eski tüm ziyaretleri silebilirsiniz. - Standart Python yardımcı programlarını kullanarak zaman damgasını kayan nokta ve dize olarak tanıtın. Her ikisini de kullanıcıya görüntüleme, günlüklere ekleme, işleyiciye iletme vb. kapasitelerde kullanın.
- Yük olarak bu zaman damgasına ve URL olarak
/trim
ile birlikte bir aktarma görevi oluşturun. - Görev işleyici sonunda bir HTTP
POST
aracılığıyla bu URL'ye çağrılır.
Bu iş akışı, "öncesi" ifadesiyle kod snippet'i:
ÖNCE:
def fetch_visits(limit):
'get most recent visits & add task to delete older visits'
data = Visit.query().order(-Visit.timestamp).fetch(limit)
oldest = time.mktime(data[-1].timestamp.timetuple())
oldest_str = time.ctime(oldest)
logging.info('Delete entities older than %s' % oldest_str)
taskqueue.add(url='/trim', params={'oldest': oldest})
return data, oldest_str
Cloud Tasks aynı işleve sahip olsa da yürütme platformu haline geldi. Bu değişikliği etkileyecek güncellemeler şunları içerir:
Visit
sorgusunu bir Pythonwith
bloğunun içinde sarmala (Modül 2'yi Cloud NDB'ye taşıma)- Zaman damgası yükü ve URL gibi beklenen özellikleri içeren Cloud Tasks meta verilerini oluşturun ve aynı zamanda MIME türünü ekleyin ve yükü JSON kodlaması yapın.
- Sıranın meta verileri ve tam yol adıyla görevi oluşturmak için Cloud Tasks API istemcisini kullanın.
fetch_visits()
ile ilgili bu değişiklikler aşağıda gösterilmiştir:
SONRA:
def fetch_visits(limit):
'get most recent visits & add task to delete older visits'
with ds_client.context():
data = Visit.query().order(-Visit.timestamp).fetch(limit)
oldest = time.mktime(data[-1].timestamp.timetuple())
oldest_str = time.ctime(oldest)
logging.info('Delete entities older than %s' % oldest_str)
task = {
'app_engine_http_request': {
'relative_uri': '/trim',
'body': json.dumps({'oldest': oldest}).encode(),
'headers': {
'Content-Type': 'application/json',
},
}
}
ts_client.create_task(parent=QUEUE_PATH, task=task)
return data, oldest_str
4. Görev işleyiciyi güncelleme (push)
(push) görev işleyici işlevi önemli güncellemeler gerektirmez; yalnızca yürütülmesi gerekir. Görev Sırası veya Bulut Görevleri için geçerlidir. “Kod, koddur.” öyle diyorlar. Bununla birlikte, bazı küçük değişiklikler vardır:
- Zaman damgası yükü Görev Sırası'na tam olarak iletildi ancak Cloud Tasks için JSON olarak kodlandı, bu nedenle varışta JSON ile ayrıştırılmalıdır.
- Görev Sırası ile
/trim
için yapılan HTTPPOST
çağrısı,application/x-www-form-urlencoded
örtülü MIME türüne sahipti ancak Cloud Tasks'ta bu çağrı açıkçaapplication/json
olarak belirtildiğinden yükü ayıklamanın biraz farklı bir yolu vardır. - Cloud NDB API istemci bağlam yöneticisini kullanın (Modül 2'yi Cloud NDB'ye taşıma).
Aşağıda, trim()
adlı görev işleyicide bu değişiklikleri yapmadan önceki ve sonraki kod snippet'lerini görebilirsiniz:
ÖNCE:
@app.route('/trim', methods=['POST'])
def trim():
'(push) task queue handler to delete oldest visits'
oldest = request.form.get('oldest', type=float)
keys = Visit.query(
Visit.timestamp < datetime.fromtimestamp(oldest)
).fetch(keys_only=True)
nkeys = len(keys)
if nkeys:
logging.info('Deleting %d entities: %s' % (
nkeys, ', '.join(str(k.id()) for k in keys)))
ndb.delete_multi(keys)
else:
logging.info('No entities older than: %s' % time.ctime(oldest))
return '' # need to return SOME string w/200
SONRA:
@app.route('/trim', methods=['POST'])
def trim():
'(push) task queue handler to delete oldest visits'
oldest = float(request.get_json().get('oldest'))
with ds_client.context():
keys = Visit.query(
Visit.timestamp < datetime.fromtimestamp(oldest)
).fetch(keys_only=True)
nkeys = len(keys)
if nkeys:
logging.info('Deleting %d entities: %s' % (
nkeys, ', '.join(str(k.id()) for k in keys)))
ndb.delete_multi(keys)
else:
logging.info(
'No entities older than: %s' % time.ctime(oldest))
return '' # need to return SOME string w/200
root()
ana uygulama işleyicisi veya templates/index.html
web şablonunda güncelleme yok.
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
Uygulamanızı gcloud app deploy
ile dağıtın. Çıkış, Modül 7 uygulamasıyla aynı olmalıdır ancak uygulamanızı eskisinden daha taşınabilir hale getiren tamamen farklı bir push sırası ürününe geçtiğinizi unutmayın.
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:
- Cloud Tasks'ın ücretsiz bir katmanı vardır; Daha fazla bilgi için fiyatlandırma sayfasını inceleyin.
- 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
Böylece, App Engine Görev Sırası'ndaki aktarma görevlerini Cloud Görevler'e taşıma işlemini tamamlamış olduk. Bu uygulamayı Python 3'e taşımaya ve Cloud NDB'den Cloud Datastore'a daha fazla taşımaya devam etmek istiyorsanız Modül 9'u değerlendirmenizi öneririz.
Cloud NDB, Python 2 App Engine geliştiricileri için özel olarak mevcuttur ve neredeyse tamamen aynı kullanıcı deneyimi sunar ancak Cloud Datastore'un App Engine dışı kullanıcılar veya yeni (Python 3) App Engine kullanıcıları için oluşturulmuş kendi yerel istemci kitaplığı vardır. Ancak Cloud NDB, Python 2 ve 3 için kullanılabildiğinden Cloud Datastore'a geçiş yapma zorunluluğu yoktur.
Cloud NDB ve Cloud Datastore'un her ikisi de Datastore'a erişir (farklı şekillerde olsa da). Bu nedenle, Cloud Datastore'a geçmeyi düşünmenin tek nedeni, halihazırda Cloud Datastore'u kullanan ve tek bir Datastore istemci kitaplığında standartlaştırmak isteyen başka uygulamalarınız (özellikle de App Engine dışı uygulamalar) varsa kullanmanızdır. Cloud NDB'den Cloud Datastore'a bu isteğe bağlı taşıma işlemi, Modül 3'te tek başına (Görev Sırası veya Cloud Görevleri olmadan) ele alınmıştır.
Modül 3, 8 ve 9'un yanı sıra, App Engine'in eski paket hizmetlerinden uzaklaşmaya odaklanan diğer taşıma modülleri arasında şunlar yer alır:
- Modül 2: App Engine NDB'den Cloud NDB'ye 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: Cloud Pub/Sub'a App Engine Görev Sırası (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 7 (START) ve Modül 8 (FINISH) için depo klasörlerinin bağlantılarını aşağıdaki tabloda bulabilirsiniz.
Codelab | Python 2 | Python 3 |
kod (bu eğiticide ele alınmamıştır) | ||
8. Modül (bu codelab) | (Yok) |
Çevrimiçi kaynaklar
Aşağıda, bu eğitim için alakalı olabilecek çevrimiçi kaynaklar verilmiştir:
App Engine Görev Sırası ve Cloud Görevleri
- App Engine Görev Sırası'na genel bakış
- App Engine Görev Sırası aktarma sıralarına genel bakış
- App Engine Görev Sırası, görevleri Cloud Tasks Taşıma işlemine aktarma
- App Engine Görev Sırası, görevleri Cloud Tasks belge örneğine aktarma
- Cloud Tasks belgeleri
- Cloud Tasks Python istemci kitaplığı örnekleri
- Cloud Tasks fiyatlandırma bilgileri
App Engine NDB ve Cloud NDB (Datastore)
- App Engine NDB belgeleri
- App Engine NDB deposu
- Google Cloud NDB belgeleri
- Google Cloud NDB deposu
- Cloud Datastore fiyatlandırma bilgileri
App Engine platformu
- 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)
- Birinci ve ikinci nesil platformlar
- Eski çalışma zamanları için uzun süreli destek
- Belge taşıma örnekleri
- Topluluğun katkıda bulunduğu taşıma örnekleri
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.