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.
Bu codelab'in amacı, Python 2 App Engine geliştiricilerine App Engine Memcache'ten Cloud Memorystore'a (Redis için) nasıl geçiş yapacaklarını göstermektir. App Engine ndb'den Cloud NDB'ye örtülü taşıma da vardır ancak bu taşıma daha çok 2. modülün codelab'inde ele alınır. Adım adım daha fazla bilgi için bu codelab'e göz atın.
Bu demoda aşağıdaki işlemleri yapmayı öğreneceksiniz:
- Cloud Memorystore örneği oluşturma (Cloud Console veya
gcloudaracından) - Cloud Sunucusuz VPC Erişimi bağlayıcısı oluşturma (Cloud Console'dan veya
gcloudaracından) - App Engine Memcache'ten Cloud Memorystore'a taşıma
- Örnek bir uygulamada Cloud Memorystore ile önbelleğe alma özelliğini uygulama
- App Engine'den
ndbCloud NDB'ye taşıma
İhtiyacınız olanlar
- Etkin bir faturalandırma hesabına sahip bir Google Cloud projesi (Bu, ücretsiz bir codelab değildir.)
- Temel Python becerileri
- Yaygın Linux komutları hakkında çalışma bilgisi
- App Engine uygulamalarını geliştirme ve dağıtma hakkında temel bilgiler
- Çalışan bir 12. Modül App Engine uygulaması (12. Modül codelab'ini [önerilir] tamamlayın veya depodan 12. Modül uygulamasını kopyalayın)
Anket
Bu eğitimi nasıl kullanacaksınız?
Python ile ilgili deneyiminizi nasıl değerlendirirsiniz?
Google Cloud hizmetlerini kullanma deneyiminizi nasıl değerlendirirsiniz?
2. Arka plan
Bu codelab'de, örnek bir uygulamanın App Engine Memcache (ve NDB) hizmetinden Cloud Memorystore (ve Cloud NDB) hizmetine nasıl taşınacağı gösterilmektedir. Bu işlem, App Engine paketlenmiş hizmetlerine yönelik bağımlılıkların değiştirilmesini içerir ve uygulamalarınızı daha taşınabilir hale getirir. App Engine'de kalmayı veya daha önce açıklanan alternatiflerden birine geçmeyi seçebilirsiniz.
Bu taşıma işlemi, bu serideki diğer taşıma işlemlerine kıyasla daha fazla çaba gerektirir. App Engine Memcache'in yerine kullanılması önerilen ürün, tümüyle yönetilen bulut tabanlı bir önbelleğe alma hizmeti olan Cloud Memorystore'dur. Memorystore, popüler açık kaynaklı iki önbelleğe alma motoru olan Redis ve Memcached'i destekler. Bu taşıma modülünde Redis için Cloud Memorystore kullanılır. Daha fazla bilgiyi Memorystore ve Redis'e genel bakış başlıklı makalede bulabilirsiniz.
Memorystore'un çalışır durumda bir sunucu gerektirmesi nedeniyle Cloud VPC de gereklidir. Özellikle, App Engine uygulamasının özel IP adresi üzerinden Memorystore örneğine bağlanabilmesi için bir Sunucusuz VPC Erişimi bağlayıcısı oluşturulmalıdır. Bu alıştırmayı tamamladığınızda uygulamayı güncelleyerek eskisi gibi çalışmasını sağlayacak ancak App Engine'in Memcache hizmetinin yerini Cloud Memorystore'un önbelleğe alma hizmeti alacak.
Bu eğitim, Python 2'deki 12. Modül örnek uygulaması ile başlar ve Python 3'e isteğe bağlı olarak küçük bir yükseltme ile devam eder. Python 3 App Engine SDK aracılığıyla Python 3'ten App Engine paketlenmiş hizmetlerine erişme konusunda bilginiz varsa bunun yerine 12. Modül örnek uygulamasının Python 3 sürümü ile başlayabilirsiniz. Bunu yaptığınızda, Memorystore App Engine'e dahil bir hizmet olmadığı için SDK'nın kullanımı kaldırılır. Python 3 App Engine SDK'yı kullanmayı öğrenmek bu eğitimin kapsamı dışındadır.
Bu eğitimde aşağıdaki temel adımlar yer almaktadır:
- Kurulum/ön hazırlık
- Önbelleğe alma hizmetlerini ayarlama
- Yapılandırma dosyalarını güncelleme
- Ana uygulamayı güncelleme
3. Kurulum/ön hazırlık
Cloud projesini hazırlama
12. modülün codelab'ini tamamlarken kullandığınız projeyi yeniden kullanmanızı öneririz. Alternatif olarak, yepyeni bir proje oluşturabilir veya mevcut başka bir projeyi yeniden kullanabilirsiniz. Bu serideki her codelab'de "BAŞLANGIÇ" (başlangıç için temel kod) ve "BİTİŞ" (taşınan uygulama) bulunur. Sorun yaşamanız durumunda çözümlerinizi bizimkilerle karşılaştırabilmeniz için FINISH kodu sağlanır. Herhangi bir sorun olursa her zaman START'a geri dönebilirsiniz. Bu kontrol noktaları, taşıma işlemlerini nasıl yapacağınızı öğrenirken başarılı olmanızı sağlamak için tasarlanmıştır.
Hangi Cloud projesini kullanırsanız kullanın, etkin bir faturalandırma hesabına sahip olduğundan emin olun. Ayrıca App Engine'in etkinleştirildiğinden emin olun. Bu eğitimleri uygulamanın genel maliyet etkilerini inceleyin ve anladığınızdan emin olun. Ancak bu serideki diğerlerinden farklı olarak bu codelab'de Ücretsiz Katmanı olmayan Cloud kaynakları kullanılmaktadır. Bu nedenle, alıştırmayı tamamlamak için bazı maliyetler oluşacaktır. Daha ayrıntılı maliyet bilgileri, kullanımın azaltılmasına yönelik önerilerle birlikte sağlanır. Bu önerilerin sonunda, faturalandırma ücretlerini en aza indirmek için kaynakların serbest bırakılmasıyla ilgili talimatlar yer alır.
Temel örnek uygulamayı edinme
Bu codelab, 12. modülün temel kodundan BAŞLAYARAK taşıma adımında size adım adım yol gösterir. Tamamlandığında, FINISH klasörlerinden birindeki koda çok benzeyen, çalışan bir 13. Modül uygulamasına ulaşırsınız. Bu kaynaklar:
- BAŞLANGIÇ: 12. Modül Python 2 (
mod12) veya Python 3 (mod12b) uygulaması - TAMAMLA: Modül 13 Python 2 (
mod13a) veya Python 3 (mod13b) uygulaması - Taşıma deposunun tamamı (klonlayın veya ZIP olarak indirin)
BAŞLANGIÇ klasörü aşağıdaki dosyaları içermelidir:
$ ls README.md app.yaml main.py requirements.txt templates
Python 2 sürümünden başlıyorsanız appengine_config.py dosyası ve 12. modülün codelab'ini tamamladıysanız muhtemelen bir lib klasörü de bulunur.
12. Modül uygulamasını (yeniden) dağıtma
Kalan ön hazırlık adımlarınız:
- Gerekirse
gcloudkomut satırı aracı hakkında tekrar bilgi edinin. - 12. Modül kodunu App Engine'e yeniden dağıtın (gerekirse).
Python 2 kullanıcıları, aşağıdaki komutlarla lib klasörünü silip yeniden yüklemelidir:
rm -rf ./lib; pip install -t lib -r requirements.txt
Artık herkes (Python 2 ve 3 kullanıcıları) kodu App Engine'e şu komutla yüklemelidir:
gcloud app deploy
Başarıyla dağıtıldıktan sonra, uygulamanın 12. modüldeki uygulamaya (ziyaretleri izleyen ve aynı kullanıcı için bir saat boyunca önbelleğe alan bir web uygulaması) benzediğini ve aynı şekilde çalıştığını doğrulayın:

En son ziyaretler önbelleğe alındığından sayfa yenilemeleri oldukça hızlı yüklenir.
4. Önbelleğe alma hizmetlerini ayarlama
Cloud Memorystore, sunucusuz değildir. Bir örnek gereklidir. Bu durumda, Redis çalıştıran bir örnek. Memcache'in aksine Memorystore bağımsız bir Cloud ürünüdür ve Ücretsiz Katmanı yoktur. Bu nedenle, devam etmeden önce Redis için Memorystore fiyatlandırma bilgilerini kontrol ettiğinizden emin olun. Bu alıştırmanın maliyetini en aza indirmek için en az miktarda kaynak kullanmanızı öneririz: Basic hizmet katmanı ve 1 GB kapasite.
Memorystore örneği, App Engine uygulamanızdan (örnekler) farklı bir ağda bulunur. Bu nedenle, App Engine'in Memorystore kaynaklarınıza erişebilmesi için Sunucusuz VPC Erişimi bağlayıcısı oluşturulması gerekir. VPC maliyetlerini en aza indirmek için örnek türünü (f1-micro) ve istenilecek en az sayıda örneği (minimum 2, maksimum 3 öneririz) seçin. Ayrıca VPC fiyatlandırma bilgileri sayfasına da göz atın.
Gerekli her kaynağı oluşturma sürecinde size rehberlik ederken maliyetleri düşürmeyle ilgili bu önerileri tekrarlayacağız. Ayrıca, Cloud Console'da Memorystore ve VPC kaynakları oluşturduğunuzda her ürünün fiyatlandırma hesaplayıcısını sağ üst köşede görürsünüz. Bu hesaplayıcı, size aylık maliyet tahmini sunar (aşağıdaki resmi inceleyin). Seçeneklerinizi değiştirirseniz bu değerler otomatik olarak ayarlanır. Aşağıdakine benzer bir sonuç görmeniz gerekir:

Her iki kaynak da gereklidir ve hangisini önce oluşturduğunuzun bir önemi yoktur. Önce Memorystore örneğini oluşturursanız App Engine uygulamanız VPC bağlayıcısı olmadan bu örneğe ulaşamaz. Benzer şekilde, önce VPC bağlayıcısını oluşturursanız App Engine uygulamanızın iletişim kurabileceği bir şey olmaz. Bu eğitimde önce Memorystore örneğini, ardından VPC bağlayıcısını oluşturursunuz.
Her iki kaynak da çevrimiçi olduğunda, uygulamanızın önbelleğe erişebilmesi için app.yaml'ya ilgili bilgileri ekleyeceksiniz. Resmi belgelerdeki Python 2 veya Python 3 kılavuzlarına da başvurabilirsiniz. Cloud NDB taşıma sayfasındaki ( Python 2 veya Python 3) veri önbelleğe alma kılavuzuna da göz atabilirsiniz.
Cloud Memorystore örneği oluşturma
Cloud Memorystore'un ücretsiz katmanı olmadığından codelab'i tamamlamak için en az miktarda kaynak ayırmanızı öneririz. Aşağıdaki ayarları kullanarak maliyetleri en aza indirebilirsiniz:
- En düşük hizmet katmanını seçin: Basic (Temel) (konsol varsayılanı: "Standard" (Standart),
gcloudvarsayılanı: "Basic" (Temel)). - En az depolama alanını seçin: 1 GB (konsol varsayılanı: 16 GB,
gcloudvarsayılanı: 1 GB). - Genellikle herhangi bir yazılımın en yeni sürümleri en fazla kaynağı gerektirir ancak en eski sürümü seçmek de muhtemelen önerilmez. Şu anda en son sürümden bir önceki sürüm Redis sürümü 5.0'dır (konsol varsayılanı: 6.x).
Bu ayarları göz önünde bulundurarak, bir sonraki bölümde Cloud Console'dan örneği oluşturma adımları açıklanacaktır. Bu işlemi komut satırından yapmayı tercih ediyorsanız sonraki bölüme geçin.
Cloud Console'dan
Cloud Console'da Cloud Memorystore sayfasına gidin (fatura bilgileri istenebilir). Memorystore'u henüz etkinleştirmediyseniz bunu yapmanız istenir:

Etkinleştirdikten sonra (ve muhtemelen faturalandırmayla birlikte) Memorystore kontrol paneline yönlendirilirsiniz. Projenizde oluşturulan tüm örnekleri burada görebilirsiniz. Aşağıda gösterilen projede satır yok. Bu nedenle "Gösterilecek satır yok" mesajını görüyorsunuz. Memorystore örneği oluşturmak için üst kısımdaki Örnek oluştur'u tıklayın:

Bu sayfada, Memorystore örneğini oluşturmak için istediğiniz ayarlarla doldurabileceğiniz bir form bulunur:

Bu eğitim ve örnek uygulamasının maliyetini düşük tutmak için daha önce ele alınan önerileri uygulayın. Seçimlerinizi yaptıktan sonra Oluştur'u tıklayın. Oluşturma işlemi birkaç dakika sürer. İşlem tamamlandığında app.yaml'ya eklemek için örneğin IP adresini ve bağlantı noktası numarasını kopyalayın.
Komut satırından
Memorystore örneklerini Cloud Console'dan oluşturmak görsel olarak bilgilendirici olsa da bazı kullanıcılar komut satırını tercih eder. Devam etmeden önce gcloud yüklendiğinden ve başlatıldığından emin olun.
Cloud Console'da olduğu gibi Redis için Cloud Memorystore da etkinleştirilmelidir. gcloud services enable redis.googleapis.com komutunu verin ve tamamlanmasını bekleyin. Örneğin:
$ gcloud services enable redis.googleapis.com Operation "operations/acat.p2-aaa-bbb-ccc-ddd-eee-ffffff" finished successfully.
Hizmet zaten etkinleştirilmişse komutu (tekrar) çalıştırmanın (olumsuz) bir yan etkisi yoktur. Hizmet etkinleştirildikten sonra Memorystore örneği oluşturalım. Bu komut şu şekilde görünür:
gcloud redis instances create NAME --redis-version VERSION \
--region REGION --project PROJECT_ID
Memorystore örneğiniz için bir ad seçin. Bu laboratuvarda ad olarak "demo-ms" ve proje kimliği olarak "my-project" kullanılır. Bu örnek uygulamanın bölgesi us-central1'dir (us-central ile aynı). Ancak gecikme bir sorunsa size daha yakın bir bölge kullanabilirsiniz. App Engine uygulamanızla aynı bölgeyi seçmeniz gerekir. Tercih ettiğiniz herhangi bir Redis sürümünü seçebilirsiniz ancak daha önce önerildiği gibi 5. sürümü kullanıyoruz. Bu ayarlara göre, vereceğiniz komut (ilişkili çıkışla birlikte) şudur:
$ gcloud redis instances create demo-ms --region us-central1 \
--redis-version redis_5_0 --project my-project
Create request issued for: [demo-ms]
Waiting for operation [projects/my-project/locations/us-central1/operations/operation-xxxx] to complete...done.
Created instance [demo-ms].
Cloud Console'un varsayılan ayarlarının aksine, gcloud varsayılan olarak minimum kaynakları kullanır. Sonuç olarak, bu komutta ne hizmet katmanı ne de depolama alanı miktarı gerekliydi. Memorystore örneği oluşturmak birkaç dakika sürer. İşlem tamamlandığında örneğin IP adresini ve bağlantı noktası numarasını not edin. Bu bilgiler kısa süre içinde app.yaml'ye eklenecektir.
Örneğin oluşturulduğunu onaylayın
Cloud Console veya komut satırından
Örneğinizi Cloud Console'dan veya komut satırından oluşturmuş olsanız da, aşağıdaki komutla kullanılabilir ve kullanıma hazır olduğunu doğrulayabilirsiniz: gcloud redis instances list --region REGION
us-central1 bölgesindeki örnekleri kontrol etme komutunu ve yeni oluşturduğumuz örneği gösteren beklenen çıkışı aşağıda bulabilirsiniz:
$ gcloud redis instances list --region us-central1 INSTANCE_NAME VERSION REGION TIER SIZE_GB HOST PORT NETWORK RESERVED_IP STATUS CREATE_TIME demo-ms REDIS_5_0 us-central1 BASIC 1 10.aa.bb.cc 6379 default 10.aa.bb.dd/29 READY 2022-01-28T09:24:45
Örnek bilgileri istendiğinde veya uygulamanızı yapılandırmanız gerektiğinde HOST ve PORT karakterlerini kullandığınızdan emin olun (RESERVED_IP kullanmayın). Cloud Console'daki Cloud Memorystore kontrol panelinde artık bu örnek gösterilmelidir:

Compute Engine sanal makinesinden
Compute Engine sanal makineniz (VM) varsa Memorystore örneğinize doğrudan VM'den komut göndererek çalıştığını da doğrulayabilirsiniz. Bir sanal makinenin kullanımı, halihazırda kullandığınız kaynaklardan bağımsız olarak maliyetlere neden olabilir.
Sunucusuz VPC Erişimi bağlayıcısı oluşturma
Cloud Memorystore'da olduğu gibi, sunucusuz Cloud VPC bağlayıcısını Cloud Console'da veya komut satırında oluşturabilirsiniz. Benzer şekilde, Cloud VPC'nin ücretsiz katmanı yoktur. Bu nedenle, maliyetleri en aza indirmek için codelab'i tamamlamak üzere en az miktarda kaynak ayırmanızı öneririz. Bu, aşağıdaki ayarlarla yapılabilir:
- En düşük maksimum örnek sayısını seçin: 3 (konsol ve
gcloudvarsayılan: 10) - En düşük maliyetli makine türünü seçin:
f1-micro(konsol varsayılanı:e2-micro,gcloudvarsayılanı yok)
Sonraki bölümde, yukarıdaki Cloud VPC ayarlarını kullanarak Cloud Console'dan bağlayıcı oluşturma adımları açıklanmaktadır. İşlemi komut satırından yapmayı tercih ediyorsanız bir sonraki bölüme geçin.
Cloud Console'dan
Cloud Console'da Cloud Networking "Sunucusuz VPC Erişimi" sayfasına gidin (fatura bilgileri istenebilir). API'yi henüz etkinleştirmediyseniz etkinleştirmeniz istenir:

API'yi (ve muhtemelen faturalandırmayı) etkinleştirdikten sonra, oluşturulan tüm VPC bağlayıcılarını gösteren kontrol paneline yönlendirilirsiniz. Aşağıdaki ekran görüntüsünde kullanılan projede herhangi bir satır bulunmadığı için "Gösterilecek satır yok" mesajı gösteriliyor. Konsolunuzda üst taraftaki Bağlayıcı Oluştur'u tıklayın:

Formu istediğiniz ayarlarla doldurun:

Kendi uygulamalarınız için uygun ayarları seçin. Bu eğitim ve minimum ihtiyaçlara sahip örnek uygulaması için maliyetleri en aza indirmek mantıklıdır. Bu nedenle, daha önce ele alınan önerilere uyun. Seçimlerinizi yaptıktan sonra Oluştur'u tıklayın. VPC bağlayıcısının sağlanması birkaç dakika sürer.
Komut satırından
VPC bağlayıcısı oluşturmadan önce Sunucusuz VPC Erişimi API'sini etkinleştirin. Aşağıdaki komutu verdikten sonra benzer bir çıkış görmeniz gerekir:
$ gcloud services enable vpcaccess.googleapis.com Operation "operations/acf.p2-aaa-bbb-ccc-ddd-eee-ffffff" finished successfully.
API etkinleştirildiğinde, şu komuta benzer bir komutla VPC bağlayıcı oluşturulur:
gcloud compute networks vpc-access connectors create CONNECTOR_NAME \
--range 10.8.0.0/28 --region REGION --project PROJECT_ID
Bağlayıcınız için bir ad ve kullanılmayan bir /28 CIDR blok başlangıç IP adresi seçin. Bu eğitimde aşağıdaki varsayımlar yapılmıştır:
- Proje kimliği:
my-project - VPC bağlayıcısı adı:
demo-vpc - Minimum örnek sayısı: 2 (varsayılan) ve maksimum örnek sayısı: 3
- Örnek türü:
f1-micro - Bölge:
us-central1 - IPv4 CIDR bloku:
10.8.0.0/28(bulut konsolunda önerildiği gibi)
Aşağıdaki komutu yukarıdaki varsayımları göz önünde bulundurarak yürütürseniz aşağıdakine benzer bir çıktı alırsınız:
$ gcloud compute networks vpc-access connectors create demo-vpc \
--max-instances 3 --range 10.8.0.0/28 --machine-type f1-micro \
--region us-central1 --project my-project
Create request issued for: [demo-vpc]
Waiting for operation [projects/my-project/locations/us-central1/operations/xxx] to complete...done.
Created connector [demo-vpc].
Yukarıdaki komutta, 2 minimum örnek sayısı ve default adlı bir ağ gibi varsayılan değerler belirtilmemiştir. VPC bağlayıcısı oluşturma işlemi birkaç dakika sürer.
Bağlayıcının oluşturulduğunu onaylayın
İşlem tamamlandıktan sonra, oluşturulduğunu ve kullanıma hazır olduğunu onaylamak için aşağıdaki gcloud komutunu verin (bölgenin us-central1 olduğu varsayılır):
$ gcloud compute networks vpc-access connectors list --region us-central1 CONNECTOR_ID REGION NETWORK IP_CIDR_RANGE SUBNET SUBNET_PROJECT MIN_THROUGHPUT MAX_THROUGHPUT STATE demo-vpc us-central1 default 10.8.0.0/28 200 300 READY
Benzer şekilde, kontrol panelinde yeni oluşturduğunuz bağlayıcı gösterilmelidir:

Cloud projesi kimliğini, VPC bağlayıcısı adını ve bölgeyi not edin.
Gerekli ek Cloud kaynaklarını komut satırından veya konsolda oluşturduğunuza göre artık uygulama yapılandırmasını bu kaynakların kullanımını destekleyecek şekilde güncelleme zamanı.
5. Yapılandırma dosyalarını güncelleme
İlk adım, yapılandırma dosyalarında gerekli tüm güncellemeleri yapmaktır. Bu codelab'in temel amacı, Python 2 kullanıcılarının geçiş yapmasına yardımcı olmaktır. Ancak bu içerik genellikle aşağıdaki her bölümde Python 3'e daha fazla taşıma hakkında bilgilerle devam eder.
requirements.txt
Bu bölümde, Cloud Memorystore ve Cloud NDB'yi desteklemek için paketler ekliyoruz. Redis için Cloud Memorystore'da, Cloud Memorystore istemci kitaplığı olmadığından Python için standart Redis istemcisini (redis) kullanmak yeterlidir. redis ve google-cloud-ndb alanlarını requirements.txt listesine ekleyin. flask alanını 12. modülden birleştirin:
flask
redis
google-cloud-ndb
Bu requirements.txt dosyasında sürüm numaraları yer almaz. Bu nedenle, en son sürümler seçilir. Uyumsuzluklar ortaya çıkarsa çalışan sürümleri sabitlemek için sürüm numaralarını belirtin.
app.yaml
Eklenecek yeni bölümler
Python 2 App Engine çalışma zamanı, Cloud NDB gibi Cloud API'leri kullanırken grpcio ve setuptools gibi belirli üçüncü taraf paketleri gerektirir. Python 2 kullanıcıları, app.yaml içinde kullanılabilir bir sürümle birlikte bu gibi yerleşik kitaplıkları listelemelidir. Henüz bir libraries bölümünüz yoksa bir tane oluşturun ve her iki kitaplığı aşağıdaki gibi ekleyin:
libraries:
- name: grpcio
version: latest
- name: setuptools
version: latest
Uygulamanızı taşırken libraries bölümü zaten mevcut olabilir. Bu durumda, grpcio ve setuptools değerlerinden biri eksikse bunları mevcut libraries bölümünüze eklemeniz yeterlidir.
Ardından, örnek uygulamamızın Cloud Memorystore örneği ve VPC bağlayıcı bilgilerine ihtiyacı vardır. Bu nedenle, hangi Python çalışma zamanını kullandığınıza bakılmaksızın app.yaml dosyasına aşağıdaki iki yeni bölümü ekleyin:
env_variables:
REDIS_HOST: 'YOUR_REDIS_HOST'
REDIS_PORT: 'YOUR_REDIS_PORT'
vpc_access_connector:
name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR
Zorunlu güncellemeler bu kadar. Güncellenen app.yaml artık aşağıdaki gibi görünmelidir:
runtime: python27
threadsafe: yes
api_version: 1
handlers:
- url: /.*
script: main.app
libraries:
- name: grpcio
version: 1.0.0
- name: setuptools
version: 36.6.0
env_variables:
REDIS_HOST: 'YOUR_REDIS_HOST'
REDIS_PORT: 'YOUR_REDIS_PORT'
vpc_access_connector:
name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR
Aşağıda, app.yaml için uygulamanız gereken güncellemeleri gösteren bir "önce ve sonra" örneği verilmiştir:

*Python 3 farklılıkları
Bu bölüm isteğe bağlıdır ve yalnızca Python 3'e taşıyorsanız gereklidir. Bunun için Python 2 yapılandırmanızda çeşitli değişiklikler yapmanız gerekir. Şu anda yükseltme yapmıyorsanız bu bölümü atlayın.
Python 3 çalışma zamanı için threadsafe veya api_version kullanılmaz. Bu nedenle, her iki ayarı da silin. En yeni App Engine çalışma zamanı, yerleşik üçüncü taraf kitaplıkları ve yerleşik olmayan kitaplıkların kopyalanmasını desteklemez. Üçüncü taraf paketleri için tek şart, bunların requirements.txt içinde listelenmesidir. Bu nedenle, app.yaml'nin libraries bölümünün tamamı silinebilir.
Ayrıca, Python 3 çalışma zamanı kendi yönlendirmesini yapan web çerçevelerinin kullanılmasını gerektirir. Bu nedenle, 1. modülde geliştiricilere webp2'den Flask'e nasıl geçiş yapacaklarını gösterdik. Bu nedenle, tüm komut dosyası işleyicileri auto olarak değiştirilmelidir. Bu uygulama herhangi bir statik dosya sunmadığından işleyicilerin listelenmesi "anlamsızdır" (hepsi auto olduğundan). Bu nedenle, handlers bölümünün tamamı da kaldırılabilir. Sonuç olarak, Python 3 için ayarlanmış yeni, kısaltılmış app.yaml şu şekilde kısaltılmalıdır:
runtime: python39
env_variables:
REDIS_HOST: 'YOUR_REDIS_HOST'
REDIS_PORT: 'YOUR_REDIS_PORT'
vpc_access_connector:
name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR
Python 3'e taşırken app.yaml'daki farklılıkları özetleme:
threadsafeveapi_versionayarlarını silmelibrariesbölümünü silmehandlersbölümünü (veya uygulamanız statik dosyalar sunuyorsa yalnızcascriptişleyicilerini) silin.
Değerleri değiştirme
Memorystore ve VPC bağlayıcısı için yeni bölümlerdeki değerler yalnızca yer tutucudur. Büyük harfle yazılmış bu değerleri (YOUR_REDIS_HOST, YOUR_REDIS_PORT, PROJECT_ID, REGION, CONNECTOR_NAME) daha önce bu kaynakları oluşturduğunuzda kaydedilen değerlerle değiştirin. Memorystore örneğinizle ilgili olarak HOST (RESERVED_IP değil) ve PORT kullandığınızdan emin olun. HOST ve PORT değerlerini almak için hızlı bir komut satırı yöntemi aşağıda verilmiştir. Bu yöntemde, örnek adının demo-ms olduğu ve REGION değerinin us-central1 olduğu varsayılmaktadır:
$ gcloud redis instances describe demo-ms --region us-central1 \
--format "value(host,port)"
10.251.161.51 6379
Örnek Redis örneğimizin IP adresi 10.10.10.10 ise, us-central1 bölgesinde bulunan my-project projemizde 6379 bağlantı noktasını kullanıyorsa ve VPC bağlayıcısının adı demo-vpc ise app.yaml içindeki bu bölümler şu şekilde görünür:
env_variables:
REDIS_HOST: '10.10.10.10'
REDIS_PORT: '6379'
vpc_access_connector:
name: projects/my-project/locations/us-central1/connectors/demo-vpc
appengine_config.py dosyasını oluşturma veya güncelleme
Yerleşik üçüncü taraf kitaplıkları için destek ekleme
Daha önce app.yaml ile yaptığımız gibi, grpcio ve setuptools kitaplıklarının kullanımını ekleyin. Dahili üçüncü taraf kitaplıklarını desteklemek için appengine_config.py öğesini değiştirin. Bu durum size tanıdık geliyorsa bunun nedeni, 2. modülde App Engine ndb'den Cloud NDB'ye geçiş yaparken de bu işlemin gerekli olmasıdır. Gerekli değişiklik, lib klasörünü setuptools.pkg_resources çalışma kümesine eklemektir:

*Python 3 farklılıkları
Bu bölüm isteğe bağlıdır ve yalnızca Python 3'e taşıyorsanız gereklidir. App Engine 2. nesil değişikliklerinden biri, app.yaml içinde yerleşik olmayan üçüncü taraf paketlerinin kopyalanmasının (bazen "vendoring" olarak da adlandırılır) ve yerleşik üçüncü taraf paketlerine referans verilmesinin artık gerekli olmamasıdır. Bu, appengine_config.py dosyasının tamamını silebileceğiniz anlamına gelir.
6. Uygulama dosyalarını güncelleme
Yalnızca bir uygulama dosyası (main.py) olduğundan bu bölümdeki tüm değişiklikler yalnızca bu dosyayı etkiler. Bu uygulamayı Cloud Memorystore'a taşımak için yapacağımız değişikliklerin resimli bir gösterimini paylaştık. Yalnızca örnek amaçlıdır ve yakından incelemeniz için değildir. Tüm çalışma, kodda yaptığımız değişikliklerle ilgilidir.

En üstten başlayarak bu bölümleri tek tek inceleyelim.
İçe aktarma işlemlerini güncelleme
12. Modül'deki main.py için içe aktarma bölümünde Cloud NDB ve Cloud Tasks kullanılır. Bunların içe aktarma işlemleri aşağıda verilmiştir:
ÖNCESİ:
from flask import Flask, render_template, request
from google.appengine.api import memcache
from google.appengine.ext import ndb
Memorystore'a geçiş için ortam değişkenlerinin okunması gerekir. Bu nedenle, Python Redis istemcisi olan redis'nin yanı sıra Python os modülüne de ihtiyacımız var. Redis, Python nesnelerini önbelleğe alamadığından en son ziyaretler listesini pickle kullanarak sıralayın. Bu nedenle, bunu da içe aktarın. Memcache'in bir avantajı, nesne serileştirmenin otomatik olarak gerçekleşmesidir. Memorystore ise biraz daha "kendin yap" tarzındadır. Son olarak, google.appengine.ext.ndb yerine google.cloud.ndb yazarak App Engine ndb sürümünden Cloud NDB'ye yükseltin. Bu değişikliklerden sonra içe aktarmalarınız aşağıdaki gibi görünmelidir:
SONRASI:
import os
import pickle
from flask import Flask, render_template, request
from google.cloud import ndb
import redis
Başlatmayı güncelleme
12. modülün başlatılması, Flask uygulama nesnesi app oluşturmaktan ve bir saatlik önbelleğe alma için sabit ayarlamaktan oluşur:
ÖNCE:
app = Flask(__name__)
HOUR = 3600
Cloud API'lerinin kullanılması için bir istemci gerekir. Bu nedenle, Flask'tan hemen sonra bir Cloud NDB istemcisi oluşturun. Ardından, app.yaml bölümünde ayarladığınız ortam değişkenlerinden Memorystore örneğinin IP adresini ve bağlantı noktası numarasını alın. Bu bilgilerle donatılmış olarak bir Redis istemcisi oluşturun. Bu güncellemelerden sonra kodunuz şu şekilde görünür:
SONRASI:
app = Flask(__name__)
ds_client = ndb.Client()
HOUR = 3600
REDIS_HOST = os.environ.get('REDIS_HOST', 'localhost')
REDIS_PORT = os.environ.get('REDIS_PORT', '6379')
REDIS = redis.Redis(host=REDIS_HOST, port=REDIS_PORT)
*Python 3'e taşıma
Bu bölüm isteğe bağlıdır ve Modül 12 uygulamasının Python 3 sürümünden başlıyorsanız geçerlidir. Bu durumda, içe aktarmalar ve başlatma ile ilgili birkaç zorunlu değişiklik vardır.
İlk olarak, Memcache bir App Engine paketlenmiş hizmeti olduğundan Python 3 uygulamasında kullanılması için App Engine SDK'sı gerekir. Özellikle WSGI uygulamasının (diğer gerekli yapılandırmanın yanı sıra) sarmalanması gerekir:
ÖNCESİ:
from flask import Flask, render_template, request
from google.appengine.api import memcache, wrap_wsgi_app
from google.appengine.ext import ndb
app = Flask(__name__)
app.wsgi_app = wrap_wsgi_app(app.wsgi_app)
HOUR = 3600
Cloud Memorystore'a (Memcache gibi App Engine'e dahil bir hizmet değildir) geçiş yaptığımız için SDK kullanımı kaldırılmalıdır. Bu işlem basittir. memcache ve wrap_wsgi_app öğelerini içe aktaran satırın tamamını silmeniz yeterlidir. wrap_wsgi_app() işlevini çağıran satırı da silin. Bu güncellemeler, uygulamanın bu bölümünü (aslında uygulamanın tamamını) Python 2 sürümüyle aynı bırakır.
SONRASI:
import os
import pickle
from flask import Flask, render_template, request
from google.cloud import ndb
import redis
app = Flask(__name__)
ds_client = ndb.Client()
HOUR = 3600
REDIS_HOST = os.environ.get('REDIS_HOST', 'localhost')
REDIS_PORT = os.environ.get('REDIS_PORT', '6379')
REDIS = redis.Redis(host=REDIS_HOST, port=REDIS_PORT)
Son olarak, SDK kullanımını app.yaml (app_engine_apis: true satırını silin) ve requirements.txt (appengine-python-standard satırını silin) öğelerinden kaldırın.
Cloud Memorystore'a (ve Cloud NDB'ye) taşıma
Cloud NDB'nin veri modeli, App Engine ndb ile uyumlu olacak şekilde tasarlanmıştır. Bu nedenle, Visit nesnelerinin tanımı aynı kalır. 2. Modül'deki Cloud NDB'ye taşıma işlemine benzer şekilde, store_visit() ve fetch_visits() içindeki tüm Datastore çağrıları, Cloud NDB bağlam yöneticisinin kullanılması gerektiğinden yeni bir with bloğunda artırılır ve yerleştirilir. Değişiklikten önceki aramalar:
ÖNCESİ:
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)
Her iki işleve de bir with ds_client.context() bloğu ekleyin ve Datastore çağrılarını bu bloğun içine (girintili olarak) yerleştirin. Bu durumda, görüşmelerin kendisinde herhangi bir değişiklik yapılması gerekmez:
SONRASI:
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()
def fetch_visits(limit):
'get most recent visits'
with ds_client.context():
return Visit.query().order(-Visit.timestamp).fetch(limit)
Ardından, önbelleğe alma değişikliklerine bakalım. 12. modüldeki main() işlevi:
ÖNCESİ:
@app.route('/')
def root():
'main application (GET) handler'
# check for (hour-)cached visits
ip_addr, usr_agt = request.remote_addr, request.user_agent
visitor = '{}: {}'.format(ip_addr, usr_agt)
visits = memcache.get('visits')
# register visit & run DB query if cache empty or new visitor
if not visits or visits[0].visitor != visitor:
store_visit(ip_addr, usr_agt)
visits = list(fetch_visits(10))
memcache.set('visits', visits, HOUR) # set() not add()
return render_template('index.html', visits=visits)
Redis'te, Memcache'te olduğu gibi "get" ve "set" çağrıları vardır. Tek yapmamız gereken ilgili istemci kitaplıklarını değiştirmek, değil mi? Çok yaklaştınız. Daha önce de belirtildiği gibi, Redis ile Python listesini önbelleğe alamayız (önce serileştirilmesi gerekir. Bu işlem Memcache tarafından otomatik olarak yapılır). Bu nedenle, set() çağrısında ziyaretleri pickle.dumps() ile dizeye dönüştürün. Benzer şekilde, ziyaretleri önbellekten alırken get() işleminden hemen sonra pickle.loads() ile pickle'ı kaldırmanız gerekir. Bu değişiklikler uygulandıktan sonraki ana işleyici:
SONRASI:
@app.route('/')
def root():
'main application (GET) handler'
# check for (hour-)cached visits
ip_addr, usr_agt = request.remote_addr, request.user_agent
visitor = '{}: {}'.format(ip_addr, usr_agt)
rsp = REDIS.get('visits')
visits = pickle.loads(rsp) if rsp else None
# register visit & run DB query if cache empty or new visitor
if not visits or visits[0].visitor != visitor:
store_visit(ip_addr, usr_agt)
visits = list(fetch_visits(10))
REDIS.set('visits', pickle.dumps(visits), ex=HOUR)
return render_template('index.html', visits=visits)
Bu, örnek uygulamanın Memcache kullanımını Cloud Memorystore'a dönüştürmek için main.py'da yapılması gereken değişiklikleri tamamlar. HTML şablonu ve Python 3'e taşıma hakkında ne söylenebilir?
HTML şablon dosyasını güncelleyip Python 3'e taşıyabilir miyim?
Sürpriz! Uygulama, kod değişikliği veya uyumluluk kitaplığı olmadan hem Python 2 hem de 3'te çalışacak şekilde tasarlandığı için burada yapmanız gereken bir işlem yoktur. main.py seçeneğini görürsünüz. mod13a (2.x) ve mod13b (3.x) "FINISH" klasörlerinde aynı olmalıdır. Sürüm numaralarındaki farklılıklar (kullanılıyorsa) dışında requirements.txt için de aynı durum geçerlidir. Kullanıcı arayüzü değişmediğinden templates/index.html ile ilgili herhangi bir güncelleme de yapılmaz.
Bu uygulamayı Python 3 App Engine'de çalıştırmak için gereken her şey yapılandırmada tamamlandı: Gereksiz yönergeler app.yaml dosyasından kaldırıldı ve hem appengine_config.py hem de lib klasörü Python 3'te kullanılmadıkları için silindi.
7. Ö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
Son kontrol her zaman örnek uygulamayı dağıtmaktır. Python 2 geliştiricileri: Aşağıdaki komutlarla lib öğesini silip yeniden yükleyin. (Sisteminizde hem Python 2 hem de 3 yüklüyse bunun yerine pip2 komutunu açıkça çalıştırmanız gerekebilir.)
rm -rf ./lib pip install -t lib -r requirements.txt
Hem Python 2 hem de Python 3 geliştiricileri artık uygulamalarını şu şekilde dağıtmalıdır:
gcloud app deploy
Tamamen farklı bir önbelleğe alma hizmeti için yalnızca arka planda değişiklik yaptığınızdan uygulama, 12. modüldeki uygulamanızla aynı şekilde çalışmalıdır:

Bu adım, codelab'i tamamlar. Güncellenen örnek uygulamanızı 13. Modül klasörlerinden biriyle (mod13a (Python 2) veya mod13b (Python 3)) karşılaştırmanızı öneririz.
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/imagesconsole.cloud.google.com/storage/browser/staging.PROJECT_ID.appspot.com- Yukarıdaki depolama bağlantıları,
PROJECT_IDve *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:
- Cloud Memorystore için örnekler gerekir ve ücretsiz katmanı yoktur. Kullanım maliyetleri hakkında daha fazla bilgi edinmek için fiyatlandırma sayfasına bakın.
- Cloud Sunucusuz VPC Erişimi bağlayıcıları için örnekler gerekir ve ücretsiz katman yoktur. Kullanım maliyetleri hakkında daha fazla bilgi edinmek için Cloud VPC fiyatlandırma sayfasındaki ilgili bölümü inceleyin.
- Cloud Datastore (Datastore modunda Cloud Firestore) ücretsiz katmana sahiptir. Daha fazla bilgi için fiyatlandırma sayfasına bakın.
Bu eğitimde dört Cloud ürünü kullanılmıştır:
- App Engine
- Cloud Datastore
- Cloud Memorystore
- Cloud VPC
Aşağıda, bu kaynakları serbest bırakma ve faturalandırma ücretlerini önleme/en aza indirme talimatları verilmiştir.
Memorystore örneğini ve VPC bağlayıcısını kapatma
Bu ürünler ücretsiz katman içermediğinden şu anda faturalandırılıyorsunuz. Cloud projenizi kapatmazsanız (sonraki bölüme bakın) faturalandırmayı durdurmak için hem Memorystore örneğinizi hem de VPC bağlayıcınızı silmeniz gerekir. Bu kaynakları oluştururken olduğu gibi, Cloud Console'dan veya komut satırından da serbest bırakabilirsiniz.
Cloud Console'dan
Memorystore örneğini silmek için Memorystore kontrol paneline geri dönün ve örnek kimliğini tıklayın:

İlgili örneğin ayrıntılar sayfasına geldiğinizde "Sil"i tıklayın ve işlemi onaylayın:
VPC bağlayıcısını silmek için kontrol paneline gidin, silmek istediğiniz bağlayıcının yanındaki onay kutusunu işaretleyin, ardından "Sil"i tıklayıp işlemi onaylayın:

Komut satırından
Aşağıdaki gcloud komut çifti, sırasıyla hem Memorystore örneğini hem de VPC bağlayıcısını siler:
gcloud redis instances delete INSTANCE --region REGIONgcloud compute networks vpc-access connectors delete CONNECTOR --region REGION
Proje kimliğinizi gcloud config set project ile ayarlamadıysanız --project PROJECT_ID sağlamanız gerekebilir. Memorystore örneğinizin adı demo-ms, VPC bağlayıcınızın adı demo-vpc ve her ikisi de us-central1 bölgesindeyse aşağıdaki komut çiftini verin ve onaylayın:
$ gcloud redis instances delete demo-ms --region us-central1 You are about to delete instance [demo-ms] in [us-central1]. Any associated data will be lost. Do you want to continue (Y/n)? Delete request issued for: [demo-ms] Waiting for operation [projects/PROJECT/locations/REGION/operations/operation-aaaaa-bbbbb-ccccc-ddddd] to complete...done. Deleted instance [demo-ms]. $ $ gcloud compute networks vpc-access connectors delete demo-vpc --region us-central1 You are about to delete connector [demo-vpc] in [us-central1]. Any associated data will be lost. Do you want to continue (Y/n)? Delete request issued for: [demo-vpc] Waiting for operation [projects/PROJECT/locations/REGION/operations/aaaaa-bbbb-cccc-dddd-eeeee] to complete...done. Deleted connector [demo-vpc].
Her isteğin çalışması birkaç dakika sürer. Bu adımlar, daha önce açıklandığı gibi Cloud projenizin tamamını kapatmayı seçerseniz isteğe bağlıdır. Ancak kapatma işlemi tamamlanana kadar faturalandırma devam eder.
Sonraki adımlar
Bu eğitimin yanı sıra eski paketlenmiş hizmetlerden geçişe odaklanan diğer taşıma modüllerini de inceleyebilirsiniz:
- 2. Modül: App Engine
ndb'den Cloud NDB'ye taşıma - 7-9. modüller: App Engine görev sırası push görevlerinden Cloud Tasks'e geçiş
- 12-13. modüller: App Engine Memcache'ten Cloud Memorystore'a geçiş
- 15-16. Modüller: App Engine Blobstore'dan Cloud Storage'a geçiş
- 18-19. Modüller: App Engine görev sırasından (çekme görevleri) Cloud Pub/Sub'a geçiş
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
Dockerfileolmadan 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.
8. 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'lerle 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ı
12. Modül (BAŞLANGIÇ) ve 13. Modül (BİTİŞ) için depo klasörlerinin bağlantılarını aşağıdaki tabloda bulabilirsiniz. Bu dokümanlara, tüm App Engine codelab'lerinin taşındığı depodan da erişebilirsiniz. Bu depoyu klonlayabilir veya ZIP dosyası olarak indirebilirsiniz.
Codelab | Python 2 | Python 3 |
13. Modül (bu codelab) |
Online referanslar
Bu eğitimle ilgili olabilecek online kaynakları aşağıda bulabilirsiniz:
App Engine
- App Engine belgeleri
- Python 2 App Engine (standart ortam) çalışma zamanı
- Python 2 App Engine'de App Engine'in yerleşik kitaplıklarını kullanma
- Python 3 App Engine (standart ortam) çalışma zamanı
- Python 2 ve 3 App Engine (standart ortam) çalışma zamanları arasındaki farklar
- Python 2'den 3'e App Engine (standart ortam) taşıma kılavuzu
- App Engine fiyatlandırma ve kota bilgileri
App Engine NDB ve Cloud NDB
- App Engine NDB'ye genel bakış
- App Engine NDB Datastore kullanımı
- Google Cloud NDB belgeleri
- Google Cloud NDB deposu
- Cloud Datastore fiyatlandırma bilgileri
App Engine Memcache ve Cloud Memorystore
- App Engine Memcache'e genel bakış
- Python 2 App Engine
memcachereferansı - Python 3 App Engine
memcachereferansı - App Engine
memcacheCloud Memorystore'a taşıma kılavuzu - Cloud Memorystore belgeleri
- Redis için Cloud Memorystore belgeleri
- Redis için Cloud Memorystore fiyatlandırma bilgileri
- Cloud Memorystore'da desteklenen Redis sürümleri
- Cloud Memorystore ana sayfası
- Cloud Console'da yeni bir Memorystore örneği oluşturma
- Python Redis istemcisinin ana sayfası
- Python Redis istemci kitaplığı belgeleri
Cloud VPC
- Google Cloud VPC belgeleri
- Google Cloud VPC ana sayfası
- Cloud VPC fiyatlandırma bilgileri
- Cloud Console'da yeni bir Sunucusuz VPC Erişimi bağlayıcısı oluşturma
Diğer Cloud bilgileri
- Google Cloud Platform'da Python
- Google Cloud Python istemci kitaplıkları
- Google Cloud "Her Zaman Ücretsiz" katmanı
- Google Cloud SDK (
gcloudkomut satırı aracı) - Tüm Google Cloud belgeleri
Lisans
Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.
