5. Modül: Cloud Buildpacks ile Google App Engine'den Cloud Run'a Taşıma

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

Anket

Bu codelab'i nasıl kullanacaksınız?

Yalnızca baştan sona oku Okuyun ve alıştırmaları tamamlayın

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:

  1. 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.

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:

  1. gcloud komut satırı aracını yeniden tanıma
  2. Örnek uygulamayı gcloud app deploy ile yeniden dağıtın
  3. 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

app.yaml

Dockerfile

(service.yaml)

Üçüncü taraf kitaplıklar

requirements.txt

requirements.txt

requirements.txt

Üçüncü taraf yapılandırması

app.yaml (artı appengine_config.py ve lib [yalnızca 2.x])

(Yok)

(Yok)

Başlangıç

(yok) veya app.yaml (entrypoint kullanılıyorsa)

Dockerfile

Procfile

Dosyaları yoksay

.gcloudignore ve .gitignore

.gcloudignore, .gitignore ve .dockerignore

.gcloudignore ve .gitignore

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:

ziyaretme uygulaması

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
  • 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ı:

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

2. Modül

kod

(kod)

3. Modül

(kod)

kod

5. Modül

(Yok)

kod

App Engine ve Cloud Run kaynakları

Bu taşıma işlemiyle ilgili ek kaynaklar aşağıda verilmiştir: