Membuat dan men-deploy HTTP Cloud Function dengan PHP

Membuat dan men-deploy HTTP Cloud Function dengan PHP

Panduan ini akan memandu Anda melalui proses penulisan Cloud Function menggunakan runtime PHP. Ada dua jenis Cloud Functions:

  • Fungsi HTTP, yang Anda panggil dari permintaan HTTP standar.
  • Fungsi yang dipicu oleh 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. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

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

    Enable the APIs

  5. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  6. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  7. Enable the Cloud Functions, Cloud Build, Artifact Registry, Cloud Run, dan 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 Menggunakan PHP di Google Cloud

Buat fungsi

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

    Linux atau Mac OS X

    mkdir ~/helloworld_http
    cd ~/helloworld_http
    

    Windows

    mkdir %HOMEPATH%\helloworld_http
    cd %HOMEPATH%\helloworld_http
    
  2. Buat file index.php di direktori helloworld_http dengan konten berikut:

    <?php
    
    use Google\CloudFunctions\FunctionsFramework;
    use Psr\Http\Message\ServerRequestInterface;
    
    // Register the function with Functions Framework.
    // This enables omitting the `FUNCTIONS_SIGNATURE_TYPE=http` environment
    // variable when deploying. The `FUNCTION_TARGET` environment variable should
    // match the first parameter.
    FunctionsFramework::http('helloHttp', 'helloHttp');
    
    function helloHttp(ServerRequestInterface $request): string
    {
        $name = 'World';
        $body = $request->getBody()->getContents();
        if (!empty($body)) {
            $json = json_decode($body, true);
            if (json_last_error() != JSON_ERROR_NONE) {
                throw new RuntimeException(sprintf(
                    'Could not parse body: %s',
                    json_last_error_msg()
                ));
            }
            $name = $json['name'] ?? $name;
        }
        $queryString = $request->getQueryParams();
        $name = $queryString['name'] ?? $name;
    
        return sprintf('Hello, %s!', htmlspecialchars($name));
    }
    

    Fungsi contoh ini mengambil nama yang diberikan dalam permintaan HTTP dan menampilkan salam, atau "Halo Dunia!" jika tidak ada nama yang diberikan. Untuk pembahasan lebih lanjut tentang struktur dan elemen yang diperlukan dalam fungsi HTTP PHP, lihat Menulis fungsi HTTP.

Menentukan dependensi

  1. PHP menggunakan Composer untuk mengelola dependensi. Jika Anda menggunakan Cloud Shell, Composer sudah diinstal sebelumnya. Jika tidak, Anda dapat menginstalnya dengan perintah berikut:

    1. Jalankan skrip penginstalan Command line PHP di halaman download Composer untuk mendownload Composer ke mesin pengembangan Anda.

    2. Pindahkan file composer.phar ke direktori /usr/local/bin Anda.

      sudo mv composer.phar /usr/local/bin/composer
      
  2. Tentukan dependensi fungsi Anda:

    1. Tambahkan file composer.json dengan konten berikut ke direktori helloworld_http:

      {
          "require": {
              "php": ">= 7.4",
              "google/cloud-functions-framework": "^1.1"
          },
          "scripts": {
              "start": [
                 "Composer\\Config::disableProcessTimeout",
                 "FUNCTION_TARGET=helloHttp php -S localhost:${PORT:-8080} vendor/google/cloud-functions-framework/router.php"
              ]
          }
      }
      

    Baris FUNCTION_TARGET menentukan titik entri fungsi Anda.

    1. Jalankan perintah berikut di direktori helloworld_http:
    composer require google/cloud-functions-framework
    

    Tindakan ini akan menambahkan Framework Functions ke composer.json dan membuat direktori vendor di dalam helloworld_http yang berisi dependensi.

Membangun dan menguji fungsi secara lokal

Untuk mem-build dan menguji fungsi secara lokal sebelum men-deploy-nya, lakukan langkah-langkah berikut:

  1. Buat server web lokal yang menjalankan fungsi helloHttp Anda:

    export FUNCTION_TARGET=helloHttp
    composer start
    
  2. 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.

Fungsi contoh ini menampilkan pesan "Halo, Dunia!" yang ceria.

Men-deploy fungsi

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

  gcloud functions deploy php-http-function \
    --gen2 \
    --runtime=php82 \
    --region=REGION \
    --source=. \
    --entry-point=helloHttp \
    --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 php-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!".

    Anda juga dapat menemukan URL ini di Google Cloud Console. Buka halaman Ringkasan Cloud Functions, lalu klik nama fungsi Anda untuk membuka halaman Detail fungsi. Buka tab TRIGGER untuk melihat URL fungsi Anda.

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 \
      php-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: hellohttp
TIME_UTC: 2023-06-02 19:01:36.067
LOG:

LEVEL: I
NAME: hellohttp
TIME_UTC: 2023-06-02 19:01:22.814
LOG: Default STARTUP TCP probe succeeded after 1 attempt for container "hello_http-1" on port 8080.

LEVEL: I
NAME: hellohttp
TIME_UTC: 2023-06-02 19:01:22.777
LOG: [pid1-nginx] Starting nginx (pid 17): /usr/sbin/nginx -c /tmp/nginxconf-953701689/nginx.conf [session:R8F8ZJ5]

LEVEL: I
NAME: hellohttp
TIME_UTC: 2023-06-02 19:01:22.766
LOG: [pid1-nginx] Successfully connected to /tmp/google-config/app.sock after 556.430499ms [session:R8F8ZJ5]

Melihat log dengan dasbor logging

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