Membuat dan men-deploy fungsi Cloud Run HTTP dengan Python

Panduan ini akan memandu Anda dalam proses penulisan fungsi Cloud Run menggunakan runtime Python. Ada dua jenis fungsi Cloud Run:

  • Fungsi HTTP, yang Anda panggil dari permintaan HTTP standar.
  • Fungsi berbasis peristiwa, yang Anda gunakan untuk menangani peristiwa dari infrastruktur Cloud, seperti pesan di topik Pub/Sub, atau perubahan dalam bucket Cloud Storage.

Untuk mengetahui detail selengkapnya, baca artikel tentang menulis fungsi HTTP dan menulis fungsi berbasis peristiwa.

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Functions, Cloud Build, Artifact Registry, Cloud Run, and Cloud Logging APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Functions, Cloud Build, Artifact Registry, Cloud Run, and Cloud Logging APIs.

    Enable the APIs

  8. Instal dan lakukan inisialisasi gcloud CLI.
  9. Update dan instal komponen gcloud dengan perintah berikut.
    gcloud components update
  10. Menyiapkan lingkungan pengembangan.

    Buka panduan penyiapan Python

Buat fungsi

  1. Buat direktori di sistem lokal Anda untuk kode fungsi:

    Linux atau Mac OS X

    mkdir ~/helloworld
    cd ~/helloworld
    

    Windows

    mkdir %HOMEPATH%\helloworld
    cd %HOMEPATH%\helloworld
    
  2. Buat file bernama main.py di direktori helloworld dengan konten berikut:

    
    import functions_framework
    
    
    from markupsafe import escape
    
    @functions_framework.http
    def hello_http(request):
        """HTTP Cloud Function.
        Args:
            request (flask.Request): The request object.
            <https://flask.palletsprojects.com/en/1.1.x/api/#incoming-request-data>
        Returns:
            The response text, or any set of values that can be turned into a
            Response object using `make_response`
            <https://flask.palletsprojects.com/en/1.1.x/api/#flask.make_response>.
        """
        request_json = request.get_json(silent=True)
        request_args = request.args
    
        if request_json and "name" in request_json:
            name = request_json["name"]
        elif request_args and "name" in request_args:
            name = request_args["name"]
        else:
            name = "World"
        return f"Hello {escape(name)}!"
    
    

    Fungsi contoh ini mengambil nama yang diberikan dalam permintaan HTTP dan menampilkan salam, atau "Halo Dunia!" jika tidak ada nama yang diberikan.

Menentukan dependensi

Dependensi pada Python dikelola dengan pip dan dinyatakan dalam file metadata yang disebut requirements.txt. File ini harus berada di direktori yang sama dengan file main.py yang berisi kode fungsi Anda.

  1. Buat file requirements.txt di direktori helloworld dengan konten berikut:

      # An example requirements file. If your function has other dependencies,
      # add them below
      functions-framework==3.*
    

Membangun dan menguji fungsi secara lokal

Untuk mem-build dan menguji fungsi secara lokal sebelum men-deploy-nya:

  1. Jalankan penginstal paket untuk Python, pip, untuk menginstal dependensi paket Anda:

    pip3 install -r requirements.txt
    PATH=$PATH:~/.local/bin
    
  2. Jalankan fungsi Anda secara lokal dengan Functions Framework:

    functions-framework-python --target hello_http
    
  3. Uji fungsi Anda dengan membuka http://localhost:8080 di browser atau dengan menjalankan curl localhost:8080 dari jendela lain.

    Lihat Mengirim permintaan ke fungsi lokal untuk mengetahui detail selengkapnya.

Men-deploy fungsi

Untuk men-deploy fungsi Anda, jalankan perintah berikut di direktori helloworld:

  gcloud functions deploy python-http-function \
    --gen2 \
    --runtime=python312 \
    --region=REGION \
    --source=. \
    --entry-point=hello_http \
    --trigger-http \
    --allow-unauthenticated

Ganti REGION dengan nama region Google Cloud tempat Anda ingin men-deploy fungsi (misalnya us-west1).

Flag --allow-unauthenticated opsional memungkinkan Anda menjangkau fungsi tanpa autentikasi.

Menguji fungsi yang di-deploy

  1. Setelah fungsi di-deploy, catat properti uri dari output perintah gcloud functions deploy, atau ambil dengan perintah berikut:

    gcloud functions describe python-http-function \
      --region=REGION
    

    Ganti REGION dengan nama region Google Cloud tempat Anda men-deploy fungsi (misalnya, us-west1).

  2. Kunjungi URL ini di browser Anda. Fungsi ini menampilkan pesan "Halo Dunia!".

Melihat log fungsi Anda

Melihat log dengan alat command line

Anda dapat meninjau log fungsi dengan UI Cloud Logging atau melalui Google Cloud CLI.

Untuk melihat log fungsi Anda dengan gcloud CLI, gunakan perintah logs read:

  gcloud functions logs read \
    --gen2 \
    --limit=10 \
    --region=REGION \
    python-http-function

Ganti REGION dengan nama region Google Cloud tempat Anda men-deploy fungsi (misalnya us-west1).

Outputnya akan terlihat seperti berikut:

LEVEL: I
NAME: hello-http
TIME_UTC: 2023-06-01 19:33:42.991
LOG: Default STARTUP TCP probe succeeded after 1 attempt for container "hello__http-1" on port 8080.

LEVEL: I
NAME: hello-http
TIME_UTC: 2023-06-01 19:33:41.933
LOG:

LEVEL: I
NAME: hello-http
TIME_UTC: 2023-06-01 19:33:26.475
LOG: Default STARTUP TCP probe succeeded after 1 attempt for container "hello__http-1" on port 8080.

Melihat log dengan dasbor logging

Untuk melihat log fungsi Anda dengan dasbor logging, buka halaman Ringkasan fungsi Cloud Run, lalu klik nama fungsi Anda dari daftar, lalu klik tab Log.