1. Giriş
Cloud Run, HTTP istekleriyle çağrılabilen durum bilgisiz container'lar çalıştırmanıza olanak tanıyan yönetilen bir işlem platformudur. Cloud Run, açık kaynak kodlu Knative projesi üzerinde derlenmiştir. Böylece iş yükleriniz platformlar arasında taşınabilir. Cloud Run sunucusuzdur: Tüm altyapı yönetimini soyutladığı için en önemli işe, yani harika uygulamalar geliştirmeye odaklanabilirsiniz.
Bu eğitimin amacı, bir "Hello World" Streamlit web uygulaması oluşturmak ve bunu Cloud Run'a dağıtmaktır.
Neler öğreneceksiniz?
- Streamlit "Hello World" uygulaması oluşturma
- Dağıtmadan önce Streamlit uygulamasını çalıştırarak uygulamayı test etme
- Cloud Buildpack'ler ve
requirements.txt
içindestreamlit
bulunmasının Dockerfile'a gerek kalmamasını nasıl sağladığı. - Streamlit uygulamasını Cloud Run'a dağıtma
2. Kurulum ve şartlar
Kendi hızınızda ortam kurulumu
- Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Henüz bir Gmail veya Google Workspace hesabınız yoksa oluşturmanız gerekir.
- Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Bu bilgiyi istediğiniz zaman güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğinize (genellikle
PROJECT_ID
olarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adım tamamlandıktan sonra değiştirilemez ve proje süresince geçerli kalır. - Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırılmayı önlemek için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
Cloud Shell'i başlatma
Google Cloud'u dizüstü bilgisayarınızdan uzaktan çalıştırabilirsiniz ancak bu eğitimde bulutta çalışan bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız.
Cloud Shell'i etkinleştirme
- Cloud Console'da Cloud Shell'i etkinleştir'i tıklayın.
Cloud Shell'i ilk kez başlatıyorsanız ne olduğunu açıklayan bir ara ekran gösterilir. Ara ekran gösterildiyse Devam'ı tıklayın.
Cloud Shell'in sağlanması ve bağlanması yalnızca birkaç dakikanızı alır.
Bu sanal makineye gereken tüm geliştirme araçları yüklenmiştir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde iyileştirilir. Bu codelab'deki çalışmalarınızın çoğu (hatta tamamı) tarayıcıyla yapılabilir.
Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını görürsünüz.
- Kimliğinizin doğrulandığını onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud auth list
Komut çıkışı
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- gcloud komutunun projeniz hakkında bilgi sahibi olduğunu doğrulamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project
Komut çıkışı
[core] project = <PROJECT_ID>
Değilse aşağıdaki komutla ayarlayabilirsiniz:
gcloud config set project <PROJECT_ID>
Komut çıkışı
Updated property [core/project].
3. API'leri etkinleştirme
Cloud Shell'den Artifact Registry, Cloud Build ve Cloud Run API'lerini etkinleştirin:
gcloud services enable \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
run.googleapis.com
Bu işlem, aşağıdakine benzer bir başarı mesajı verir:
Operation "operations/..." finished successfully.
Artık çalışmaya ve uygulamanızı yazmaya başlayabilirsiniz...
4. Uygulamayı yazma
Bu adımda, HTTP isteklerine yanıt veren bir "Hello World" Streamlit Python uygulaması oluşturacaksınız.
Çalışma dizini
helloworld-streamlit
adlı bir çalışma dizini oluşturmak ve bu dizine geçmek için Cloud Shell'i kullanın:
mkdir ~/helloworld-streamlit && cd ~/helloworld-streamlit
main.py
main.py
adlı bir dosya oluşturun:
touch main.py
Dosyayı tercih ettiğiniz komut satırı düzenleyiciyle (nano, vim veya emacs) ya da Cloud Shell Düzenleyici düğmesini tıklayarak düzenleyin:
Dosyayı doğrudan Cloud Shell Düzenleyici ile düzenlemek için şu komutu kullanın:
cloudshell edit main.py
main.py
import streamlit as st
st.title("Hello World! 👋🌎")
st.markdown(
"""
This is a demo Streamlit app.
Enter your name in the text box below and press a button to see some fun features in Streamlit.
"""
)
name = st.text_input("Enter your name:")
# Use columns to create buttons side by side
col1, col2 = st.columns(2)
with col1:
if st.button("Send balloons! 🎈"):
st.balloons()
st.write(f"Time to celebrate {name}! 🥳")
st.write("You deployed a Streamlit app! 👏")
with col2:
if st.button("Send snow! ❄️"):
st.snow()
st.write(f"Let it snow {name}! 🌨️")
st.write("You deployed a Streamlit app! 👏")
Bu kod, HTTP GET isteklerine kullanıcı dostu bir mesajla yanıt veren temel bir web hizmeti oluşturur.
requirements.txt
Terminali yeniden açın ve bağımlılıkları tanımlamak için requirements.txt
adlı bir dosya ekleyin:
touch requirements.txt
Dosyayı doğrudan Cloud Shell Düzenleyici ile düzenlemek için şu komutu kullanın:
cloudshell edit requirements.txt
requirements.txt
# https://pypi.org/project/streamlit
streamlit==1.47.0
Streamlit uygulaması dağıtıma hazır ancak önce test edelim...
5. Uygulamayı test etme
Uygulamayı test etmek için Cloud Shell'e önceden yüklenmiş olan uv'yi (Python'ın son derece hızlı paket ve proje yöneticisi) kullanın.
Uygulamayı test etmek için sanal bir ortam oluşturun:
uv venv
Bağımlılıkları yükleyin:
uv pip install -r requirements.txt
streamlit run
kullanarak uygulamayı başlatın (--server.enableCORS
, Cloud Shell'i etkilediği için test sırasında devre dışı bırakılır):
uv run streamlit run main.py --server.port=8080 --server.enableCORS=false
Günlükler, Streamlit uygulamasının çalıştığını gösterir:
You can now view your Streamlit app in your browser. Local URL: http://localhost:8080 Network URL: http://10.1.0.1:8080 External URL: http://34.37.7.94:8080
Cloud Shell penceresinde Web Preview
simgesini tıklayın ve Preview on port 8080
seçeneğini belirleyin:
Bu işlemle Hello World! 👋🌎
başlığını gösteren bir tarayıcı penceresi açılır.
Adınızı girmeyi ve ekrandaki iki düğmeyi test etmeyi deneyin.
İşiniz bittiğinde ana Cloud Shell oturumuna dönün ve Streamlit uygulamasını CTRL+C
ile durdurun.
Uygulama beklendiği gibi çalışıyor: dağıtım zamanı...
6. Cloud Run'a dağıt
Cloud Run bölgeseldir. Bu nedenle, Cloud Run hizmetlerinizi çalıştıran altyapı belirli bir bölgede bulunur ve Google tarafından bu bölgedeki tüm bölgelerde yedekli olarak kullanılabilir şekilde yönetilir. Dağıtımınız için kullanacağınız bölgeyi tanımlayın. Örneğin:
REGION=europe-west1
Çalışma dizininde olduğunuzdan emin olun:
ls
Bu işlem sonucunda aşağıdaki dosyalar listelenmelidir:
main.py requirements.txt
Dağıtmadan önce, içinde .venv/
olan bir .gcloudignore
dosyası oluşturun. Bu işlem, Cloud Run dağıtımının yerel test sırasında uv
ile oluşturulan sanal ortamı içermesini engeller.
Aşağıdaki komutla .gcloudignore
oluşturun:
echo ".venv/" > .gcloudignore
Uygulamayı Cloud Run'a dağıtın:
gcloud run deploy helloworld-streamlit \
--source . \
--region $REGION \
--allow-unauthenticated
--allow-unauthenticated
seçeneği, hizmeti herkese açık hâle getirir. Kimliği doğrulanmamış istekleri önlemek için bunun yerine--no-allow-unauthenticated
politikasını kullanın.
İlk kez kullandığınızda Artifact Registry deposu oluşturmanız istenir. Doğrulamak için Enter
simgesine dokunun:
Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [REGION] will be created. Do you want to continue (Y/n)?
Bu işlem, kaynak kodunuzun Artifact Registry deposuna yüklenmesini ve kapsayıcı görüntünüzün oluşturulmasını başlatır:
Building using Buildpacks and deploying container ... * Building and deploying new service... Building Container. OK Creating Container Repository... OK Uploading sources... * Building Container... Logs are available at ...
Ardından, dağıtım tamamlanana kadar bekleyin. İşlem başarılı olduğunda komut satırında hizmet URL'si gösterilir:
... OK Building and deploying new service... Done. OK Creating Container Repository... OK Uploading sources... OK Building Container... Logs are available at ... OK Creating Revision... Creating Service. OK Routing traffic... OK Setting IAM Policy... Done. Service [SERVICE]... has been deployed and is serving 100 percent of traffic. Service URL: https://SERVICE-PROJECTHASH-REGIONID.a.run.app
Hizmet URL'sini şu komutla alabilirsiniz:
SERVICE_URL=$( \
gcloud run services describe helloworld-streamlit \
--region $REGION \
--format "value(status.address.url)" \
)
echo $SERVICE_URL
Aşağıdakine benzer bir ifade gösterilir:
https://helloworld-streamlit-PROJECTHASH-REGIONID.a.run.app
Artık hizmet URL'sini bir web tarayıcısında açarak uygulamanızı kullanabilirsiniz:
Tebrikler! Cloud Run'a bir uygulama dağıttınız. Cloud Run, alınan istekleri işlemek için kapsayıcı resminizi otomatik olarak ve yatay yönde ölçeklendirir, talep azaldığında ise ölçeği küçültür. Yalnızca bu Cloud Run hizmeti için istek işleme sırasında kullanılan CPU, bellek ve ağ iletişimi için ödeme yaparsınız.
7. Temizleme
Cloud Run, hizmet kullanılmadığında ücret almaz ancak container görüntüsünü Artifact Registry'de depoladığınız için ücretlendirilebilirsiniz. Ücretlendirilmemek için deponuzu veya Cloud projenizi silebilirsiniz. Cloud projenizi sildiğinizde, bu projede kullanılan tüm kaynaklar için faturalandırma durdurulur.
Kapsayıcı resmi deponuzu silmek için:
gcloud artifacts repositories delete cloud-run-source-deploy \
--location $REGION
Cloud Run hizmetinizi silmek için:
gcloud run services delete helloworld-streamlit \
--region $REGION
Google Cloud projenizi silmek için:
- Mevcut proje kimliğinizi alın:
PROJECT_ID=$(gcloud config get-value core/project)
- Silmek istediğiniz proje olduğundan emin olun:
echo $PROJECT_ID
- Projeyi silme:
gcloud projects delete $PROJECT_ID
8. Tebrikler!
"Hello World" Streamlit web uygulaması oluşturup Cloud Run'a dağıttınız.
İşlediğimiz konular
- Streamlit "Hello World" uygulaması oluşturma
- Dağıtmadan önce Streamlit uygulamasını çalıştırarak uygulamayı test etme
- Cloud Buildpack'ler ve
requirements.txt
içindestreamlit
bulunmasının Dockerfile'a gerek kalmamasını nasıl sağladığı. - Streamlit uygulamasını Cloud Run'a dağıtma
Daha fazla bilgi
- Cloud Run belgelerine göz atın.
- Daha fazla seçeneği keşfetmek için Cloud Run ile Üç Kolay Adımda Geliştirmeden Üretime başlıklı kılavuzu tamamlayın.
- Cloud SQL veritabanı oluşturmak, Secret Manager ile kimlik bilgilerini yönetmek ve Django'yu dağıtmak için Cloud Run'da Django görevini tamamlayın.
- Diğer Cloud Run Codelab uygulamalarına göz atın...