1. Genel Bakış
Bu codelab'lerden oluşan bu seri, Google App Engine (Standart) geliştiricilerinin bir dizi taşıma işleminde rehberlik ederek uygulamalarını modernleştirmelerine yardımcı olmayı amaçlamaktadır. Bu tamamlandıktan sonra kullanıcılar, uygulamalarını açık bir şekilde Cloud Run, Google Cloud'un container barındırma kardeş hizmeti App Engine ve diğer container barındırma hizmetleri için container mimarisine alarak uygulamalarını daha taşınabilir hale getirebilir.
Bu eğiticide, Docker'a alternatif olan Cloud Buildpacks'i kullanarak tümüyle yönetilen Cloud Run hizmetine dağıtım yapmak üzere App Engine uygulamalarını nasıl container mimarisine alacağınız öğretilmektedir. Cloud Buildpacks, Dockerfile
dosyalarını yönetmeden, hatta Docker hakkında hiçbir bilgi sahibi olmadan uygulamalarınızı container mimarisine alır.
Bu codelab, uygulamalarını orijinal yerleşik hizmetlerden uzaklaştırıp Python 3'e aktaran ve şu anda bir container'da çalıştırmak isteyen Python 2 App Engine geliştiricileri içindir. Codelab, tamamlanan bir Modül 2 veya Modül 3 Python 3 uygulamasıyla başlar.
Neler öğreneceksiniz?
- Cloud Buildpacks'i kullanarak uygulamanızı container mimarisine alın
- Container görüntülerini Cloud Run'a dağıtma
Gerekenler
- Şu özelliklere sahip bir Google Cloud Platform projesi:
- Temel Python becerileri
- Yaygın Linux komutlarıyla ilgili bilgi
- App Engine uygulamalarını geliştirme ve dağıtma ile ilgili temel bilgiler
- Bu uygulamaya (Modül 5) başlamadan önce Modül 2 veya Modül 3 codelab'lerinden birini (veya ikisini birden) tamamlamanız ve bunları Python 3'e taşıması önerilir.
- Container mimarisine alınmaya 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 SysAdmin/Devops'un çözümler geliştirmeye odaklanmasını sağlar. Uygulamanız gereken şekilde otomatik ölçeklendirilebilir, maliyetleri kontrol etmeye yardımcı olan kullanım başına ödeme faturalandırmasıyla sıfıra kadar ölçeklendirme yapabilir ve yaygın olarak kullanılan çeşitli geliştirme dilleri kullanır.
Bununla birlikte, container'ların esnekliği; istediğiniz dili, kitaplığı veya ikili programı seçebilme becerisi de ilgi çekicidir. Google Cloud Run, kullanıcılara iki olanaktan en iyi şekilde yararlanma, container'ların esnekliği ve sunucusuz çözümlerden yararlanmasını sağlıyor.
Cloud Run'ın nasıl kullanılacağını öğrenmek bu codelab kapsamında değildir. Cloud Run belgelerinde yer almaktadır. Buradaki amaç, App Engine uygulamanızı Cloud Run (veya diğer hizmetler) için nasıl container mimarisine alacağınızı bilmenizdir. Devam etmeden önce bilmeniz gereken bazı noktalar vardır. Uygulama kodunu alıp dağıtmayacağınız için öncelikle kullanıcı deneyiminizin biraz daha farklı, biraz daha düşük bir düzeyde olması gerekir.
Bunun yerine, container'ların nasıl oluşturulacağını ve dağıtılacağını öğrenmek gibi, container'lar hakkında bir şeyler öğrenmeniz gerekir. Ayrıca artık App Engine'in web sunucusunu kullanmayacağınız için web sunucusu da dahil olmak üzere container görüntüsüne ne koymak istediğinize karar vermeniz gerekir. Bu yolu izlememeyi tercih ederseniz uygulamalarınızı App Engine'de tutmak kötü bir seçenek değildir.
Bu eğiticide, uygulamanızı nasıl başlatacağınız da dahil olmak üzere, App Engine yapılandırma dosyalarını kaldırarak uygulamanızı nasıl kapsayıcıya dönüştüreceğinizi, web sunucusunu nasıl yöneteceğinizi öğreneceksiniz.
Bu taşıma işleminde aşağıdaki adımlar yer alır:
- Kurulum/Ön Çalışma
- uygulamasını container mimarisine alın
- Yapılandırma dosyalarını değiştirme
- Uygulama dosyalarını değiştirme
3. Kurulum/Ön Çalışma
Eğiticinin ana bölümüne geçmeden önce projemizi oluşturalım, kodu alın ve sonra çalışan kodla başladığımızı öğrenmemiz için temel uygulamayı dağıtalım.
1. Proje oluşturun
Modül 2 veya Modül 3 codelab'lerini tamamladıysanız aynı projeyi (ve kodu) yeniden kullanmanızı öneririz. Alternatif olarak, yeni bir proje oluşturabilir veya mevcut başka bir projeyi yeniden kullanabilirsiniz. Projenin etkin bir faturalandırma hesabı olduğundan ve App Engine'in (uygulamanın) etkin olduğundan emin olun.
2. Temel örnek uygulamayı al
Bu codelab'in ön koşullarından biri, çalışan bir Modül 2 veya 3 örnek uygulamasına sahip olmaktır. Gmail hesabınız yoksa buraya geçmeden önce iki eğitimden birini (yukarıdaki bağlantılar) tamamlamanızı öneririz. İçerikleri zaten biliyorsanız aşağıdaki kod klasörlerinden birini alarak başlayabilirsiniz.
İster kendi aracınızı ister bizimkiyi kullanın, bu eğitim tam da burada başlıyor. Bu codelab, taşıma işleminde size yol gösterir. İşlemi tamamladığınızda, kod laboratuvarı çoğunlukla Modül 5 FINISH depo klasöründekilerle eşleşmelidir.
- BAŞLANGIÇ:
- Cloud NDB: Modül 2 kodu
- Cloud Datastore: Modül 3 kodu
- FINISH: Modül 5 kodu
- Deponun tamamı (ZIP dosyasını klonlamak veya indirmek için)
START dosyalarının dizini (sizin veya bizimki) şu şekilde görünmelidir:
$ ls
README.md main.py templates
app.yaml requirements.txt
3. Temel uygulamayı (yeniden) dağıtma
Hemen yürütmek için kalan ön çalışma adımlarınız:
gcloud
komut satırı aracını yeniden tanıma- Örnek uygulamayı
gcloud app deploy
ile yeniden dağıtın - Uygulamanın App Engine'de sorunsuz çalıştığını onaylayın
Bu adımları başarıyla gerçekleştirdikten sonra, dosyayı container mimarisine almaya hazırsınız demektir.
4. Uygulamayı container mimarisine alın
Docker, günümüzde endüstrideki standart container mimarisine alma platformudur. Daha önce de belirtildiği gibi, bu veri türünün kullanılmasındaki zorluklardan biri, kapsayıcı görüntülerinizin nasıl oluşturulacağını belirleyen yapılandırma dosyası olan verimli bir Dockerfile
seçmek için çaba gerektirmesidir. Öte yandan Buildpacks, uygulamanızın bağımlılıklarını belirlemek için iç gözlem yöntemini kullandığından ve Buildpacks container'ını uygulamanız için mümkün olduğunca verimli hale getirdiğinden çok az çaba gerektirir.
Docker hakkında bilgi edinmeyi atlamak istiyor ve App Engine uygulamanızı Cloud Run veya başka bir container barındırma platformunda çalıştırmak için container mimarisine almak istiyorsanız doğru yerdesiniz. Uygulamaları container mimarisine almak için Docker'ı nasıl kullanacağınızı öğrenmek istiyorsanız bu kursu tamamladıktan sonra 4. Modül codelab'i uygulayabilirsiniz. Buna benzerdir ancak container görüntülerini yönetmeniz için Docker'ı daha iyi anlamanızı sağlamak amacıyla kullanılır.
Taşıma adımları, App Engine yapılandırma dosyalarını değiştirmeyi ve uygulamanızın nasıl başlaması gerektiğini belirtmeyi içerir. Aşağıda, her platform türünden bekleyebileceğiniz yapılandırma dosyalarını özetleyen bir tablo verilmiştir. App Engine sütununu Buildpacks sütunuyla (ve isteğe bağlı olarak Docker'ı) karşılaştırın:
Açıklama | App Engine | Docker | Derleme paketleri |
Genel yapılandırma |
|
| ( |
Üçüncü taraf kitaplıklar |
|
|
|
Üçüncü taraf yapılandırması |
| (Yok) | (Yok) |
Başlangıç | (yok) veya |
|
|
Dosyaları yoksay |
|
|
|
Uygulamanız, container mimarisine alındıktan sonra Cloud Run'a dağıtılabilir. Diğer Google Cloud container 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önergesine benzer bir role sahiptir. Örnek uygulamamızda Procfile
, Flask geliştirme sunucusunu başlatmak için python main.py
işlemini yürütecektir. İsterseniz gunicorn
gibi bir üretim web sunucusu da kullanabilirsiniz ve bu sunucuyu kullanırsanız requirements.txt
hizmetine eklediğinizden emin olun. Bu Cloud Run belgeleri sayfasından Buildpacks'i kullanarak kaynak kodundan nasıl dağıtım yapacağınız hakkında daha fazla bilgi edinin.
Yalnızca app.yaml entrypoint
yönergenizi bir Procfile
yönergesine taşımanız gerekir. Böyle bir uygulamanız yoksa, şimdilik Flask geliştirme sunucusunu kullanabilirsiniz. Bu, kullanıcılara bu taşıma işlemiyle ilgili bilgi vermek için sunulan örnek bir test uygulamasıdır. Uygulamanız, en iyi bildiğiniz belirli bir başlangıç komutu olacaktır. Cloud Run hizmeti, kapakların altında app.yaml
gibi görünen/işlem yapan bir service.yaml
oluşturur. Şuna benzer bir bağlantıyı ziyaret ederek otomatik olarak oluşturulan service.yaml
öğesini görebilirsiniz ancak SVC_NAME
ve REGION
hizmetiniz için: 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ının yapıldığı tarihte geçerli olan sürüm 20.0.4) requirements.txt
hizmetine gunicorn==20.0.4
ekleyin.
Üçüncü taraf yapılandırması
Buildpacks, Python 2'yi desteklemez. Bu nedenle, bu konudan bahsetmeyiz. Cloud Run'daki kapsayıcılarda çalışan Python 3 uygulamaları, Python 3 App Engine uygulamalarına benzerdir, requirements.txt
içinde üçüncü taraf kitaplıkların belirtilmesi gerekir.
Başlangıç
Python 3 kullanıcıları, app.yaml
dosyalarını handlers
bölümlerinde script: auto
yerine entrypoint
yönergesine dönüştürme seçeneğine sahiptir. Python 3 app.yaml
içinde entrypoint
kullanırsanız aşağıdaki gibi görünür:
runtime: python38
entrypoint: python main.py
entrypoint
yönergesi, App Engine'e sunucunuzu nasıl başlatacağını bildirir. Neredeyse doğrudan Procfile
içine taşıyabilirsiniz. Bir giriş noktası yönergesinin her iki platform arasında nereye gideceğini özetleme: Bu, doğrudan aşağıdaki anlama gelir; Docker eşdeğeri bilgi amaçlı olarak gösterilir:
- Derleme paketleri:
Procfile
içindeki satır:web: python main.py
- Docker:
Dockerfile
içindeki satır:ENTRYPOINT ["python", "main.py"]
Test ve hazırlık için Flask'ın geliştirme sunucusunu yukarıda açıklanan şekilde Python'dan çalıştırmak kolaydır. Ancak geliştiriciler, gunicorn
kullanan Cloud Run Hızlı Başlangıç örneği gibi üretim için daha güçlü bir şeyi tercih edebilirler.
Uygulama dosyaları
Tüm Modül 2 veya Modül 3 uygulamaları Python 2-3 ile tamamen uyumludur. Yani main.py
temel bileşenlerinde herhangi bir değişiklik yoktur; yalnızca birkaç satırlık başlangıç kodu ekleyeceğiz. Cloud Run'ın uygulamanızı çağırabilmesi için bağlantı noktası 8080'in açık olmasını gerektirdiğinden geliştirme sunucusunu başlatmak için main.py
öğesinin altına bir çift satır ekleyin:
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ın yerini Buildpacks'i aldı ve kaynak dosya güncellemeleri tamamlandı. Artık Cloud Run'da çalıştırmaya hazırsınız. Öncesinde kısaca hizmetlerden bahsedelim.
Hizmetler ve Uygulamalar
App Engine temel olarak uygulamaları barındırmak için geliştirilmiş olsa da aynı zamanda bir dizi mikro hizmetten oluşan web hizmetlerini veya uygulamaları barındırmaya yönelik bir platformdur. Cloud Run'da gerçek bir hizmet veya web arayüzü olan bir uygulama gibi her şey bir hizmettir. Bu nedenle, Cloud Run'ı bir uygulama yerine bir hizmetin dağıtımı olarak düşünebilirsiniz.
App Engine uygulamanız birden fazla hizmetten oluşmuyorsa uygulamalarınızı dağıtırken gerçekten herhangi bir adlandırma yapmanız gerekmiyordu. Bu durum Cloud Run'a bağlı olarak değişir. Burada hizmet adı bulmanız gerekir. App Engine'in appspot.com
alanı ise kendi proje kimliğini (ör. https://PROJECT_ID.appspot.com
ve bölge kimliği kısaltması, ör. http://PROJECT_ID.REGION_ID.r.appspot.com
.
Ancak bir Cloud Run hizmetinin alanı, hizmet adı, bölge kimliği kısaltması ve bir karma içerir ancak proje kimliğini (ör. https://SVC_NAME-HASH-REG_ABBR.a.run.app
. Sonuç olarak, bir hizmet adı düşünmeye başlayın!
Hizmeti dağıtın
Container görüntünüzü oluşturmak ve Cloud Run'a dağıtmak için aşağıdaki komutu yürütün. İstendiğinde bölgenizi seçin ve daha kolay test için kimliği doğrulanmamış bağlantılara izin verin. Ardından, dağıttığınız hizmetin adı SVC_NAME
olduğunda 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
komutunda da belirtildiği gibi kullanıcılar yukarıda gösterildiği gibi çıkışı ve etkileşimi azaltmak için çeşitli varsayılan ayarlar belirleyebilir. Örneğin, tüm etkileşimleri önlemek için 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
Bunu kullanırsanı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ını seçtiğinizden emin olun.
6. Özet/Temizlik
Uygulamanın, App Engine'de olduğu gibi Cloud Run'da da çalıştığından emin olun. Bu seriye, önceki codelab'lerden herhangi birini gerçekleştirmeden başladıysanız uygulamanın kendisi değişmez. ana web sayfasına (/
) yapılan tüm ziyaretleri kaydeder ve siteyi yeteri kadar kez ziyaret ettiğinizde aşağıdaki gibi görünür:
Kodunuz artık Modül 5 depo klasöründeki kodla eşleşmelidir. Tebrikler, bu Modül 5 codelab'ini tamamladınız.
İsteğe bağlı: Temizleme
Bir sonraki taşıma codelab'ine geçmeye hazır olana kadar faturalandırılmamak için temizlik yapmaya ne dersiniz? Şu anda farklı bir ürün kullandığınız için Cloud Run fiyatlandırma kılavuzunu incelemeyi unutmayın.
İsteğe bağlı: Hizmeti devre dışı bırakma
Henüz bir sonraki eğitime geçmeye hazır değilseniz ek ücretler alınmasını önlemek için hizmetinizi devre dışı bırakın. Bir sonraki codelab'e geçmeye hazır olduğunuzda projeyi yeniden etkinleştirebilirsiniz. Uygulamanız devre dışı bırakıldığında ücretlendirilecek trafik almazsınız ancak ücretsiz kotayı aşarsanız Datastore kullanımınız için faturalandırılabilirsiniz. Bu nedenle, bu sınırın altına düşecek kadar silin.
Diğer yandan, taşıma işlemlerine devam etmeyecekseniz ve her şeyi tamamen silmek istiyorsanız hizmetinizi silebilir veya projenizi tamamen kapatabilirsiniz.
Sonraki adımlar
Tebrikler, uygulamanızı container mimarisine aldınız. Böylece bu eğitim tamamlanmış oluyor. Sıradaki adım, 4. Modül codelab'inde Docker ile aynı işlemi nasıl yapacağınızı öğrenmek veya başka bir App Engine taşıma işlemi gerçekleştirmektir:
- 4. Modül: Docker ile Cloud Run'a Geçiş
- Docker ile Cloud Run'da çalışması için uygulamanızı container mimarisine alın
- Python 2'de kalmanızı sağlar
- 7. Modül: App Engine Aktarma Görev Sıraları ([push] Görev Sıraları kullanıyorsanız gereklidir)
- 1. Modül uygulamasına App Engine
taskqueue
aktarma görevleri ekler - Kullanıcıları Modül 8'de Cloud Tasks'a taşıma işlemi için hazırlar
- 1. Modül uygulamasına App Engine
- 3. Modül:
- Cloud NDB'den Cloud Datastore'a Datastore erişimini modernleştirme
- Bu, Python 3 App Engine uygulamaları ve App Engine dışı uygulamalar için kullanılan kitaplıktır
- 6. Modül: Cloud Firestore'a geçiş
- Firebase özelliklerine erişmek için Cloud Firestore'a geçiş yapın
- 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ü codelab'leri ile ilgili sorunlar/geri bildirimler
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ı:
- App Engine taşıma codelab'leri için sorun izleyici
Taşıma kaynakları
Modül 2 ve 3 (START) ile Modül 5 (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 |
(kod) | ||
(kod) | ||
5. Modül | (Yok) |
App Engine ve Cloud Run kaynakları
Bu taşıma işlemiyle ilgili ek kaynaklar aşağıda verilmiştir:
- Kapsayıcılar
- Genel