App Engine Görev Sırası Push Görevleri'nden Cloud Tasks'a Taşıma (8. Modül)

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:

Gerekenler

Anket

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

Yalnızca baştan sona oku 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

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.

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:

  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
  4. 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.

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:

  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. Geliştirme makinenizde hem Python 2 hem de 3 yüklüyse pip2 kullanmanız gerekebilir.
  2. gcloud komut satırı aracını yükleyip başlattığınızdan ve kullanımını incelediğinizden emin olun.
  3. (İsteğe bağlı) Verdiğiniz her gcloud komutuyla birlikte 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. 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.

4aa8a2cb5f527079.png

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:

c7a740304e9d35b.png

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

1b6c0a2a73124f6b.jpeg

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:

  1. İçe aktarma işlemlerini ve başlatmayı güncelleme
  2. Veri modeli işlevini güncelleme (Cloud NDB)
  3. Cloud Tasks'a (ve Cloud NDB) geçiş
  4. Görev işleyiciyi güncelleme (push)

1. İçe aktarma işlemlerini ve başlatmayı güncelleme

  1. 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.
  2. Cloud istemci kitaplıkları, "API istemcileri"nin başlatılmasını ve oluşturulmasını gerektirir. bunları sırasıyla ds_client ve ts_client öğelerine atayın.
  3. 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.
  4. 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:

  1. En son ziyaretlerle ilgili sorgu.
  2. 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.
  3. 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.
  4. Yük olarak bu zaman damgasına ve URL olarak /trim ile birlikte bir aktarma görevi oluşturun.
  5. 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:

  1. Visit sorgusunu bir Python with bloğunun içinde sarmala (Modül 2'yi Cloud NDB'ye taşıma)
  2. 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.
  3. 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:

  1. 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.
  2. Görev Sırası ile /trim için yapılan HTTP POST çağrısı, application/x-www-form-urlencoded örtülü MIME türüne sahipti ancak Cloud Tasks'ta bu çağrı açıkça application/json olarak belirtildiğinden yükü ayıklamanın biraz farklı bir yolu vardır.
  3. 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.

4aa8a2cb5f527079.png

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

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

7. Modül

kod

kod (bu eğiticide ele alınmamıştır)

8. Modül (bu codelab)

kod

(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 NDB ve Cloud NDB (Datastore)

App Engine platformu

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.