GCP Cloud Run Üzerine Container Deploy Edilmesi

Ajiyba Nesij Korkmaz
4 min readMar 27, 2020

--

Bu yazıda kendi bilgisayarımda oluşturduğum Python ile yazılmış Flask framework kullanılan basit bir hello world projesini Google Cloud platformu üzerine deploy ederek çalışabilir hale getirmekten bahsedeceğim.

Öncelikle bu yazıda size iki servisten bahsedeceğim bunlar Cloud Run ve Container Registry servisleri.

Cloud Run

  • Tamamen sizin yönetebildiğiniz kaynaklar ile çalışan sunucusuz olarak containerları çalıştırabildiğiniz bir Google Cloud servisidir.
  • Bu servis Containerlarınızı hızlı bir şekilde çalışır hale getirir ve size container içerisindeki uygulamanıza ulaşabileceğiniz SSL sertifikalı bir adres verir.
  • Cloud Run iyi yanlarından biri sıfırdan bir sunucu kurup konfigrasyonu ile zaman kaybetmemenizi sağlar. Ayrıca container çalıştırmasından ötürü dilden bağımsızdır.
  • Diğer bir iyi yanı da containerın trafiğini dinleyerek sadece istek atıldığı sürece yani kaynak kullandığı süre boyunca ücretlendirme yapar.

Container Registry

  • Container Registry Docker imajlarınızı yükleyebildiğiniz ve dağıtımını yapabildiğiniz bir servistir.
  • Cloud Run üzerinde uygulamamızı çalışır hale getirirken Container Registry üzerindeki imajı kullanılıyoruz.
  • Günlük 120 dakika build etme süresini ücretsiz olarak kullanabiliyoruz.

Not : Başlamadan önce Google Cloud Platform hesabınız olmalı ve faturalandırma için gerekli işlemleri yapmış olmanız gerekiyor.

Not : Bilgisayarınızda Google Cloud SDK yüklü olmalıdır. Eğer yüklü değilse daha önceki yazılarımdan nasıl yükleyebileceğinizi görebilirsiniz.

1. Proje Dosyalarının hazırlanması

Proje yapısı şuaşağıdaki şekilde olacaktır.

helloworldproject
-> index.py
-> Dockerfile

index.py dosyasının içeriği aşağıdaki gibidir.

index.py dosyasına buradan ulaşabilirsiniz.

Uygulamanızın çalışacağı port 8080 olmak zorundadır. Bunun nedeni Cloud Run servisi 8080 portunun trafiğini dinleyerek istek geldiğinde uygulamanız aktif oluyor ve bu sayede sadece kullanıldığı kadar ücretlendirme yapmaktadır.

Dockerfile dosyası içeriği aşağıdaki gibidir.

Dockerfile dosyasına buradan ulaşabilirsiniz.

Base imaj olarak python:alphine3.7 kullanıyorum. index.py dosyasının çalışması için Flask kurulumu yapılması gerekiyor RUN komutu ile bu kurulum gerçekleştiriliyor. Container’ın Cloud Run tarafından dinlenebilmesi için 8080 portunu EXPOSE komutu ile bağlıyorum.

2. Google Cloud SDK Kullanarak Yeni Proje Oluşturulması

Aşağıdaki komutu projenizin bulunduğu dizinde terminale yazmalısınız. Eğer login olmamışsanız zaten size bir uyarı veriyor ve uyarıdaki adımları izleyerek Google hesabınız ile giriş yapabilirsiniz.

Ayrıca GCP arayüzünden veya komut satırında bu proje için faturalandırmayı aktif hale getirmeniz gerekmektedir.

gcloud projects create helloworldprojesi

Bu komut ile GCP üzerinde yeni bir proje oluşturduk ve imajımızı bu proje içerisindeki Container Registry ile build edeceğiz.

3. Proje için Container Registry ve Cloud Run Servislerini Aktif Etme

Servisleri aktif etmeden önce oluşturduğumuz proje için faturalandırma hesabını bağlamamız gerekiyor. Bunu arayüz üzerinden veya gcloud komutları ile yapabilirsiniz.

gcloud services enable cloudbuild.googleapis.com 
gcloud services enable run.googleapis.com

4. Projenin Container Reqistry Üzerine Deploy Edilmesi

Bu aşamada hazırlamış olduğumuz Dockerfile dosyası kullanılarak google cloud platformu üzerinde erişebileceğimiz ve dağıtabileceğimiz bir Docker imaj haline getirilir. Daha sonrası için bu imajı Cloud Run üzerinden kullanacağım.

gcloud builds submit --tag gcr.io/helloworldprojesi/helloworldimage
Oluşturulan Docker imajını arayüz üzerinden de görüntüleyebilirsiniz.

5. Oluşturulan Docker İmajının Cloud Run Servisinde Çalıştırılması

Cloud Run üzerinde Docker imajını çalışır hale getirirken belirli parametreler var. Bu paramatreler şunlardır;

  • Region : Containerın çalışacağı bölgeyi seçmemiz gerekiyor. Zorunludur.
asia-east1 (Taiwan)
asia-northeast1 (Tokyo)
europe-north1 (Finland)
europe-west1 (Belgium)
europe-west4 (Netherlands)
us-central1 (Iowa)
us-east1 (South Carolina)
us-east4 (Northern Virginia)
us-west1 (Oregon)
  • CPU Miktarı : Minimum 1 maksimum 2 seçebiliyoruz ve seçilmezse varsayılan CPU miktarı 1 olarak belirlenir.
  • Bellek Miktarı : Seçilmez ise varsayılan bellek miktarı 256Mb olarak belirlernir. Özel bellek miktarı seçileceği gibi hazır 128Mb, 250Mb, 512Mb, 1Gb ve 2Gb.
  • Container Başına Maksimum İstek Sayısı : Seçilmezse varsayılan 80 istek olarak belirlenir.
  • İstek Zaman Aşımı : Seçilmezse maksimum değer olarak 900 saniye varsayılan olarak belirlenir.
  • Otomatik Ölçekleme : Trafik miktarına göre container’ın ne kadar ölçeklenmesi gerektiği belirlenir. Seçilmezse varsayılan değer 1 olarak belirlenir. Maksimum seçilebilecek değer ise 1000.

Ben çalışacak uygulamaya helloapp adını veriyorum ve bölge olarak europe-west4 seçiyorum. Diğer parametreleri ise varsayılan değerler olarak kalmasını istiyorum zaten daha sonrasında ayarlayabilmeme izin veriliyor. Aşağıdaki komut başarılı bir şekilde çalıştırıldığında uygulamam hazır hale geliyor ve bana uygulamama erişebilmem için SSL sertifikalı bir adres verecek.

gcloud run deploy helloapp --image  gcr.io/helloworldprojesi/helloworldimage --platform managed --region europe-west4 --allow-unauthenticated
Altı çizili kısım çalışan container’a ulaşabileceğimiz adrestir.

Uygulamamız artık erişebilir bir durumdadır. Ayrıca aşağıdaki komut ile oluşturduğumuz uygulamaya ait bilgileri görebiliriz.

gcloud run services describe helloapp --platform managed --region europe-west4

--

--

No responses yet