Membuat dan men-deploy HTTP Cloud Function menggunakan PHP (generasi ke-1)

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 berbasis peristiwa, yang Anda gunakan untuk menangani peristiwa dari infrastruktur Cloud, seperti pesan pada topik Pub/Sub, atau perubahan dalam bucket Cloud Storage.

Contoh ini menunjukkan cara membuat fungsi HTTP sederhana.

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 and Cloud Build 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 and Cloud Build APIs.

    Enable the APIs

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

    Mulai menggunakan PHP

Membuat cloud function

  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.

Menentukan dependensi

Anda menggunakan Composer untuk mengelola dependensi di PHP. Jika belum menginstal Composer, Anda dapat melakukannya sebagai berikut:

  1. Download Composer ke lokasi mana pun yang Anda inginkan.

  2. Setelah didownload, pindahkan file composer.phar ke direktori yang ada di jalur sistem Anda, misalnya:

    mv composer.phar /usr/local/bin/composer
    

Selanjutnya, tentukan dependensi fungsi Anda:

  1. Tambahkan file composer.json yang berisi dependensi ke direktori kode fungsi, dengan FUNCTION_TARGET=FUNCTION_NAME menunjukkan nama fungsi Anda. Dalam contoh ini, FUNCTION_NAME adalah helloHttp:

    {
        "require": {
            "php": ">= 8.1",
            "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"
            ]
        }
    }
    
  2. Dalam direktori yang berisi kode fungsi Anda (yang juga harus berisi file composer.json yang baru saja Anda buat), jalankan perintah berikut:

    composer require google/cloud-functions-framework
    

    Tindakan ini akan menambahkan Functions Framework ke composer.json Anda. Ini juga membuat direktori vendor/ dalam direktori kode fungsi Anda yang berisi dependensi.

Membuat dan menguji secara lokal

Setelah menyelesaikan langkah-langkah dalam Menentukan dependensi, Anda dapat mem-build dan menguji fungsi secara lokal.

Perintah berikut akan membuat server web lokal yang menjalankan fungsi helloHttp Anda:

export FUNCTION_TARGET=helloHttp
php -S localhost:8080 vendor/bin/router.php

Jika fungsi berhasil dibuat, fungsi tersebut akan menampilkan URL. Anda dapat membuka URL ini dengan browser web Anda: http://localhost:8080/. Anda akan melihat pesan Hello World!.

Atau, Anda dapat mengirim permintaan ke fungsi ini menggunakan curl dari jendela terminal lain:

curl localhost:8080
# Output: Hello World!

Men-deploy cloud function

Untuk men-deploy fungsi dengan pemicu HTTP, jalankan perintah berikut di direktori helloworld_http:

gcloud functions deploy helloHttp --runtime php82 --trigger-http --allow-unauthenticated

Flag --allow-unauthenticated memungkinkan Anda menjangkau fungsi tanpa autentikasi. Untuk mewajibkan autentikasi, hilangkan flag.

Menguji fungsi yang di-deploy

  1. Setelah fungsi selesai di-deploy, catat properti httpsTrigger.url atau temukan menggunakan perintah berikut:

    gcloud functions describe helloHttp
    

    Kodenya akan terlihat seperti berikut:

    https://GCP_REGION-PROJECT_ID.cloudfunctions.net/helloHttp
  2. Kunjungi URL ini di browser Anda. Anda akan melihat pesan "Halo Dunia!".

    Coba teruskan sebuah nama dalam permintaan HTTP, seperti yang ditunjukkan dalam contoh URL ini:

    https://GCP_REGION-PROJECT_ID.cloudfunctions.net/helloHttp?name=NAME

    Anda akan melihat pesan "Halo NAME!"

Melihat log

Log untuk Cloud Functions dapat dilihat menggunakan Google Cloud CLI, dan di UI Cloud Logging.

Menggunakan alat command line

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

gcloud functions logs read helloHttp

Output akan terlihat seperti berikut:

LEVEL  NAME       EXECUTION_ID  TIME_UTC                 LOG
D      helloHttp  rvb9j0axfclb  2019-09-18 22:06:25.983  Function execution started
D      helloHttp  rvb9j0axfclb  2019-09-18 22:06:26.001  Function execution took 19 ms, finished with status code: 200

Menggunakan dasbor Logging

Anda juga dapat melihat log untuk Cloud Functions dari Konsol Google Cloud.