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, Cloud Run'da tümüyle yönetilen hizmete dağıtım yapmak için App Engine uygulamalarını nasıl container mimarisine alacağınız öğretilmektedir. Docker, sektörde container'larda uygulama geliştirme, gönderme ve çalıştırma konularında bilinen bir platformdur. Python 2 geliştiricileri için bu eğitim Modül 2 Cloud NDB App Engine örnek uygulamasıyla, Python 3 geliştiricileri ise Modül 3 Cloud Datastore örneğiyle başlar.
Neler öğreneceksiniz?
- Docker'ı kullanarak uygulamanızı container mimarisine alma
- 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
- Önerilen: Modül 2 codelab'i veya Modül 3 codelab'ini tamamlayın
- Çalışan bir App Engine uygulaması container mimarisine alınmaya hazır.
- Python 2: Modül 2 Cloud NDB örneği
- Python 3: Modül 3 Cloud Datastore örneği
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, App Engine yapılandırma dosyalarını kapsayıcı yapılandırmasıyla değiştirerek uygulamanızı nasıl container mimarisine alacağınızı, kapsayıcıya nelerin gireceğini belirleyip uygulamanızı nasıl başlatacağınızı öğreneceksiniz. Bunların birçoğu App Engine tarafından otomatik olarak işlenir.
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 Modül 3 örnek uygulamasına sahip olmaktır. AdSense hesabınız yoksa buraya geçmeden önce iki eğitimden birini (yukarıdaki bağlantılar) tamamlayın. Aksi takdirde, modül içeriğine aşinaysanız aşağıdaki Modül 2 veya 3 kodunu alabilirsiniz.
Bu eğitimin Python 2 sürümünü ve benzer şekilde Python 3 için Modül 3 kodunu BAŞLATacağımız yer, sizin veya bizimkinin Modül 2 kodudur. Bu Modül 4 codelab'i, her adımda size yol gösterir. Seçeneklerinize bağlı olarak, tamamlandığında Modül 4 depo klasörlerinden (FINISH) birine benzeyen bir kod elde edersiniz.
- Python 2 (Cloud NDB uygulaması)
- START: Modül 2 kodu
- FINISH: Modül 4 kodu
- Python 3 (Cloud Datastore uygulaması)
- START: Modül 3 kodu
- FINISH: Modül 4 kodu
- Deponun tamamı (ZIP dosyasını klonlamak veya indirmek için)
Python 2 Modül 2 BAŞLANGIÇ dosyalarının dizini (sizin ya da bizimki) şöyle görünmelidir:
$ ls
README.md appengine_config.py requirements.txt
app.yaml main.py templates
Kendi Modül 2 (2.x) kodunuzu kullanıyorsanız bir lib
klasörünüz de olur. Python 3 için lib
veya appengine_config.py
kullanılmaz. Modül 3 (3.x) STARTing kodu aşağıdaki gibi görünür:
$ 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.
Container'lar ve Docker'ı biliyorsanız ve Cloud Run için App Engine uygulamanızı container mimarisine alma hakkında daha fazla bilgi edinmek istiyorsanız doğru yerdesiniz. Daha sonra Modül 5 codelab'i de (bununla aynı şekilde, Cloud Buildpacks'te) yapabilirsiniz. Barebones örnek uygulamamız, daha önce belirtilen Dockerfile
sorunlarından bazılarını önleyecek kadar hafif.
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 Docker sütunuyla (ve isteğe bağlı olarak Buildpacks) 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'den taşıma işlemi, app.yaml
yerine container'ın nasıl oluşturulacağını ve çalıştırılacağını özetleyen bir Dockerfile
ile değiştirilmesi anlamına gelir. App Engine, uygulamanızı otomatik olarak başlatır ancak Cloud Run başlatmaz. Dockerfile
ENTRYPOINT
ve CMD
komutları bu işleve yöneliktir. Dockerfile
hakkında daha fazla bilgi edinmek için bu Cloud Run belgeleri sayfasını inceleyebilir ve gunicorn
sonucunu veren bir Dockerfile
örneğini inceleyebilirsiniz.
Dockerfile
içinde ENTRYPOINT
veya CMD
kullanmaya alternatif olarak Procfile
da kullanılabilir. Son olarak, .dockerignore
uygulama dışı dosyaları filtreleyerek kapsayıcı boyutunu küçük tutmanıza yardımcı olur. Yakında bu konularla ilgili daha fazla bilgi paylaşacağız.
app.yaml
örneğini sil ve Dockerfile
alanını oluştur
app.yaml
, kapsayıcılarda kullanılmaz. Bu nedenle şimdi silin. Kapsayıcı yapılandırma dosyası Dockerfile
, örnek uygulamamız için yalnızca minimum bir dosya gerekiyor. Kullandığınız Python sürümüne bağlı olarak, NNN
yerine 2
veya 3
koyarak Dockerfile
öğenizi bu içerikle oluşturun:
FROM python:NNN-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
ENTRYPOINT ["python", "main.py"]
Dockerfile
öğesinin büyük kısmı, container'ın nasıl başlatılacağını belirten ENTRYPOINT
hariç, kapsayıcının nasıl oluşturulacağını belirtir. Bu örnekte, Flask geliştirme sunucusunu yürütmek için python main.py
çağrılır. Docker'ı kullanmaya yeni başladıysanız FROM
yönergesi, başlangıçtaki temel görüntüyü ve "slim"i belirtir minimum Python dağıtımı anlamına gelir. Docker Python görüntüleri sayfasından daha fazla bilgi edinebilirsiniz.
Ortadaki komut grubu, çalışma dizinini (/app
) oluşturur, uygulama dosyalarını kopyalar, ardından pip install
komutunu çalıştırarak üçüncü taraf kitaplıkları kapsayıcıya taşır. WORKDIR
, Linux mkdir
ve cd
komutlarını birleştirir; WORKDIR
belgelerinden bu konu hakkında daha fazla bilgi edinebilirsiniz. COPY
ve RUN
yönergeleri yeterince açıklayıcıdır.
Üçüncü taraf kitaplıklar
requirements.txt
dosyası aynı kalabilir; 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ı
Python 2 App Engine geliştiricileri, 3. taraf kitaplıkların lib
klasörüne kopyalandığını (requirements.txt
içinde referans verilen, app.yaml
içinde maddeler halinde belirtilmiştir) ve appengine_config.py
tarafından desteklendiğini bilir. Python 3 App Engine uygulamaları gibi kapsayıcılar yalnızca requirements.txt
kullanır. Bu nedenle diğer tüm öğeler kaldırılabilir. Diğer bir deyişle, 2.x App Engine uygulamanız varsa appengine_config.py
ve tüm lib
klasörlerini hemen silin .
Başlangıç
Python 2 kullanıcıları, App Engine'in web sunucusunu başlatmaz ancak bir container'a taşınırken bunu yapmanız gerekir. Bu işlem, Dockerfile
uygulamasına uygulamanızı nasıl başlatacağınızı belirten bir CMD
veya ENTRYPOINT
yönergesi eklenerek yapılır. Bu işlem, aşağıda Python 3 kullanıcılarıyla aynı şekilde açıklanmıştır.
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 Dockerfile
içine taşıyabilirsiniz (veya uygulamanızı container mimarisine almak için Buildpacks'i [5. Modül'e bakın] kullanıyorsanız Procfile
) taşıyabilirsiniz. Bir giriş noktası yönergesinin her iki platform arasında nereye gideceği özetlenir:
- Docker:
Dockerfile
içindeki satır:ENTRYPOINT ["python", "main.py"]
- Derleme paketleri:
Procfile
içindeki satır:web: python main.py
Test için Flask geliştirme sunucusunu kullanabilirsiniz. Ancak uygulamanızda gunicorn
gibi bir üretim sunucusu kullanıyorsanız ENTRYPOINT
veya CMD
yönergenizi Cloud Run Hızlı Başlangıç örneğindeki gibi bu sunucuya yönlendirdiğinizden emin olun.
Dosyaları yoksay
Kapsayıcınızın boyutunu kırpmak ve kapsayıcı görüntünüzü aşağıdaki gibi gereksiz dosyalarla doldurmamak için bir .dockerignore
dosyası oluşturmanızı öneririz:
*.md
*.pyc
*.pyo
.git/
.gitignore
__pycache__
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
Docker yapılandırması ve kaynak dosya güncellemeleri tamamlandıktan sonra, Docker'ı Cloud Run'da çalıştırmaya hazırsınız demektir. Ö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 beta 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 Dockerfile and deploying container to Cloud Run service [SVC_NAME] in project [PROJECT_ID] region [REGION] ✓ Building and deploying new service... Done. ✓ Uploading sources... ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/BUILD-HASH?project=PROJECT_NUM]. ✓ Creating Revision... Deploying Revision. ✓ Routing traffic... ✓ Setting IAM Policy... Done. Service [SVC_NAME] revision [SVC_NAME-00001-vos] 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 4 depo klasöründe bulunanla (2.x veya 3.x) eşleşmelidir. Tebrikler, bu Modül 4 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, Modül 5 codelab'inde Cloud Buildpacks ile aynı işlemi nasıl yapacağınızı öğrenmek veya başka bir App Engine taşıma işlemi üzerinde çalışmaktır:
- Henüz yapmadıysanız Python 3'e geçin. Örnek uygulama zaten 2.x ve 3.x sürümleriyle uyumludur. Dolayısıyla, tek değişiklik Docker kullanıcılarının,
Dockerfile
uygulamalarını bir Python 3 görüntüsü kullanacak şekilde güncellemesidir. - 5. Modül: Cloud Buildpacks ile Cloud Run'a Geçiş
- Cloud Buildpacks ile uygulamanızı Cloud Run'da çalıştırmak için container mimarisine alın
- Docker, container'lar veya
Dockerfile
hakkında bilgi sahibi olmanız gerekmez. - Uygulamanızı Python 3'e taşımış olmanız gerekir
- 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 4'e (FINISH) ait 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) | ||
4. Modül |
App Engine ve Cloud Run kaynakları
Bu taşıma işlemiyle ilgili ek kaynaklar aşağıda verilmiştir:
- Kapsayıcılar
- Genel