1. Genel Bakış
Google App Engine uygulamalarının oluşturulması ve bakımı kolaydır, ayrıca trafik ve veri depolama ihtiyaçlarınız değiştikçe kolayca ölçeklendirilebilirler. App Engine'de bakım gerektiren bir sunucu yoktur. Uygulamanızı yükleyip kullanıma hazır hale getirmeniz yeterli.
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 siz Django, Pyramid, Bottle ve web.py gibi diğer web çerçevelerini 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.
Gerekenler
- Python kullanımı hakkında bilgi
- Vim, emacs veya nano gibi standart Linux metin düzenleyicileri hakkında bilgi
Anket
Bu eğiticiden nasıl yararlanacaksınız?
Python deneyiminizi nasıl değerlendirirsiniz?
Google Cloud hizmetleriyle ilgili deneyiminizi nasıl değerlendirirsiniz?
2. Kurulum ve şartlar
Kendi hızınızda ortam kurulumu
- Google Cloud Console'da oturum açıp 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. İstediğiniz zaman güncelleyebilirsiniz.
- Proje Kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de proje kimliğinizi (genellikle
PROJECT_ID
olarak tanımlanır) belirtmeniz gerekir. Oluşturulan kimliği beğenmezseniz rastgele bir kimlik daha oluşturabilirsiniz. Alternatif olarak, kendi ölçümünüzü deneyip mevcut olup olmadığına bakabilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince kalır. - Bilginiz olması açısından, bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Sonraki adımda, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırmanın tekrarlanmasını önlemek amacıyla kaynakları kapatmak için oluşturduğunuz kaynakları silebilir veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.
Cloud Shell'i başlatma
Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilse de bu codelab'de Cloud'da ç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 simgesini tıklayın.
Cloud Shell'i ilk kez başlatıyorsanız ne olduğunu açıklayan bir ara ekran gösterilir. Ara bir ekran görüntülendiyse Devam'ı tıklayın.
Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.
Gereken tüm geliştirme araçları bu sanal makinede yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki çalışmalarınızın tamamı olmasa bile büyük bir kısmı 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öreceksiniz.
- Kimlik doğrulamanızın tamamlandığı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 projenizi bildiğini onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project
Komut çıkışı
[core] project = <PROJECT_ID>
Doğru değilse aşağıdaki 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 Google 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
dizininiz size özeldir ve diğer kullanıcılar tarafından erişilemez.
$HOME
dizininizde uygulama için yeni bir klasör oluşturarak başlayalım:
mkdir ~/helloworld cd ~/helloworld
main.py
adlı bir dosya oluşturun:
touch main.py
Tercih ettiğiniz komut satırı düzenleyicisiyle (nano, vim veya emacs) veya Cloud Shell Düzenleyici düğmesini tıklayarak dosyayı düzenleyin:
Dosyayı Cloud Shell Düzenleyici ile doğrudan 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 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 bir app.yaml
dosyasına ihtiyacınız vardır. Bu yapılandırma dosyası, App Engine için web uygulamanızın ayarlarını tanımlar.
Terminalde app.yaml
dosyasını projenizin kök dizininde oluşturup 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
Şu 3 dosyaya sahip olmanız gerekir:
app.yaml main.py requirements.txt
Web uygulamanızı aşağıdaki komutla dağıtın:
gcloud app deploy
İlk kez 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şlatmak için 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
üzerinden HTTP isteklerine yanıt vermeye hazır.
7. Web uygulamasını test etme
Web uygulamanız https://PROJECT_ID.REGION_ID.r.appspot.com
tarihinde HTTP isteklerine yanıt vermeye hazır.
Öncelikle gcloud app describe
komutunu kullanarak 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
Aşağıdaki yanıtı almanız gerekir:
Hello World!
Özet
Önceki adımlarda basit bir Python web uygulaması oluşturdunuz, uygulamayı çalıştırdınız ve App Engine'de dağıttınız.
8. Web uygulamasını güncelleme
main.py
dosyanızın hello()
işlev gövdesini değiştirerek web uygulamanızda değişiklik yapın.
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)
Terminalden web uygulamanızı güncellemek için 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ü tam olarak 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
Aşağıdaki yanıtı almanız gerekir:
Hello Universe!
Özet
Bu adımda web uygulamanızı herhangi bir hizmet kesintisi olmadan güncellediniz ve 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 donanımlı bir Python uygulaması yazmak için bu eğiticiyi keşfedin: 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.