1. Genel Bakış

Google App Engine uygulamaları kolayca oluşturulabilir, kolayca korunabilir ve trafik ile veri depolama ihtiyaçlarınız değiştikçe kolayca ölçeklendirilebilir. App Engine ile bakımını yapmanız gereken sunucu yoktur. Uygulamanızı yüklemeniz yeterlidir.
Bu codelab'de, Flask web çerçevesiyle yazılmış basit bir Python web uygulamasını nasıl dağıtacağınızı öğreneceksiniz. Bu örnekte Flask kullanılsa da Django, Pyramid, Bottle ve web.py gibi diğer web çerçevelerini de kullanabilirsiniz.
Bu eğitim, https://cloud.google.com/appengine/docs/standard/python3/quickstart adresinden uyarlanmıştır.
Neler öğreneceksiniz?
- Google App Engine'de basit bir Python sunucusu oluşturma
- Sunucuyu kapatmadan kodu güncelleme
İhtiyacınız olanlar
- Python kullanma konusunda bilgi sahibi olma
- vim, emacs veya nano gibi standart Linux metin düzenleyicileri hakkında bilgi sahibi olmanız gerekir.
Anket
Bu eğitimi nasıl kullanacaksınız?
Python ile ilgili deneyiminizi nasıl değerlendirirsiniz?
Google Cloud hizmetleriyle ilgili deneyiminizi nasıl değerlendirirsiniz?
2. Kurulum ve şartlar
Yönlendirmesiz ortam kurulumu
- Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap 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_IDolarak 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, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir ancak bu codelab'de 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 temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır.

