1. Genel Bakış
Bu codelab serisi (kendi hızınızda ilerleyebileceğiniz, uygulamalı eğitimler), bir dizi taşıma işlemi boyunca yol göstererek Google App Engine (Standart) geliştiricilerinin uygulamalarını modernleştirmelerine yardımcı olmayı amaçlar. Bu işlem tamamlandıktan sonra kullanıcılar, uygulamalarını Cloud Run (Google Cloud'un App Engine'in kardeş hizmeti olan kapsayıcı barındırma hizmeti) ve diğer kapsayıcı barındırma hizmetleri için açıkça kapsayıcıya dönüştürerek daha taşınabilir hale getirebilir.
Bu eğiticide, Docker'a alternatif olarak Cloud Buildpacks kullanarak App Engine uygulamalarını Cloud Run tümüyle yönetilen hizmetine dağıtmak üzere nasıl container mimarisine alacağınız açıklanmaktadır. Cloud Buildpacks, Dockerfile dosyalarını yönetmeden veya Docker hakkında hiçbir şey bilmeden uygulamalarınızı kapsar.
Bu codelab, uygulamalarını orijinal yerleşik hizmetlerden uzaklaştırıp Python 3'e taşıyan ve artık bunları bir kapsayıcıda çalıştırmak isteyen Python 2 App Engine geliştiricileri içindir. Codelab, tamamlanmış bir 2. Modül veya 3. Modül Python 3 uygulamasıyla BAŞLAR.
Öğrenecekleriniz
- Cloud Buildpack'leri kullanarak uygulamanızı container'a dönüştürme
- Container görüntülerini Cloud Run'a dağıtma
Gerekenler
- Aşağıdakileri içeren bir Google Cloud Platform projesi:
- 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
- Bu codelab'e (5. Modül) başlamadan önce 2. Modül veya 3. Modül codelab'lerinden birini (ya da ikisini) tamamlamanız ve bunları Python 3'e taşımanız önerilir.
- Kapsüllemeye hazır, çalışan bir Python 3 App Engine uygulaması
Anket
Bu codelab'i nasıl kullanacaksınız?
2. Arka plan
App Engine ve Cloud Functions gibi PaaS sistemleri, ekibiniz ve uygulamanız için birçok kolaylık sağlar. Örneğin, bu sunucusuz platformlar, sistem yöneticisi/DevOps'un çözümler oluşturmaya odaklanmasını sağlar. Uygulamanız gerektiğinde otomatik olarak ölçeklenebilir, kullanım başına ödeme faturalandırmasıyla maliyetleri kontrol etmenize yardımcı olacak şekilde sıfıra kadar ölçeği azaltılabilir ve çeşitli yaygın geliştirme dillerini kullanır.
Ancak kapsayıcıların esnekliği de oldukça ilgi çekicidir. Herhangi bir dili, kitaplığı veya ikili programı seçebilirsiniz. Google Cloud Run, kullanıcılara hem sunucusuz bilgi işlem kolaylığını hem de container esnekliğini sunarak her iki dünyanın en iyi özelliklerini bir araya getirir.
Cloud Run'ı kullanmayı öğrenmek bu codelab'in kapsamı dışındadır. Bu konu Cloud Run belgelerinde ele alınmıştır. Buradaki amaç, App Engine uygulamanızı Cloud Run (veya diğer hizmetler) için nasıl kapsayacağınızı öğrenmenizi sağlamaktır. Devam etmeden önce bilmeniz gereken birkaç şey var. Öncelikle, uygulama kodunu alıp dağıtmayacağınız için kullanıcı deneyiminizin biraz farklı ve daha düşük düzeyde olacağını belirtmek isteriz.
Bunun yerine, container'lar hakkında bir şeyler öğrenmeniz gerekir. Örneğin, nasıl oluşturulup dağıtılacakları gibi. Ayrıca, App Engine'in web sunucusunu artık kullanmayacağınız için kapsayıcı resmine ne koymak istediğinize de karar verebilirsiniz. Örneğin, bir web sunucusu ekleyebilirsiniz. Bu yolu izlemeyi tercih etmiyorsanız uygulamalarınızı App Engine'de tutmak kötü bir seçenek değildir.
Bu eğitimde, uygulamanızı nasıl kapsayacağınızı, App Engine yapılandırma dosyalarını nasıl kaldıracağınızı ve uygulamanızı başlatma da dahil olmak üzere web sunucusunu nasıl yöneteceğinizi öğreneceksiniz.
Bu taşıma işlemi aşağıdaki adımlardan oluşur:
- Kurulum/Ön Hazırlık
- Uygulamayı kapsayıcıya alma
- Yapılandırma dosyalarını değiştirme
- Uygulama dosyalarını değiştirme
3. Kurulum/Ön Hazırlık
Eğitimin ana bölümüne başlamadan önce projemizi oluşturalım, kodu alalım ve temel uygulamayı dağıtalım. Böylece, çalışır durumda olan bir kodla başladığımızı biliriz.
1. Proje oluşturma
2. Modül veya 3. Modül kod laboratuvarlarını tamamladıysanız aynı projeyi (ve kodu) yeniden kullanmanızı öneririz. Alternatif olarak, yepyeni bir proje oluşturabilir veya mevcut başka bir projeyi yeniden kullanabilirsiniz. Projenin etkin bir faturalandırma hesabına sahip olduğundan ve App Engine'in (uygulama) etkinleştirildiğinden emin olun.
2. Temel örnek uygulamayı edinme
Bu codelab'in ön koşullarından biri, çalışan bir 2. veya 3. Modül örnek uygulamasına sahip olmaktır. Bu koşulu karşılamıyorsanız buradan devam etmeden önce yukarıdaki bağlantılardan birini kullanarak eğiticilerden birini tamamlamanızı öneririz. İçeriklerini biliyorsanız aşağıdaki kod klasörlerinden birini alarak başlayabilirsiniz.
İster kendi verilerinizi ister bizim verilerimizi kullanın, bu eğitimde BAŞLAYACAĞIMIZ nokta burasıdır. Bu codelab, taşıma sürecinde size yol gösterir. İşlemi tamamladığınızda, sonuçlar büyük ölçüde 5. Modül FINISH repo klasöründekiyle eşleşir.
- BAŞLANGIÇ:
- Cloud NDB: 2. modül kodu
- Cloud Datastore: 3. modül kodu
- BİTİRME: 5. modül kodu
- Deponun tamamı (klonlamak veya ZIP olarak indirmek için)
BAŞLANGIÇ dosyalarının (sizinkiler veya bizimkiler) dizini şu şekilde görünmelidir:
$ ls
README.md main.py templates
app.yaml requirements.txt
3. Temel uygulamayı (yeniden) dağıtma
Şimdi yapmanız gereken kalan ön hazırlık adımları:
gcloudkomut satırı aracı hakkında bilgi edinin- Örnek uygulamayı
gcloud app deployile yeniden dağıtın. - Uygulamanın App Engine'de sorunsuz çalıştığını onaylayın.
Bu adımları başarıyla uyguladıktan sonra kapsüllemeye hazır olursunuz.
4. Uygulamayı kapsayıcıya alma
Docker, günümüzde sektördeki standart container oluşturma platformudur. Daha önce de belirtildiği gibi, bu aracı kullanırken karşılaşılan zorluklardan biri, kapsayıcı resimlerinizin nasıl oluşturulacağını belirleyen yapılandırma dosyası olan verimli bir Dockerfile oluşturmak için çaba göstermeniz gerekmesidir. Öte yandan Buildpack'ler, uygulamanızın bağımlılıklarını belirlemek için iç gözlem kullandığından çok az çaba gerektirir. Bu sayede Buildpack kapsayıcısı, uygulamanız için mümkün olduğunca verimli hale gelir.
Docker hakkında bilgi edinmeyi atlamak ve App Engine uygulamanızı Cloud Run'da veya başka bir kapsayıcı barındırma platformunda çalıştırılacak şekilde kapsayıcılaştırmak istiyorsanız doğru yerdesiniz. Uygulama kapsülleme için Docker'ı nasıl kullanacağınızı öğrenmek istiyorsanız bu modülü tamamladıktan sonra 4. Modül codelab'ini yapabilirsiniz. Bu dokümanla aynıdır ancak container görüntülerini nasıl yöneteceğinizi daha iyi anlamanız için Docker'ı kullanır.
Taşıma adımları arasında App Engine yapılandırma dosyalarını değiştirme ve uygulamanızın nasıl başlatılacağını belirtme yer alır. Aşağıda, her platform türü için beklenen yapılandırma dosyalarını özetleyen bir tablo yer almaktadır. App Engine sütununu Buildpacks sütunuyla (ve isteğe bağlı olarak Docker ile) karşılaştırın:
Açıklama | App Engine | Docker | Buildpack'ler |
Genel yapılandırma |
|
| ( |
Üçüncü taraf kitaplıkları |
|
|
|
Üçüncü taraf yapılandırması |
| (yok) | (yok) |
Başlangıç | (geçerli değil) veya |
|
|
Dosyaları yoksayma |
|
|
|
Uygulamanız container mimarisine alındıktan sonra Cloud Run'a dağıtılabilir. Diğer Google Cloud kapsayıcı platformu seçenekleri arasında Compute Engine, GKE ve Anthos yer alır.
Genel yapılandırma
App Engine, uygulamanızı otomatik olarak başlatır ancak Cloud Run başlatmaz. Procfile, app.yaml entrypoint yönergesiyle benzer bir role sahiptir. Örnek uygulamamızda, Flask geliştirme sunucusunu başlatmak için Procfile python main.py komutunu çalıştırır. İsterseniz gunicorn gibi bir üretim web sunucusu da kullanabilirsiniz. Bu durumda, sunucuyu requirements.txt'ye eklediğinizden emin olun. Buildpack'leri kullanarak kaynak koddan dağıtım yapma hakkında daha fazla bilgiyi bu Cloud Run dokümanları sayfasında bulabilirsiniz.
Yalnızca app.yaml entrypoint yönergenizi Procfile içine taşımanız gerekir. Yoksa bu yalnızca kullanıcıları bu taşıma işlemiyle tanıştırmak için kullanılan örnek bir test uygulaması olduğundan şimdilik Flask geliştirme sunucusunu kullanın. Uygulamanız, en iyi bildiğiniz belirli bir başlangıç komutu olacaktır. Cloud Run hizmeti, arka planda service.yaml oluşturur. Bu service.yaml, app.yaml gibi görünür/davranır. service.yaml otomatik olarak oluşturulan videoları görmek için SVC_NAME ve REGION hizmetinizle ilgili şu tür bir bağlantıyı ziyaret edebilirsiniz: https://console.cloud.google.com/run/detail/REGION/SVC_NAME/yaml/view.
Üçüncü taraf kitaplıkları
requirements.txt dosyasının değiştirilmesi gerekmez. Flask, Datastore istemci kitaplığınızla (Cloud Datastore veya Cloud NDB) birlikte bulunmalıdır. Gunicorn gibi WSGI uyumlu başka bir HTTP sunucusu kullanmak istiyorsanız (bu yazı yazıldığı sırada mevcut sürüm 20.0.4'tür) gunicorn==20.0.4 öğesini requirements.txt öğesine ekleyin.
Üçüncü taraf yapılandırması
Buildpack'ler Python 2'yi desteklemediği için burada bu konuyu ele almayacağız. Cloud Run'da container'larda çalışan Python 3 uygulamaları, üçüncü taraf kitaplıkların requirements.txt içinde belirtilmesi gerektiği için Python 3 App Engine uygulamalarına benzer.
Başlangıç
Python 3 kullanıcıları, app.yaml dosyalarını handlers bölümlerinde script: auto yönergeleri yerine entrypoint yönergeleri içerecek şekilde dönüştürebilir. Python 3 app.yaml'ünüzde entrypoint kullanıyorsanız şöyle görünür:
runtime: python38
entrypoint: python main.py
entrypoint yönergesi, App Engine'e sunucunuzu nasıl başlatacağını söyler. Bu dosyayı neredeyse doğrudan Procfile'nize taşıyabilirsiniz. Bir giriş noktası yönergesinin her iki platformda nereye gideceğini özetleme: Bu, doğrudan aşağıdakine çevrilir. Ayrıca, bilgi için Docker eşdeğeri de gösterilir:
- Buildpack'ler:
Procfilesatırı:web: python main.py - Docker:
Dockerfilesatırında:ENTRYPOINT ["python", "main.py"]
Test ve hazırlama için yukarıda yaptığımız gibi Flask'ın geliştirme sunucusunu Python'dan çalıştırmak kolaydır. Ancak geliştiriciler, üretim için gunicorn kullanan Cloud Run hızlı başlangıç kılavuzu örneği gibi daha güçlü bir seçenek tercih edebilir.
Uygulama dosyaları
2. veya 3. modül uygulamalarının tümü Python 2-3 ile tamamen uyumludur. Bu nedenle, main.py'nın temel bileşenlerinde herhangi bir değişiklik yapılmaz. Yalnızca birkaç satır başlangıç kodu eklenir. Geliştirme sunucusunu başlatmak için main.py dosyasının en altına iki satır ekleyin. Cloud Run'ın uygulamanızı çağırabilmesi için 8080 numaralı bağlantı noktasının açık olması gerekir:
if __name__ == '__main__':
import os
app.run(debug=True, threaded=True, host='0.0.0.0',
port=int(os.environ.get('PORT', 8080)))
5. Derleme ve dağıtma
App Engine yapılandırmanız Buildpack'lerle değiştirildikten ve kaynak dosyası güncellemeleri tamamlandıktan sonra uygulamayı Cloud Run'da çalıştırmaya hazırsınız. Ancak önce hizmetler hakkında kısa bir bilgi verelim.
Hizmetler ve uygulamalar
App Engine öncelikli olarak uygulamaları barındırmak için oluşturulmuş olsa da web hizmetlerini veya bir mikro hizmet koleksiyonundan oluşan uygulamaları barındırmak için de kullanılabilir. Cloud Run'da gerçek bir hizmet veya web arayüzü olan bir uygulama olsun her şey hizmet olarak kabul edilir. Bu nedenle, kullanımını uygulama dağıtımı yerine hizmet dağıtımı olarak değerlendirin.
App Engine uygulamanız birden fazla hizmetten oluşmadığı sürece uygulamalarınızı dağıtırken herhangi bir adlandırma işlemi yapmanız gerekmiyordu. Ancak Cloud Run'da hizmet adı oluşturmanız gerekir. App Engine'in appspot.com alanında ise proje kimliği (ör. https://PROJECT_ID.appspot.com) ve belki de bölge kimliği kısaltması (ör. http://PROJECT_ID.REGION_ID.r.appspot.com) yer alır.
Ancak bir Cloud Run hizmetinin alanında hizmet adı, bölge kimliği kısaltması ve karma bulunur ancak proje kimliği bulunmaz (ör. https://SVC_NAME-HASH-REG_ABBR.a.run.app). Sonuç olarak, hizmet adı düşünmeye başlayın.
Hizmet dağıtma
Container görüntünüzü oluşturmak ve Cloud Run'a dağıtmak için aşağıdaki komutu çalıştırın. İstendiğinde bölgenizi seçin ve daha kolay test için kimliği doğrulanmamış bağlantılara izin verin. SVC_NAME, dağıttığınız hizmetin adı olmak üzere bölgenizi uygun şekilde seçin.
$ gcloud run deploy SVC_NAME --source . Please choose a target platform: [1] Cloud Run (fully managed) [2] Cloud Run for Anthos deployed on Google Cloud [3] Cloud Run for Anthos deployed on VMware [4] cancel Please enter your numeric choice: 1 To specify the platform yourself, pass `--platform managed`. Or, to make this the default target platform, run `gcloud config set run/platform managed`. Please specify a region: [1] asia-east1 [2] asia-east2 [3] asia-northeast1 [4] asia-northeast2 [5] asia-northeast3 [6] asia-south1 [7] asia-southeast1 [8] asia-southeast2 [9] australia-southeast1 [10] europe-north1 [11] europe-west1 [12] europe-west2 [13] europe-west3 [14] europe-west4 [15] europe-west6 [16] northamerica-northeast1 [17] southamerica-east1 [18] us-central1 [19] us-east1 [20] us-east4 [21] us-west1 [22] us-west2 [23] us-west3 [24] us-west4 [25] cancel Please enter your numeric choice: <select your numeric region choice> To make this the default region, run `gcloud config set run/region REGION`. Allow unauthenticated invocations to [SVC_NAME] (y/N)? y Building using Buildpacks and deploying container to Cloud Run service [SVC_NAME] in project [PROJECT_ID] region [REGION] ✓ Building and deploying... Done. ✓ Uploading sources... ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/BUILD-HASH?project=PROJECT_NUM]. ✓ Creating Revision... ✓ Routing traffic... Done. Service [SVC_NAME] revision [SVC_NAME-00014-soc] has been deployed and is serving 100 percent of traffic. Service URL: https://SVC_NAME-HASH-REG_ABBR.a.run.app
Dağıtımın başarılı olduğunu onaylamak için tarayıcınızla belirtilen URL'yi ziyaret edin.
gcloud komutunun belirttiği gibi, kullanıcılar yukarıda gösterildiği şekilde çıkışı ve etkileşimi azaltmak için çeşitli varsayılan ayarlar belirleyebilir. Örneğin, tüm etkileşimleri önlemek için bunun yerine aşağıdaki tek satırlık dağıtım komutunu kullanabilirsiniz:
$ gcloud beta run deploy SVC_NAME --source . --platform managed --region REGION --allow-unauthenticated
Bu yöntemi kullanıyorsanız yukarıda etkileşimli olarak yaptığımız gibi dizine eklenmiş menü seçimini değil, aynı hizmet adını SVC_NAME ve istediğiniz REGION adı seçtiğinizden emin olun.
6. Özet/Temizleme
Uygulamanın, App Engine'de olduğu gibi Cloud Run'da da çalıştığını doğrulayın. Bu seriye önceki codelab'lerden herhangi birini yapmadan başladıysanız uygulamanın kendisi değişmez. Ana web sayfasını (/) tüm ziyaretleri kaydeder ve siteyi yeterince ziyaret ettiğinizde aşağıdaki gibi görünür:

Kodunuz artık Module 5 repo folder (5. Modül depo klasörü) içindeki kodla eşleşmelidir. 5. Modül'ü tamamladığınız için tebrik ederiz.
İsteğe bağlı: Temizleme
Bir sonraki taşıma codelab'ine geçmeye hazır olana kadar faturalandırılmamak için temizlik yapma konusunda ne yapmalısınız? Artık farklı bir ürün kullandığınız için Cloud Run fiyatlandırma kılavuzunu incelediğinizden emin olun.
İsteğe bağlı: Hizmeti devre dışı bırakma
Bir sonraki eğitime geçmeye henüz hazır değilseniz ek ücret alınmasını önlemek için hizmetinizi devre dışı bırakın. Bir sonraki codelab'e geçmeye hazır olduğunuzda yeniden etkinleştirebilirsiniz. Uygulamanız devre dışıyken ücretlendirmeye neden olacak trafik almaz. Ancak Datastore kullanımınız ücretsiz kotayı aşarsa bu kullanım için de faturalandırılabilirsiniz. Bu nedenle, bu sınırın altında kalmak için yeterli miktarda veri silin.
Diğer yandan, taşımalara devam etmeyecek ve her şeyi tamamen silmek istiyorsanız hizmetinizi silebilir veya projenizi tamamen kapatabilirsiniz.
Sonraki adımlar
Tebrikler, uygulamanızı kapsüllediniz. Bu eğiticiyi tamamladınız. Buradan sonraki adım, 4. modülün codelab'inde (aşağıdaki bağlantı) Docker ile aynı işlemi nasıl yapacağınızı öğrenmek veya başka bir App Engine taşıma işlemine geçmektir:
- 4. Modül: Docker ile Cloud Run'a taşıma
- Uygulamanızı Docker ile Cloud Run'da çalışacak şekilde container'a dönüştürme
- Python 2'de kalmanıza olanak tanır.
- 7. Modül: App Engine Push Görev Sıraları ([push] görev sıralarını kullanıyorsanız gereklidir)
- 1. modül uygulamasına App Engine
taskqueuepush görevleri ekler. - 8. modülde kullanıcıları Cloud Tasks'a geçişe hazırlar.
- 1. modül uygulamasına App Engine
- Modül 3:
- Cloud NDB'den Cloud Datastore'a Datastore erişimini modernleştirme
- Bu kitaplık, Python 3 App Engine uygulamaları ve App Engine olmayan uygulamalar için kullanılır.
- 6. Modül: Cloud Firestore'a taşıma
- Firebase özelliklerine erişmek için Cloud Firestore'a geçiş yapma
- Cloud Firestore, Python 2'yi desteklese de bu Codelab yalnızca Python 3'te kullanılabilir.
7. Ek kaynaklar
App Engine taşıma modülüyle ilgili codelab sorunları/geri bildirimleri
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ı:
- App Engine taşıma codelab'leri için sorun izleyici
Taşıma kaynakları
2. ve 3. Modül (BAŞLANGIÇ) ile 5. Modül'ün (BİTİŞ) depo klasörlerinin bağlantılarını aşağıdaki tabloda bulabilirsiniz. Bu dokümanlara, tüm App Engine codelab'lerinin taşınması için kullanılan depodan da erişilebilir. Bu depoyu klonlayabilir veya ZIP dosyası olarak indirebilirsiniz.
Codelab | Python 2 | Python 3 |
(kod) | ||
(kod) | ||
Modül 5 | (yok) |
App Engine ve Cloud Run kaynakları
Bu özel taşıma işlemiyle ilgili ek kaynakları aşağıda bulabilirsiniz:
- Container'lar
- Genel