Flask uygulamalarında App Engine Görev Sırası (görevleri çekme) nasıl kullanılır? (Modül 18)

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'de, Modül 1 codelab'den örnek uygulamaya App Engine Görev Sırası pull görevlerini nasıl ekleyeceğinizi ve kullanacağınızı öğretebilirsiniz. Bu Modül 18 eğiticisinde pull görevlerinin kullanımını ekleyip daha sonra Modül 19'da bu kullanımı Cloud Pub/Sub'a taşıyacağız. Push görevleri için Görev Sıralarını kullananlar, bunun yerine Cloud Tasks'a geçiş yapacak ve bunun yerine Modül 7-9'a başvurmaları gerekir.

Demoda aşağıdaki işlemleri yapmayı öğreneceksiniz:

  • App Engine Task Queue API'yi/paketlenmiş hizmeti kullanma
  • Temel Python 2 Flask App Engine NDB uygulamasına pull sırası kullanımı ekleme

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

App Engine Görev Sırası pull görevlerinden geçiş yapmak için bu görevlerin kullanımını Modül 1 codelab'den elde edilen mevcut Flask ve App Engine NDB uygulamasına ekleyin. Örnek uygulama, son kullanıcıya yapılan en son ziyaretleri gösterir. Bu normaldir, ancak en çok kimlerin ziyaret ettiğini görmek için ziyaretçileri izlemek de daha da ilginçtir.

Bu ziyaretçi sayıları için push görevleri kullanabiliriz, ancak sorumluluğu ziyaretleri kaydetmek ve kullanıcılara hemen yanıt vermek olan örnek uygulama ile tanımlanmış bir "çalışan" arasında bölüştürmek istiyoruz ziyaretçi sayılarını normal istek-yanıt iş akışının dışında toplamak olan kişiler.

Bu tasarımı uygulamak için çalışan işlevselliğini desteklemenin yanı sıra ana uygulamaya pull sıraları kullanımını da ekliyoruz. Çalışan, curl veya wget kullanan ayrı bir işlem (ör. arka uç örneği veya her zaman açık bir sanal makinede çalışan kod), cron işi ya da temel bir komut satırı HTTP isteği olarak çalışabilir. Bu entegrasyondan sonra uygulamayı bir sonraki (Modül 19) codelab'de Cloud Pub/Sub'a taşıyabilirsiniz.

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 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 birkaç kez girmeniz gerekeceğinden proje kimliğinizi bulun ve PROJECT_ID değişkeniyle her karşılaştığınızda kullanın.

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'i 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 18 depo klasöründeki "FINISH" kod deposuna benzeyen bir kod gösterilir.

Hangi Modül 1 uygulamasını kullandığınıza bakılmaksızın klasör, aşağıdaki çıkıştaki 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ı 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 beklendiği gibi çalıştığını ve en son ziyaretleri gösterdiğini onaylayın (aşağıda gösterilmiştir)

a7a9d2b80d706a2b.png

4. Yapılandırmayı güncelleyin

Standart App Engine yapılandırma dosyalarında (app.yaml, requirements.txt, appengine_config.py) değişiklik yapılmasına gerek yoktur. Bunun yerine, aynı üst düzey dizine yerleştirerek, aşağıdaki içeriğe sahip yeni bir yapılandırma dosyası (queue.yaml) ekleyin:

queue:
- name: pullq
  mode: pull

queue.yaml dosyası, uygulamanız için mevcut tüm görev sıralarını belirtir (App Engine tarafından otomatik olarak oluşturulan default [push] sırası hariç). Bu durumda, yalnızca bir tane, pullq adlı bir pull sırası vardır. App Engine, mode yönergesinin pull olarak belirtilmesini gerektirir. Aksi takdirde varsayılan olarak bir push sırası oluşturur. Belgelerde pull sıraları hakkında daha fazla bilgi edinin. Diğer seçenekler için queue.yaml referans sayfasını da inceleyin.

Bu dosyayı uygulamanızdan ayrı olarak dağıtın. gcloud app deploy kodunu kullanmaya devam edersiniz ancak komut satırında queue.yaml özelliğini de sağlarsınız:

$ gcloud app deploy queue.yaml
Configurations to update:

descriptor:      [/tmp/mod18-gaepull/queue.yaml]
type:            [task queues]
target project:  [my-project]

WARNING: Caution: You are updating queue configuration. This will override any changes performed using 'gcloud tasks'. More details at
https://cloud.google.com/tasks/docs/queue-yaml

Do you want to continue (Y/n)?