Bu sanal makineye, ihtiyaç duyacağınız tüm geliştirme araçları yüklenmiştir. 5 GB boyutunda kalıcı bir ana dizin bulunur ve Google Cloud'da çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki çalışmalarınızın neredeyse tamamını tarayıcıyla yapabilirsiniz.
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 şu 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 onaylamak 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 şu komutla ayarlayabilirsiniz:
gcloud config set project <PROJECT_ID>
Komut çıkışı
Updated property [core/project].
3. Web uygulamasını yazma
Cloud Shell başlatıldıktan sonra Cloud SDK gcloud komutunu veya sanal makine örneğinde bulunan diğer araçları çağırmak için komut satırını kullanabilirsiniz. Projeler genelinde ve Cloud Shell oturumları arasında dosya depolamak için kalıcı disk depolama alanındaki $HOME dizininizi kullanabilirsiniz. $HOME dizini size özeldir ve bu dizine başka kullanıcılar erişemez.
Uygulama için $HOME dizininizde yeni bir klasör oluşturarak başlayalım:
mkdir ~/helloworld cd ~/helloworld
main.py adlı bir dosya oluşturun:
touch main.py
Dosyayı tercih ettiğiniz komut satırı düzenleyicisiyle (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 flask
# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)
@app.get("/")
def hello():
"""Return a friendly HTTP greeting."""
return "Hello World!\n"
if __name__ == "__main__":
# Used when running locally only. When deploying to Google App
# Engine, a webserver process such as Gunicorn will serve the app. This
# can be configured by adding an `entrypoint` to app.yaml.
app.run(host="localhost", port=8080, debug=True)
4. Bağımlılıkları tanımlama
Web uygulamanızın bağımlılıklarını belirtmek için terminale geri dönün ve projenizin kök dizininde, kullanılacak Flask'ın tam sürümünü içeren bir requirements.txt dosyası oluşturun:
touch requirements.txt
Dosyayı Cloud Shell Düzenleyici ile düzenlemek için şu komutu kullanın:
cloudshell edit requirements.txt
requirements.txt
# https://pypi.org/project/Flask
Flask==3.0.2
5. Dağıtımı yapılandırma
Web uygulamanızı App Engine'e dağıtmak için app.yaml dosyasına ihtiyacınız vardır. Bu yapılandırma dosyası, web uygulamanızın App Engine ayarlarını tanımlar.
Terminalden, projenizin kök dizininde app.yaml dosyasını oluşturun ve düzenleyin:
touch app.yaml
Dosyayı Cloud Shell Düzenleyici ile düzenlemek için şu komutu kullanın:
cloudshell edit app.yaml
app.yaml
runtime: python312
6. Web uygulamasını dağıtma
Terminalden dizininizin içeriğini kontrol edin:
ls
Aşağıdaki 3 dosyanız olmalıdır:
app.yaml main.py requirements.txt
Aşağıdaki komutla web uygulamanızı dağıtın:
gcloud app deploy
İlk kez kullanırken bir dağıtım bölgesi seçmeniz gerekir:
Please choose the region where you want your App Engine application located: [1] asia-east2 ... [7] australia-southeast1 [8] europe-west [9] europe-west2 ... [12] northamerica-northeast1 [13] southamerica-east1 ... [19] us-west4 ... Please enter your numeric choice:
Dağıtımı başlatmayı onaylayın:
Creating App Engine application in project [PROJECT_ID] and region [REGION]....done. Services to deploy: descriptor: [~/helloworld/app.yaml] source: [~/helloworld] target project: [PROJECT_ID] target service: [default] target version: [YYYYMMDDtHHMMSS] target url: [https://PROJECT_ID.REGION_ID.r.appspot.com] Do you want to continue (Y/n)?
Uygulamanız dağıtılır:
Beginning deployment of service [default]... Created .gcloudignore file. See `gcloud topic gcloudignore` for details. Uploading 3 files to Google Cloud Storage 100% File upload done. Updating service [default]...done. Setting traffic split for service [default]...done. Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]
Web uygulamanız artık https://PROJECT_ID.REGION_ID.r.appspot.com adresindeki HTTP isteklerine yanıt vermeye hazır.
7. Web uygulamasını test etme
Web uygulamanız https://PROJECT_ID.REGION_ID.r.appspot.com üzerinde HTTP isteklerine yanıt vermeye hazır.
Öncelikle gcloud app describe komutuyla web uygulamanızın ana makine adını alın:
APPENGINE_HOSTNAME=$(gcloud app describe --format "value(defaultHostname)")
Web uygulamanızı şu basit HTTP GET isteğiyle test edin:
curl https://$APPENGINE_HOSTNAME
Şu yanıtı alırsınız:
Hello World!
Özet
Önceki adımlarda basit bir Python web uygulaması ayarladınız, uygulamayı çalıştırdınız ve App Engine'e dağıttınız.
8. Web uygulamasını güncelleme
main.py dosyanızdaki hello() işlev gövdesini değiştirerek web uygulamanızı düzenleyin.
Dosyayı Cloud Shell Düzenleyici ile düzenlemek için şu komutu kullanın:
cloudshell edit main.py
main.py
import flask
# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)
@app.get("/")
def hello():
"""Return a friendly HTTP greeting."""
# return "Hello World!\n" # ← Replace this line
who = flask.request.args.get("who", "World")
return f"Hello {who}!\n"
if __name__ == "__main__":
# Used when running locally only. When deploying to Google App
# Engine, a webserver process such as Gunicorn will serve the app. This
# can be configured by adding an `entrypoint` to app.yaml.
app.run(host="localhost", port=8080, debug=True)
Web uygulamanızı güncellemek için terminalden yeniden dağıtın:
gcloud app deploy --quiet
Uygulamanızın yeni sürümü dağıtılır:
Beginning deployment of service [default]... Uploading 1 file to Google Cloud Storage ... Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]
Web uygulamanızın yeni sürümünü daha önce yaptığınız gibi test edin:
curl https://$APPENGINE_HOSTNAME
Aynı yanıtı alırsınız:
Hello World!
İsteğe bağlı parametreyle test edin:
curl https://$APPENGINE_HOSTNAME?who=Universe
Şu yanıtı alırsınız:
Hello Universe!
Özet
Bu adımda, web uygulamanızı herhangi bir hizmet kesintisi olmadan güncelleyip yeniden dağıttınız.
9. Tebrikler!
Python'da ilk App Engine web uygulamanızı yazmayı öğrendiniz.
Daha fazla bilgi
- App Engine Belgeleri: https://cloud.google.com/appengine
- App Engine'de tam teşekküllü bir Python uygulaması yazmak için bu eğitimi inceleyin: https://cloud.google.com/appengine/docs/standard/python3/building-app
Lisans
Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.