App Engine'i kullanmaya başlama (Python 3)

1. Genel Bakış

befa7a877ccdd35d.png

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?

Yalnızca okuma Okuyun ve alıştırmaları tamamlayın

Python deneyiminizi nasıl değerlendirirsiniz?

Acemi Orta Yeterli

Google Cloud hizmetleriyle ilgili deneyiminizi nasıl değerlendirirsiniz?

Acemi Orta Yeterli

2. Kurulum ve şartlar

Kendi hızınızda ortam kurulumu

  1. 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.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 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.
  1. 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

  1. Cloud Console'da, Cloud Shell'i etkinleştir 853e55310c205094.png simgesini tıklayın.

3c1dabeca90e44e5.png

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.

9c92662c6a846a5c.png

Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.

9f0e51b578fecce5.png

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.

  1. 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`
  1. 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:

10af7b1a6240e9f4.gif

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

Lisans

Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.