Updating config [queue]...⠹WARNING: We are using the App Engine app location (us-central1) as the default location. Please use the "--location" flag if you want to use a different location.
Updating config [queue]...done.

Task queues have been updated.

Visit the Cloud Platform Console Task Queues page to view your queues and cron jobs.
$

5. Uygulama kodunu değiştir

Bu bölümde aşağıdaki dosyalarda yapılan güncellemeler yer almaktadır:

  • main.py — pull sıralarının kullanımını ana uygulamaya ekleyin
  • templates/index.html — yeni verileri görüntülemek için web şablonunu güncelleyin

İthalat ve sabit değerler

İlk adım, pull sıralarını desteklemek için yeni bir içe aktarma ve birkaç sabit değer eklemektir.

  • Görev Sırası kitaplığının (google.appengine.api.taskqueue) içe aktarılmasını ekleyin.
  • Bir saatlik (HOUR) maksimum pull görevi sayısını (TASKS) pull sıramızdan (QUEUE) kiralamayı desteklemek için üç sabit değer ekleyin.
  • En son ziyaretçileri ve en çok ziyaret edilen ziyaretçileri görüntülemek için bir sabit değer ekleyin (LIMIT).

Orijinal kodu ve bu güncellemeleri yaptıktan sonra nasıl göründüğünü aşağıda bulabilirsiniz:

Ö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 taskqueue
from google.appengine.ext import ndb

HOUR = 3600
LIMIT = 10
TASKS = 1000
QNAME = 'pullq'
QUEUE = taskqueue.Queue(QNAME)
app = Flask(__name__)

pull görevi ekleme (görev için veri toplama ve pull sırasında görev oluşturma)

Visit veri modeli, fetch_visits() içinde görüntülenecek ziyaretlerle ilgili sorgulamada olduğu gibi aynı kalır. Kodun bu bölümünde yapılması gereken tek değişiklik store_visit() üzerindedir. Ziyareti kaydetmeye ek olarak, çalışanın ziyaretçi sayacını artırabilmesi için ziyaretçinin IP adresini içeren pull sırasına bir görev ekleyin.

Ö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()

def fetch_visits(limit):
    'get most recent visits'
    return Visit.query().order(-Visit.timestamp).fetch(limit)

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 in Datastore and queue request to bump visitor count'
    Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
    QUEUE.add(taskqueue.Task(payload=remote_addr, method='PULL'))

def fetch_visits(limit):
    'get most recent visits'
    return Visit.query().order(-Visit.timestamp).fetch(limit)

Ziyaretçi izleme için veri modeli ve sorgu işlevi oluşturma

Ziyaretçileri izlemek için VisitorCount veri modeli ekleyin, visitor için alanların yanı sıra ziyaret sayısını izlemek için bir tam sayı counter içermelidir. Ardından, en iyi ziyaretçileri en azdan en az düzende sorgulamak ve döndürmek için fetch_counts() adlı yeni bir işlev ekleyin (alternatif olarak bir Python classmethod olabilir). Sınıf ve işlevi fetch_visits() gövdesinin hemen altına ekleyin:

class VisitorCount(ndb.Model):
    visitor = ndb.StringProperty(repeated=False, required=True)
    counter = ndb.IntegerProperty()

def fetch_counts(limit):
    'get top visitors'
    return VisitCount.query().order(-VisitCount.counter).fetch(limit)

Çalışan kodu ekle

/log alanına yapılan bir GET isteği aracılığıyla ziyaretçileri günlüğe kaydetmek için yeni bir log_visitors() işlevi ekleyin. En son ziyaretçi sayısını izlemek için bir sözlük/karma oluşturarak mümkün olduğunca fazla görevi bir saat boyunca kiralar. Her görev için, aynı ziyaretçinin tüm ziyaretleri sayılır. Hesaplamalar hazır olduğunda uygulama, halihazırda Datastore'da bulunan ilgili tüm VisitorCount varlıklarını günceller veya gerekirse yenilerini oluşturur. Son adım, işlenen görev sayısından kaç ziyaretçinin kaydedildiğini gösteren düz bir kısa mesaj döndürür. Bu işlevi fetch_counts() altındaki main.py bölümüne ekleyin:

@app.route('/log')
def log_visitors():
    'worker processes recent visitor counts and updates them in Datastore'
    # tally recent visitor counts from queue then delete those tasks
    tallies = {}
    tasks = QUEUE.lease_tasks(HOUR, TASKS)
    for task in tasks:
        visitor = task.payload
        tallies[visitor] = tallies.get(visitor, 0) + 1
    if tasks:
        QUEUE.delete_tasks(tasks)

    # increment those counts in Datastore and return
    for visitor in tallies:
        counter = VisitorCount.query(VisitorCount.visitor == visitor).get()
        if not counter:
            counter = VisitorCount(visitor=visitor, counter=0)
            counter.put()
        counter.counter += tallies[visitor]
        counter.put()
    return 'DONE (with %d task[s] logging %d visitor[s])\r\n' % (
            len(tasks), len(tallies))

Ana işleyiciyi yeni ekran verileriyle güncelle

En iyi ziyaretçileri görüntülemek için root() ana işleyicisini fetch_counts() yöntemini çağıracak şekilde güncelleyin. Ayrıca şablon, en çok ziyaret edilen ziyaretçilerin ve en son ziyaretlerin sayısını gösterecek şekilde güncellenecektir. Ziyaretçinin sayısını, fetch_visits() çağrısından gelen en son ziyaretlerle birlikte paketleyin ve web şablonuna aktarmak için bunu tek bir context öğesine bırakın. Bu değişiklik yapılmadan önceki ve yapıldıktan sonraki kodu aşağıda bulabilirsiniz:

ÖNCE:

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

SONRA:

@app.route('/')
def root():
    'main application (GET) handler'
    store_visit(request.remote_addr, request.user_agent)
    context = {
        'limit':  LIMIT,
        'visits': fetch_visits(LIMIT),
        'counts': fetch_counts(LIMIT),
    }
    return render_template('index.html', **context)

main.py ile ilgili yapılması gereken tüm değişiklikler bunlardır. main.py ürününde yaptığınız değişiklikler hakkında size genel bir fikir vermek amacıyla açıklama amaçlı olarak bu güncellemelerin resimli temsilini aşağıda bulabilirsiniz:

ad5fd3345efc13d0.png

Web şablonunu yeni görüntülü reklam verileriyle güncelle

templates/index.html web şablonunda, en yeni ziyaretçilerin normal yüküne ek olarak en çok ziyaret edilen ziyaretçileri görüntülemek için güncelleme gerekiyor. En çok ziyaret edilen ziyaretçileri ve sayılarını sayfanın üst kısmındaki bir tabloya bırakın ve en son ziyaretleri önceki gibi oluşturmaya devam edin. Diğer tek değişiklik, sayının koda gömülmesi yerine limit değişkeni aracılığıyla gösterilen sayıyı belirtmektir. Web şablonunuzda yapmanız gereken güncellemeler şunlardır:

ÖNCE:

<!doctype html>
<html>
<head>
<title>VisitMe Example</title>
<body>

<h1>VisitMe example</h1>
<h3>Last 10 visits</h3>
<ul>
{% for visit in visits %}
    <li>{{ visit.timestamp.ctime() }} from {{ visit.visitor }}</li>
{% endfor %}
</ul>

SONRA:

<!doctype html>
<html>
<head>
<title>VisitMe Example</title>
<body>

<h1>VisitMe example</h1>

<h3>Top {{ limit }} visitors</h3>
<table border=1 cellspacing=0 cellpadding=2>
    <tr><th>Visitor</th><th>Visits</th></tr>
{% for count in counts %}
    <tr><td>{{ count.visitor|e }}</td><td align="center">{{ count.counter }}</td></tr>
{% endfor %}
</table>

<h3>Last {{ limit }} visits</h3>
<ul>
{% for visit in visits %}
    <li>{{ visit.timestamp.ctime() }} from {{ visit.visitor }}</li>
{% endfor %}
</ul>

Bu sayede, App Engine Görev Sırası pull görevlerinin kullanımını Modül 1 örnek uygulamasına ekleyerek gerekli değişiklikler tamamlanmıştır. Dizininiz artık Modül 18 örnek uygulamasını temsil etmektedir ve şu dosyaları içermelidir:

$ ls
README.md               appengine_config.py     queue.yaml              templates
app.yaml                main.py                 requirements.txt

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. Ziyaretçi sayılarını işlemek için çalışanı ayrı ayrı çalıştırın. Uygulama doğrulamasından sonra temizlik adımlarını uygulayın ve sonraki adımları değerlendirin.

Uygulamayı dağıtma ve doğrulama

gcloud app deploy queue.yaml ile bu codelab'in üst kısımlarında yaptığımız gibi, pull sıranızı önceden oluşturduğunuzdan emin olun. Bu işlem tamamlandıysa ve örnek uygulamanız kullanıma hazırsa uygulamanızı gcloud app deploy ile dağıtın. Çıkış, Modül 1 uygulamasıyla aynı olmalıdır. Tek fark, uygulamada "en çok ziyaretçi" içermesidir. üst tablosunda yer alır:

