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 Memcache'den Cloud Memorystore'a (Redis için) geçişin nasıl yapılacağını göstermektir. Ayrıca App Engine ndb
'den Cloud NDB'ye dolaylı geçiş de mevcuttur ancak bu süreç temel olarak Modül 2 codelab'de ele alınmıştır; daha fazla adım adım bilgi için bakabilirsiniz.
Demoda aşağıdaki işlemleri yapmayı öğreneceksiniz:
- Cloud Memorystore örneği oluşturma (Cloud Console veya
gcloud
aracından) - Cloud Sunucusuz VPC Erişimi bağlayıcısı oluşturun (Cloud Console veya
gcloud
aracından) - App Engine Memcache'den Cloud Memorystore'a taşıma
- Örnek uygulamada Cloud Memorystore ile önbelleğe alma uygulama
- App Engine'den
ndb
Cloud NDB'ye taşıma
Gerekenler
- Etkin faturalandırma hesabı olan bir Google Cloud projesi (bu, ücretsiz bir codelab'e değildir)
- 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 12 App Engine uygulaması (Modül 12 codelab'ini tamamlayın [önerilir] veya depodan Modül 12 uygulamasını 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
Bu codelab'de, örnek bir uygulamanın App Engine Memcache'den (ve NDB) Cloud Memorystore'a (ve Cloud NDB) nasıl taşınacağı gösterilmektedir. Bu işlem, App Engine paket hizmetlerindeki bağımlılıkları değiştirmeyi ve uygulamalarınızı daha taşınabilir hale getirmeyi içeriyor. App Engine'de kalmayı seçebilir veya daha önce açıklanan alternatiflerden herhangi birine geçmeyi düşünebilirsiniz.
Bu taşıma işlemi, bu serideki diğerlerine göre daha fazla çaba gerektirir. App Engine Memcache'in yerine, tümüyle yönetilen ve bulut tabanlı bir önbelleğe alma hizmeti olan Cloud Memorystore'un kullanılması önerilir. Memorystore, Redis ve Memcached adlı açık kaynaklı bir çift popüler önbelleğe alma motorunu destekler. Bu taşıma modülünde Redis için Cloud Memorystore kullanılmaktadır. Daha fazla bilgiyi Memorystore ve Redis'e genel bakış bölümünde bulabilirsiniz.
Memorystore, çalışan bir sunucu gerektirdiğinden Cloud VPC'ye de ihtiyaç vardır. Özellikle, App Engine uygulamasının Memorystore örneğine özel IP adresi aracılığıyla bağlanabilmesi için Sunucusuz VPC Erişimi bağlayıcısı oluşturulmalıdır. Bu alıştırmayı tamamladığınızda uygulamanızı güncelleyeceksiniz. Bu uygulama daha önce olduğu gibi çalışıyor olsa da Cloud Memorystore, App Engine'in Memcache hizmetinin yerine geçerek önbelleğe alma hizmeti olacak.
Bu eğitim, Python 2'de Modül 12 örnek uygulaması ile başlar ve ardından Python 3'e ek, isteğe bağlı, küçük bir yükseltme uygulanır. Python 3 App Engine SDK'sı aracılığıyla App Engine paketlenmiş hizmetlerine Python 3'ten erişme konusunda zaten bilgi sahibiyseniz bunun yerine Modül 12 örnek uygulamasının Python 3 sürümünü kullanabilirsiniz. Memorystore, App Engine paket hizmeti olmadığından bu işlem SDK kullanımının kaldırılmasını gerektirir. Python 3 App Engine SDK'sının nasıl kullanılacağını öğrenmek bu eğitimin kapsamı dışındadır.
Bu eğitim aşağıdaki temel adımları içerir:
- Kurulum/ön çalışma
- Önbelleğe alma hizmetlerini ayarlama
- Yapılandırma dosyalarını güncelleme
- Ana uygulamayı güncelle
3. Kurulum/ön çalışma
Cloud projesini hazırlama
Modül 12 codelab'ini tamamlamak için kullandığınız projeyi yeniden kullanmanızı öneririz. Alternatif olarak, yeni bir proje oluşturabilir veya mevcut başka bir projeyi yeniden kullanabilirsiniz. Bu serideki her codelab'in bir "START" öğesi vardır (başlanacak referans kod) ve bir "FINISH" (taşınan uygulama). Sorun olması durumunda kendi çözümlerinizi bizim çözümümüzle karşılaştırabilmeniz için FINISH kodu sağlanır. Bir şeyler ters giderse istediğiniz zaman BAŞLANGIÇ bölümüne geri dönebilirsiniz. Bu kontrol noktaları, taşıma işlemlerini nasıl yapacağınızı öğrenmenize yardımcı olmak için tasarlanmıştır.
Hangi Cloud projesini kullanırsanız kullanın, projede etkin bir faturalandırma hesabı bulunduğundan emin olun. Ayrıca App Engine'in etkinleştirildiğinden emin olun. Bu eğiticileri oluşturmanın maliyetle ilgili genel etkilerini inceleyin ve anladığınızdan emin olun. Ancak bu serideki diğerlerinin aksine bu codelab'de, ücretsiz katmanı olmayan Cloud kaynakları kullanılır. Bu nedenle, alıştırmayı tamamlamak için bazı ücretler ödenmesi gerekir. Daha ayrıntılı maliyet bilgilerinin yanı sıra kullanımın azaltılmasına yönelik öneriler sağlanacaktır. Bu önerilerin en sonda, faturalandırma ücretlerini en aza indirmek için kaynakları serbest bırakmayla ilgili talimatlar yer alacaktır.
Temel örnek uygulamayı al
Bu codelab'de, BAŞLAYAN temel Modül 12 kodundan taşıma işlemi adım adım açıklanmıştır. İşlem tamamlandığında, FINISH klasörlerinden birindeki koda çok benzeyen, çalışır durumdaki bir Modül 13 uygulamasına ulaşırsınız. Bu kaynaklar şunlardır:
- BAŞLAT: Modül 12 Python 2 (
mod12
) veya Python 3 (mod12b
) uygulaması - FINISH: Modül 13 Python 2 (
mod13a
) veya Python 3 (mod13b
) uygulaması - Taşıma deposunun tamamı (ZIP dosyasını klonlayın veya indirin)
START klasörü aşağıdaki dosyaları içermelidir:
$ ls README.md app.yaml main.py requirements.txt templates
Python 2 sürümünü kullanıyorsanız Modül 12 codelab'ini tamamladıysanız bir appengine_config.py
dosyası ve muhtemelen bir lib
klasörü bulunur.
(Yeniden) Modül 12 uygulamasını dağıtın
Kalan ön iş adımlarınız:
gcloud
komut satırı aracına aşinalık kazanın (gerekirse)- (gerekirse) Modül 12 kodunu App Engine'e dağıtın (yeniden)
Python 2 kullanıcıları, aşağıdaki komutları kullanarak lib
klasörünü silip yeniden yüklemelidir:
rm -rf ./lib; pip install -t lib -r requirements.txt
Şimdi herkes (Python 2 ve 3 kullanıcıları) şu komutla kodu App Engine'e yüklemelidir:
gcloud app deploy
Başarılı bir şekilde dağıtıldıktan sonra uygulamanın, Modül 12'deki uygulama gibi göründüğünü ve çalıştığını onaylayın. Modül 12, ziyaretleri izleyen ve aynı kullanıcı için bir saat boyunca önbelleğe alan bir web uygulamasıdır:
En son ziyaretler önbelleğe alındığından, sayfa yenilemeleri oldukça hızlı bir şekilde yüklenmelidir.
4. Önbelleğe alma hizmetlerini ayarlama
Cloud Memorystore, sunucusuz değildir. Örnek gerekli; bu örnekte Redis'i çalıştırıyor. Memcache'in aksine, Memorystore bağımsız bir Cloud ürünüdür ve ücretsiz katmanına sahip değildir. Bu nedenle, devam etmeden önce Memorystore için Redis fiyatlandırma bilgilerini kontrol etmeyi unutmayın. Bu alıştırmanın maliyetlerini en aza indirmek için, çalıştırılacak en az kaynak miktarını belirlemenizi öneririz: Temel hizmet katmanı ve 1 GB kapasite.
Memorystore örneği, App Engine uygulamanızdan (örnekler) farklı bir ağdadır. Bu nedenle, App Engine'in Memorystore kaynaklarınıza erişebilmesi için Sunucusuz VPC Erişimi bağlayıcısı oluşturulmalıdır. VPC maliyetlerini en aza indirmek için örnek türünü (f1-micro
) ve istenecek en az örnek sayısını seçin (minimum 2, en fazla 3). Ayrıca VPC fiyatlandırma bilgileri sayfasına da göz atın.
Gerekli her kaynağı oluşturma sürecinde size yol gösterirken maliyetleri azaltmak için bu önerileri tekrarlıyoruz. Ayrıca Cloud Console'da Memorystore ve VPC kaynakları oluşturduğunuzda sağ üst köşede her ürün için fiyat hesaplayıcıyı görürsünüz. Bu hesaplama size aylık maliyet tahmini sunar (aşağıdaki resme bakın). Seçeneklerinizi değiştirirseniz bu değerler otomatik olarak ayarlanır. Bu kampanyaları genel hatlarıyla aşağıda görebilirsiniz:
Her iki kaynak da gereklidir ve önce hangisini oluşturduğunuz önemli değildir. Önce Memorystore örneğini oluşturursanız App Engine uygulamanız VPC bağlayıcısı olmadan bu örneğe erişemez. Benzer şekilde, önce VPC bağlayıcısını oluşturursanız App Engine uygulamanızın o VPC ağında konuşacağı hiçbir şey olmaz. Bu eğiticide, önce Memorystore örneğini ve ardından VPC bağlayıcısını oluşturmanız gerekir.
Her iki kaynak da internete bağlandıktan sonra, uygulamanızın önbelleğe erişebilmesi için ilgili bilgileri app.yaml
hizmetine eklemeniz gerekir. Resmi belgelerdeki Python 2 veya Python 3 kılavuzlarına da başvurabilirsiniz. Cloud NDB taşıma sayfasındaki veri önbelleğe alma rehberini ( Python 2 veya Python 3) de incelemek faydalı olabilir.
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 minimum düzeyde tutabilirsiniz:
- En düşük hizmet katmanını seçin: Temel (konsol varsayılanı: "Standart",
gcloud
varsayılan: "Temel"). - En düşük depolama alanını seçin: 1 GB (konsol varsayılanı: 16 GB,
gcloud
varsayılan: 1 GB). - Genellikle herhangi bir yazılımın en yeni sürümleri en fazla miktarda kaynak gerektirir, ancak en eski sürümün seçilmesi de büyük olasılıkla önerilmez. Şu anda ikinci en son sürüm Redis sürümü 5.0 (konsol varsayılanı: 6.x) şeklindedir.
Bu ayarları göz önünde bulundurarak bir sonraki bölüm, Cloud Console'dan örnek oluşturma konusunda size yol gösterecektir. Bu işlemi komut satırından yapmayı tercih ederseniz ileri atlayın.
Cloud Console'dan
Cloud Console'daki Cloud Memorystore sayfasına gidin (fatura bilgileri istenebilir). Memorystore'u henüz etkinleştirmediyseniz şu işlemi yapmanız istenir:
Bu aracı etkinleştirdikten sonra (muhtemelen faturalandırma işlemiyle birlikte) Memorystore kontrol paneline ulaşırsınız. Projenizde oluşturulan tüm örnekleri burada görebilirsiniz. Aşağıda gösterilen projede hiç satır yok; bu nedenle "Görüntülenecek satır yok" mesajını görüyorsunuz. Memorystore örneği oluşturmak için en üstteki Create instance'ı (Örnek oluştur) tıklayın:
Bu sayfada, Memorystore örneğini oluşturmak için istediğiniz ayarlarla dolduracağınız bir form bulunmaktadır:
Bu eğitimin ve örnek uygulamasının maliyetlerini düşük tutmak için daha önce bahsedilen ö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
hizmetine eklemek üzere örneğin IP adresini ve bağlantı noktası numarasını kopyalayın.
Komut satırından
Cloud Console'dan Memorystore örnekleri oluşturmak görsel olarak bilgilendirici olsa da bazıları komut satırını tercih eder. Devam etmeden önce gcloud
uygulamasının yüklü ve başlatılmış olduğundan emin olun.
Cloud Console'da olduğu gibi, Redis için Cloud Memorystore'un da etkinleştirilmesi gerekir. gcloud services enable redis.googleapis.com
komutunu verin ve aşağıdaki örnekte gösterildiği gibi işlemin tamamlanmasını bekleyin:
$ 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 hiçbir (olumsuz) yan etkisi yoktur. Hizmet etkinleştirildiğinde Memorystore örneği oluşturalım. 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 laboratuvar "demo-ms
" kullanır "my-project
" proje kimliğiyle birlikte ad olarak biçimlendirin. Bu örnek uygulamanın bölgesi us-central1
(us-central
ile aynı) ancak gecikme endişesi yaşarsanız 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 sürüm 5'i kullanıyoruz. Bu ayarları göz önünde bulundurarak, vereceğiniz komut şu şekildedir (ilişkili çıkışla birlikte):
$ 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 varsayılanlarından farklı olarak gcloud
, varsayılan olarak minimum düzeyde kaynak kullanır. Sonuç olarak bu komutta ne hizmet katmanı ne de depolama alanı miktarı gerekliydi. Memorystore örneği oluşturma işlemi birkaç dakika sürer. İşlem tamamlandığında örneğin IP adresini ve bağlantı noktası numarasını not edin. Bu bilgiler yakında app.yaml
hizmetine eklenecektir.
Örneğin oluşturulduğunu onaylayın
Cloud Console'dan veya komut satırından
Örneğinizi ister Cloud Console'dan ister komut satırından oluşturun, şu komutla örneğinizin kullanılabilir ve kullanıma hazır olduğunu onaylayabilirsiniz: gcloud redis instances list --region REGION
Aşağıda, az önce oluşturduğumuz örneği gösteren beklenen çıkışla birlikte us-central1
bölgesindeki örnekleri kontrol etme komutu verilmiştir:
$ 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 veya uygulamanızı yapılandırmanız istendiğinde HOST
ve PORT
kullandığınızdan emin olun (RESERVED_IP
değil). Cloud Console'daki Cloud Memorystore kontrol panelinde bu örnek gösterilecektir:
Compute Engine sanal makinesinden
Compute Engine sanal makineniz varsa çalıştığını onaylamak için bir sanal makineden Memorystore örneğinizin doğrudan komutlarını da gönderebilirsiniz. Sanal makine kullanımıyla, halihazırda kullandığınız kaynaklardan bağımsız olarak ilişkili maliyetler olabileceğini unutmayın.
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 minimumda tutmak ve aşağıdaki ayarlarla, codelab'i tamamlamak için en az miktarda kaynak ayırmanızı öneririz:
- Maksimum en düşük örnek sayısını seçin: 3 (konsol ve
gcloud
varsayılanı: 10) - En düşük maliyetli makine türünü seçin:
f1-micro
(konsol varsayılanı:e2-micro
,gcloud
varsayılanı yok)
Bir sonraki bölüm, yukarıdaki Cloud VPC ayarlarını kullanarak Cloud Console'dan bağlayıcı oluşturma konusunda size yol gösterecektir. Bunu komut satırından yapmayı tercih ederseniz sonraki bölüme geçin.
Cloud Console'dan
Cloud Networking "Sunucusuz VPC erişimi"ne gidin sayfasında bakın (fatura bilgileri istenebilir). API'yi henüz etkinleştirmediyseniz bunu yapmanız istenir:
API'yi etkinleştirdikten sonra (muhtemelen faturalandırma işlemiyle birlikte) oluşturulan tüm VPC bağlayıcılarının gösterildiği kontrol paneline ulaşırsınız. Aşağıdaki ekran görüntüsünde kullanılan projede hiç satır yok. İşte bu yüzden "Görüntülenecek satır yok" yazıyor. Konsolunuzda en üstteki Create Connector (Bağlayıcı Oluştur) seçeneğini tıklayın:
Formu istediğiniz ayarlarla doldurun:
Kendi uygulamalarınız için uygun ayarları seçin. Bu eğitim ve minimum ihtiyaç duyan örnek uygulaması için maliyetleri en aza indirmek mantıklıdır. Bu nedenle, daha önce bahsedilen önerileri uygulayın. Seçimlerinizi yaptıktan sonra Oluştur'u tıklayın. VPC bağlayıcısı isteme işleminin tamamlanması 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örürsünüz:
$ gcloud services enable vpcaccess.googleapis.com Operation "operations/acf.p2-aaa-bbb-ccc-ddd-eee-ffffff" finished successfully.
API etkinleştirildiğinde, aşağıdakine benzer bir komutla bir VPC bağlayıcısı 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 bloğu başlangıç IP adresi seçin. Bu eğitim aşağıdaki varsayımlarda bulunur:
- Proje Kimliği:
my-project
- VPC bağlayıcı adı:
demo-vpc
- Min. örnek sayısı: 2 (varsayılan) ve maks. örnek sayısı: 3
- Örnek türü:
f1-micro
- Bölge:
us-central1
- IPv4 CIDR bloğu:
10.8.0.0/28
(Cloud Console'da önerildiği gibi)
Aşağıdaki varsayımları göz önünde bulundurarak aşağıdaki komutu çalıştırırsanız aşağıdakine benzer bir çıkış 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, minimum 2 örnekleri ve default
adlı bir ağ gibi varsayılan değerler atlanır. 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, us-central1
bölgesinde olduğunu varsayarak aşağıdaki gcloud
komutunu vererek komutun oluşturulduğunu ve kullanıma hazır olduğunu onaylayın:
$ 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, gösterge tablosunda az önce oluşturduğunuz bağlayıcı da gösterilir:
Cloud projesi kimliğini, VPC bağlayıcısının adını ve bölgeyi not edin.
Gerekli ek Cloud kaynaklarını komut satırında veya konsolda oluşturduğunuza göre artık uygulama yapılandırmasını bu kaynakların kullanımını destekleyecek şekilde güncelleyebilirsiniz.
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 ana hedefi Python 2 kullanıcılarının geçişine yardımcı olmaktır ancak aşağıdaki her bölümde genellikle içeriğin devamında Python 3'e daha fazla geçiş yapmayla ilgili bilgiler verilir.
requirements.txt
Bu bölümde hem Cloud Memorystore'u hem de Cloud NDB'yi destekleyen paketler ekliyoruz. Redis için Cloud Memorystore'da, tek başına Cloud Memorystore istemci kitaplığı olmadığından Python (redis
) için standart Redis istemcisini kullanmanız yeterlidir. 12. Modül'deki flask
ürününe katılarak hem redis
hem de google-cloud-ndb
öğelerini requirements.txt
alanına ekleyin:
flask
redis
google-cloud-ndb
Bu requirements.txt
dosyasında sürüm numarası bulunmadığından en son sürümler seçildi. Herhangi bir uyumsuzluk oluşursa çalışan sürümlerde kilitlenecek 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'lerini (grpcio
ve setuptools
) kullanırken belirli üçüncü taraf paketleri gerektirir. Python 2 kullanıcıları, bunun gibi yerleşik kitaplıkları ve app.yaml
içinde kullanılabilir bir sürümü listelemelidir. Henüz libraries
bölümünüz yoksa bir tane oluşturun ve her iki kitaplığı da aşağıdaki gibi ekleyin:
libraries:
- name: grpcio
version: latest
- name: setuptools
version: latest
Uygulamanız taşınırken zaten bir libraries
bölümü olabilir. Varsa ve grpcio
ile setuptools
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, kullandığınız Python çalışma zamanını dikkate almadan aşağıdaki iki yeni bölümü app.yaml
bölümüne ekleyin:
env_variables:
REDIS_HOST: 'YOUR_REDIS_HOST'
REDIS_PORT: 'YOUR_REDIS_PORT'
vpc_access_connector:
name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR
Gerekli güncellemeler bu kadar. 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: 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 "öncesi ve sonrası"nı görebilirsiniz. app.yaml
için uygulamanız gereken güncellemeler gösteriliyor:
*Python 3 farklılıkları
Bu bölüm isteğe bağlıdır ve yalnızca Python 3'e bağlantı yapıyorsanız isteğe bağlıdır. Bunun için Python 2 yapılandırmanızda birkaç değişiklik 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ılmadığından bu ayarların her ikisini de silin. En son 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. Bunun sonucunda app.yaml
sayfasının libraries
bölümünün tamamı silinebilir.
Ardından, Python 3 çalışma zamanı için kendi yönlendirmesini yapan web çerçevelerinin kullanılmasını gerektirir. Bu nedenle, geliştiricilere Modül 1'de webp2'den Flask'a nasıl geçiş yapacaklarını gösterdik. Sonuç olarak, tüm komut dosyası işleyicileri auto
olarak değiştirilmelidir. Bu uygulama statik dosya sunmadığı için "bir şey ifade etmez" işleyicilerin listelenmesi gerekir (tümü auto
olduğu için). Bu nedenle handlers
bölümünün tamamı kaldırılabilir. Sonuç olarak, Python 3 için ayarlanmış yeni ve kısaltılmış app.yaml
ayarınız, şu şekilde görünecek ş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şıma işlemi sırasında app.yaml
farklılıkları:
threadsafe
veapi_version
ayarlarını sillibraries
bölümünü silhandlers
bölümünü (veya uygulamanız statik dosyalar sunuyorsa yalnızcascript
işleyicilerini) silin
Değerleri değiştirin
Memorystore ve VPC bağlayıcısı için yeni bölümlerde yer alan değerler yalnızca yer tutucudur. Büyük harfle yazılan değerleri (YOUR_REDIS_HOST, YOUR_REDIS_PORT, PROJECT_ID, REGION, CONNECTOR_NAME
), söz konusu kaynakları daha önce oluşturduğunuz zamandan itibaren kaydedilen değerlerle değiştirin. Memorystore örneğinizle ilgili olarak HOST
(RESERVED_IP
değil) ve PORT
kullandığınızdan emin olun. Örnek adının demo-ms
ve REGION
öğesinin us-central1
olduğu varsayılarak HOST
ve PORT
verilerini almanın hızlı bir komut satırı yolunu aşağıda bulabilirsiniz:
$ gcloud redis instances describe demo-ms --region us-central1 \ --format "value(host,port)" 10.251.161.51 6379
Örnek Redis örneğimizin IP adresi, VPC bağlayıcısı adı demo-vpc
olan us-central1
bölgesinde yer alan my-project
projemizdeki 6379
bağlantı noktasını kullanan 10.10.10.10
ise app.yaml
içindeki bu bölümler şöyle 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 oluştur veya güncelle
Yerleşik üçüncü taraf kitaplıklar için destek ekleyin
Daha önce app.yaml
özelliğinde olduğu gibi grpcio
ve setuptools
kitaplıklarının kullanımını ekleyin. Yerleşik üçüncü taraf kitaplıklarını desteklemek için appengine_config.py
dosyasını değiştirin. Bu durum size tanıdık geliyorsa App Engine'den ndb
Cloud NDB'ye geçiş yaparken Modül 2'de de bu zorunluluktan kaynaklanıyordur. Yapmanız gereken tam değişiklik, lib
klasörünü setuptools.pkg_resources
çalışma grubuna eklemektir:
*Python 3 farklılıkları
Bu bölüm isteğe bağlıdır ve yalnızca Python 3'e bağlantı yapıyorsanız isteğe bağlıdır. App Engine'in ikinci nesil değişikliklerden biri, yerleşik olmayan üçüncü taraf paketlerinin kopyalanması (bazen "tedarikçi firma" olarak da adlandırılır) ve app.yaml
ürününde yerleşik 3. taraf paketlere referans verilmesi artık gerekli olmadığı için appengine_config.py
dosyasının tamamını silebilirsiniz.
6. Uygulama dosyalarını güncelle
Yalnızca bir uygulama dosyası (main.py
) bulunduğundan bu bölümdeki tüm değişiklikler yalnızca o dosyayı etkiler. Bu uygulamayı Cloud Memorystore'a taşımak için yapacağımız değişikliklerin resimli bir temsilini paylaştık. Yalnızca açıklama amaçlıdır ve yakından analiz etmeniz amaçlanmamıştır. İşin tamamı, kodda yaptığımız değişikliklerde yapılır.
En baştan başlayarak bunları tek tek ele alalım.
İçe aktarmaları güncelleme
Modül 12'nin main.py
içindeki içe aktarma bölümünde Cloud NDB ve Cloud Tasks kullanılır; içe aktarımları şunlardır:
ÖNCE:
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 okuma ortamı değişkenleri gerekir. Bu nedenle, Python os
modülüne ve Python Redis istemcisi olan redis
'a ihtiyacımız vardır. Redis, Python nesnelerini önbelleğe alamadığından, pickle
kullanarak en son ziyaret listesini düzenleyin. Dolayısıyla, bunu da içe aktarın. Memcache'in avantajlarından biri nesne serileştirmenin otomatik olarak gerçekleşmesidir. Memorystore ise daha fazla "kendin yap" işlemidir. Son olarak, google.appengine.ext.ndb
yerine google.cloud.ndb
koyarak App Engine'den ndb
sürümünü Cloud NDB'ye yükseltin. Bu değişikliklerin ardından, içe aktarma işlemleriniz artık aşağıdaki gibi görünmelidir:
SONRA:
import os
import pickle
from flask import Flask, render_template, request
from google.cloud import ndb
import redis
Başlatma güncelleme
Modül 12'nin başlatılması, Flask uygulama nesnesi app
örneklendirmeyi ve bir saatlik önbelleğe alma değeri için bir sabit değer ayarlamayı içerir:
ÖNCE:
app = Flask(__name__)
HOUR = 3600
Cloud API'lerini kullanmak için bir istemci gerekir. Bu nedenle, Flask'tan hemen sonra bir Cloud NDB istemcisi oluşturun. Ardından, app.yaml
içinde ayarladığınız ortam değişkenlerinden Memorystore örneğinin IP adresini ve bağlantı noktası numarasını alın. Bu bilgilerden yararlanarak bir Redis istemcisi oluşturun. Bu güncellemelerden sonra kodunuz şu şekilde görünür:
SONRA:
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 taşıma
Module 12 uygulamasının Python 3 sürümünden başlıyorsanız bu bölüm isteğe bağlıdır. Bu durumda, içe aktarma ve başlatma ile ilgili gerekli bazı değişiklikler söz konusudur.
Öncelikle, Memcache bir App Engine paket hizmeti olduğundan Python 3 uygulamasında kullanımı için App Engine SDK'sı gerekir. Bu SDK, özellikle WSGI uygulamasını (ayrıca diğer gerekli yapılandırmaların) sarmalamasını gerektirir:
ÖNCE:
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 (Membe gibi bir App Engine paket hizmeti değil) geçiş yaptığımız için SDK kullanımının kaldırılması gerekir. Hem memcache
hem de wrap_wsgi_app
verilerini içe aktaran tüm satırı silmeniz yeterli olacaktır. wrap_wsgi_app()
hattını da sil. Bu güncellemeler, uygulamanın bu kısmını (aslında uygulamanın tamamı) Python 2 sürümüyle aynı bırakır.
SONRA:
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, app.yaml
(satır: app_engine_apis: true
) ve requirements.txt
(appengine-python-standard
satırını silin) satırlarından SDK kullanımını kaldırın.
Cloud Memorystore'a (ve Cloud NDB) taşıma
Cloud NDB'nin veri modeli, App Engine ndb
ile uyumlu olacak şekilde tasarlanmıştır. Diğer bir ifadeyle, Visit
nesnelerin tanımı aynı kalır. Modül 2'nin Cloud NDB'ye taşınmasına benzer şekilde, store_visit()
ve fetch_visits()
içindeki tüm Datastore çağrıları artırılır ve yeni bir with
blokuna yerleştirilir (Cloud NDB bağlam yöneticisinin kullanımı gerekir). Söz konusu değişiklikten önceki aramalar:
ÖNCE:
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 with ds_client.context()
bloğu ekleyin ve Datastore çağrılarını içine yerleştirin (ve girintili). Bu durumda, aramaların kendileri için herhangi bir değişiklik yapılması gerekmez:
SONRA:
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)
Şimdi de önbelleğe alma değişikliklerine bakalım. Modül 12'deki main()
işlevi şu şekildedir:
ÖNCE:
@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 "get" bulunur ve "set" çağrılarına benzerdir. Yalnızca ilgili istemci kitaplıklarını değiştiriyoruz, değil mi? Çok yaklaştınız. Daha önce de belirttiğimiz gibi, bir Python listesini Redis ile önbelleğe alamıyoruz (çünkü önce serileştirilmesi gerekir, bu nedenle Memcache otomatik olarak halleder). set()
çağrısında "seç"i seçin. bunları pickle.dumps()
değerini içeren bir dizeye dönüştürür. Benzer şekilde, önbellekten ziyaretler alırken get()
öğesinden hemen sonra pickle.loads()
ile işaretini kaldırmanız gerekir. Bu değişiklikleri uyguladıktan sonraki ana işleyiciyi burada görebilirsiniz:
SONRA:
@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 işlem, örnek uygulamanın Memcache kullanımını Cloud Memorystore'a dönüştürmede main.py
için gereken değişikliklerin tamamlanmasına yol açmıştır. HTML şablonu ve Python 3'e taşıma işlemi ne olacak?
HTML şablon dosyası ve bağlantı noktası Python 3 olarak güncellensin mi?
Sürpriz! Uygulama, herhangi bir kod değişikliği veya uyumluluk kitaplığı olmadan hem Python 2 hem de 3'te çalışacak şekilde tasarlandığından burada herhangi bir işlem yapmanız gerekmez. main.py
uygulamasını bulacaksınız. mod13a
(2.x) ve mod13b
(3.x) "FINISH" genelinde aynıdır klasörlerini tıklayın. Sürüm numaralarındaki (kullanılıyorsa) farklar dışında , aynı durum requirements.txt
için de geçerlidir. Kullanıcı arayüzü değişmediğinden templates/index.html
için de güncelleme yapılmamıştır.
Bu uygulamayı Python 3 App Engine'de çalıştırmak için gereken her şey, yapılandırma sırasında daha önce tamamlandı: Gereksiz yönergeler app.yaml
etiketinden kaldırıldı ve Python 3'te kullanılmadığı için hem appengine_config.py
hem de lib
klasörü silindi.
7. Ö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
Son kontrol her zaman örnek uygulamayı dağıtmaktır. Python 2 geliştiricileri: Aşağıdaki komutları kullanarak lib
dosyasını silip yeniden yükleyin. (Sisteminizde hem Python 2 hem de 3 yüklüyse bunun yerine açıkça pip2
çalıştırmanız gerekebilir.)
rm -rf ./lib pip install -t lib -r requirements.txt
Hem Python 2 hem de 3 geliştiricileri, uygulamalarını artık aşağıdakilerle dağıtmalıdır:
gcloud app deploy
Yalnızca arka planda tamamen farklı bir önbelleğe alma hizmeti için yeniden kablo oluşturduğunuzdan, uygulamanın kendisi Modül 12 uygulamanızla aynı şekilde çalışmalıdır:
Bu adımda codelab tamamlanır. Güncellenen örnek uygulamanızı mod13a
(Python 2) veya mod13b
(Python 3) klasörlerinden biriyle karşılaştırmanızı öneririz.
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 Memorystore örnek gerektirir ve ücretsiz bir katmanı yoktur; kullanım maliyetleri hakkında daha fazla bilgi edinmek için fiyatlandırma sayfasına göz atın.
- Cloud Sunucusuz VPC Erişimi bağlayıcıları örnek gerektirir ve ücretsiz katmanı yoktur. kullanım maliyetleri hakkında daha fazla bilgi edinmek için Cloud VPC fiyatlandırma sayfasındaki ilgili bölüme bakın.
- Cloud Datastore (Datastore modunda Cloud Firestore) ücretsiz katmana sahiptir; Daha fazla bilgi için fiyatlandırma sayfasını inceleyin.
Bu eğitim, dört Cloud ürününün kullanımını kapsamaktadır:
- App Engine
- Cloud Datastore
- Cloud Memorystore
- Cloud VPC
Aşağıda, bu kaynakları serbest bırakma ve faturalandırma ücretlerini önlemek/en aza indirmek için talimatlar verilmiştir.
Memorystore örneğini ve VPC bağlayıcısını kapatın
Bunlar, ücretsiz katmanı olmayan ürünlerdir. Bu nedenle, şu anda faturalandırma ödemeniz gerekir. 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şturduğunuz zamanki gibi Cloud Console'dan veya komut satırından da yayınlayabilirsiniz.
Cloud Console'dan
Memorystore örneğini silmek için Memorystore kontrol paneline dönün ve örnek kimliğini tıklayın:
Bu örneğin ayrıntılar sayfasında "Sil"i tıklayın ve onaylayın:
VPC bağlayıcısını silmek için kendi kontrol paneline gidin ve silmek istediğiniz bağlayıcının yanındaki onay kutusunu işaretleyip "Sil"i tıklayın. ve 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 REGION
gcloud compute networks vpc-access connectors delete CONNECTOR --region REGION
gcloud config set project
ile proje kimliğinizi ayarlamadıysanız --project PROJECT_ID
sağlamanız gerekebilir. Memorystore örneğinizin adı demo-ms
, VPC bağlayıcısı ise demo-vpc
ise 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. Daha önce açıklandığı gibi Cloud projenizin tamamını kapatmayı tercih ederseniz bu adımlar isteğe bağlıdır. Ancak kullanımdan kaldırma işlemi tamamlanana kadar faturalandırmanız devam eder.
Sonraki adımlar
Bu eğiticinin yanı sıra, eski paket servislerin kullanımdan kaldırılmasına odaklanan diğer taşıma modüllerini de göz önünde bulundurun:
- Modül 2: App Engine
ndb
'den Cloud NDB'ye geçiş - Modüller 7-9: App Engine Görev Sırası push görevlerini Cloud Tasks'a 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: App Engine Görev Sırası'ndan (görev alma) 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 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.
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 12 (START) ve Modül 13 (FINISH) için depo klasörlerinin bağlantılarını aşağıdaki tabloda bulabilirsiniz. Bunlara tüm App Engine codelab taşıma işlemleri için depodan da erişilebilir. Bu depoyu klonlayabilir veya ZIP dosyası indirebilirsiniz.
Codelab | Python 2 | Python 3 |
Modül 13 (bu codelab) |
Online referanslar
Aşağıda, bu eğitim için alakalı olabilecek çevrimiçi kaynaklar verilmiştir:
App Engine
- 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
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
memcache
referansı - Python 3 App Engine
memcache
referansı - App Engine
memcache
'den Cloud Memorystore'a taşıma rehberi - Cloud Memorystore belgeleri
- Redis için Cloud Memorystore belgeleri
- Redis için Cloud Memorystore fiyatlandırma bilgileri
- Cloud Memorystore'un desteklediği Redis sürümleri
- Cloud Memorystore ana sayfası
- Cloud Console'da yeni Memorystore örneği oluşturma
- Python Redis istemci 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 Sunucusuz VPC Erişimi bağlayıcısı oluşturun
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
Lisans
Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.