b667551dcbab1a09.png

Güncellenen web ön ucu en iyi ziyaretçileri ve en son ziyaretleri gösterirken, ziyaretçi sayılarının bu ziyareti içermediğini fark edin. Uygulama, işlenmeyi bekleyen bir görev olan pull sırasında bu ziyaretçinin sayısını artıran yeni bir görev atlarken önceki ziyaretçi sayılarını gösterir.

/log numaralı telefonu arayarak görevi çeşitli şekillerde yürütebilirsiniz:

Örneğin, /log hizmetine GET isteği göndermek için curl kullanıyorsanız PROJECT_ID sağladığınızda çıkışınız şu şekilde görünür:

$ curl https://PROJECT_ID.appspot.com/log
DONE (with 1 task[s] logging 1 visitor[s])

Güncellenen sayı, bir sonraki web sitesi ziyaretinde yansıtılır. İşte bu kadar.

App Engine Görev Sırası pull sırası hizmetinin kullanımını örnek uygulamaya başarıyla ekleyerek bu codelab'i tamamladığınız için tebrik ederiz. Artık Modül 19'da Cloud Pub/Sub, Cloud NDB ve Python 3'e geçiş yapabilirsiniz.

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

Bu "taşıma" işleminde, Ziyaretçi takibi için destek ekleyip Modül 18 örnek uygulamasını uygulayarak Modül 1 örnek uygulamasına Görev Sırası aktarma sırası kullanımını eklediniz. Bir sonraki taşıma işleminde App Engine pull görevlerini Cloud Pub/Sub'a yükselteceksiniz. 2021'in sonlarından itibaren, Python 3'e geçiş yapan kullanıcıların Cloud Pub/Sub'a geçiş yapması gerekmemektedir. Bu konuyla ilgili daha fazla bilgiyi bir sonraki bölümde bulabilirsiniz.

Cloud Pub/Sub'a geçiş yapmak için Modül 19 codelab'e bakın. Bunun dışında, Cloud Datastore, Cloud Memorystore, Cloud Storage veya Cloud Tasks (push sıraları) gibi ek taşıma işlemleri gerçekleştirilebilir. Ayrıca Cloud Run ve Cloud Functions'a ürünler arası taşıma işlemleri de yapılabilir. Tüm Sunucusuz Taşıma İstasyonu içeriklerine (codelab'ler, videolar, kaynak kodu [kullanılabilir olduğunda]) açık kaynak deposundan erişebilirsiniz.

7. Python 3'e taşıma

2021'in sonbaharında App Engine ekibi paket haline getirilmiş çoğu hizmetin desteğini genişletti. Bu destek, 1. nesil çalışma zamanına sahip 2. nesil çalışma zamanlarına kadar genişletildi. Sonuç olarak, uygulamanızı Python 3'e taşırken artık App Engine Görev Sırası gibi paket halinde sunulan hizmetlerden bağımsız Cloud'a veya Cloud Pub/Sub gibi üçüncü taraf hizmetlerine geçiş yapmanız gerekmiyor. Başka bir deyişle, yeni nesil çalışma zamanlarından paket hâlinde sunulan hizmetlere erişmek için kodu geri yüklediğiniz sürece Görev Sırası'nı Python 3 App Engine uygulamalarında kullanmaya devam edebilirsiniz.

Modül 17 codelab'de ve ilgili videoda, paketlenmiş hizmet kullanımının Python 3'e nasıl taşınacağı hakkında daha fazla bilgi edinebilirsiniz. Bu konu Modül 18'in kapsamı dışında olsa da, Python 3'e taşınan ve hâlâ App Engine NDB kullanan Modül 1 uygulamasının Python 3 sürümlerini aşağıda bulabilirsiniz. (Bir süre sonra Modül 18 uygulamasının Python 3 sürümü de kullanıma sunulacaktır.)

8. 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 18 (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. klonlayın veya bir ZIP dosyası indirin.

Codelab

Python 2

Python 3

1. Modül

kod

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

Modül 18 (bu codelab)

kod

Yok

Online referanslar

Aşağıda bu eğitimle alakalı kaynaklar verilmiştir:

App Engine Görev Sırası

App Engine platformu

App Engine belgeleri

Python 2 App Engine (standart ortam) çalışma zamanı

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)

Eski çalışma zamanları için uzun süreli destek

Belge taşıma örnekleri

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.