Ringkasan proses build

Panduan ini menunjukkan ringkasan proses build untuk fungsi yang di-deploy menggunakan perintah gcloud functions. Untuk mempelajari proses build untuk fungsi yang di-deploy menggunakan perintah gcloud run, lihat:

Saat Anda men-deploy kode sumber fungsi menggunakan perintah gcloud functions deploy, sumber tersebut disimpan di bucket Cloud Storage. Cloud Build kemudian secara otomatis membangun kode Anda ke dalam image container dan mengirimkan image tersebut ke registry image.

Proses pembangunan image ini sepenuhnya otomatis dan tidak memerlukan input langsung dari Anda. Semua resource yang digunakan dalam proses build dieksekusi dalam project pengguna Anda sendiri.

Mengeksekusi proses build dalam project Anda berarti:

  • Anda memiliki akses langsung ke semua log build.

  • Tidak ada kuota waktu build preset, meskipun Cloud Build memiliki kuota konkurensi default-nya sendiri.

  • Anda dapat melihat image container saat ini dan image container yang di-deploy sebelumnya, yang keduanya disimpan di Artifact Registry.

  • Cloud Storage digunakan di project Anda untuk menyimpan direktori kode sumber fungsi Anda. Perhatikan hal berikut:

    • Jika Anda membuat fungsi menggunakan Google Cloud CLI, bucket upload akan dibuat untuk menyimpan kode sumber Anda. Bucket upload ini diberi nama gcf-v2-uploads-PROJECT_NUMBER-REGION.cloudfunctions.appspot.com.
    • Setelah kode diupload, kode fungsi disimpan di bucket sumber terpisah:
      • Jika Anda menggunakan enkripsi default, bucket ini akan diberi nama gcf-v2-sources-PROJECT_NUMBER-REGION.
      • Jika Anda melindungi data dengan CMEK, bucket akan diberi nama gcf-v2-sources-PROJECT_NUMBER-REGION-CMEK_KEY_HASH.
    • Bucket sumber dan upload tidak memiliki periode retensi data.

Karakteristik proses build

Proses build memiliki karakteristik berikut:

  • Cloud Build API harus diaktifkan untuk project Anda.

    Untuk mengaktifkan API secara manual, klik link sebelumnya, pilih project Anda dari menu drop-down, lalu ikuti perintah untuk mengaktifkan UI.

  • Karena seluruh proses build berlangsung dalam konteks project Anda, project tersebut akan dikenai biaya resource yang disertakan:

    • Untuk mengetahui harga Cloud Build, lihat halaman Harga. Proses ini menggunakan ukuran instance default Cloud Build, karena instance ini sudah siap dan tersedia lebih cepat. Cloud Build menyediakan paket gratis: tinjau dokumen harga untuk mengetahui detail lebih lanjut.

    • Untuk mengetahui harga Cloud Storage, lihat halaman Harga. Cloud Storage menyediakan paket gratis: tinjau dokumen harga untuk mengetahui detail lebih lanjut.

    • Untuk mengetahui harga Artifact Registry, lihat halaman Harga.

  • Karena proses build tunduk pada penagihan, project Anda harus memiliki Akun Penagihan Cloud yang terkait.

Melihat log image build

Manfaat utama memiliki proses image build di project pengguna Anda adalah akses ke log build. Anda dapat menggunakan gcloud CLI atau konsol Google Cloud untuk mengakses log, yang tersedia melalui Cloud Logging.

gcloud

  1. Deploy fungsi Anda menggunakan perintah gcloud functions deploy.

  2. URL log ditampilkan sebagai bagian dari respons di jendela terminal Anda. Contoh:

    Deploying function (may take a while - up to 2 minutes)...⠹
    **For Cloud Build Stackdriver Logs**, visit:
    https://console.cloud.google.com/logs/viewer?project=&advancedFilter=resource.type%
    3Dbuild%0Aresource.labels.build_id%3D38d5b662-2315-45dd-8aa2-
    380d50d4f5e8%0AlogName%3Dprojects%2F%
    2Flogs%2Fcloudbuild
    Deploying function (may take a while - up to 2 minutes)...done.

Konsol Google Cloud

Untuk melihat log fungsi di halaman Cloud Run:

  1. Buka Cloud Run

  2. Klik fungsi yang dipilih dalam daftar yang ditampilkan.

  3. Klik tab LOGS untuk mendapatkan log permintaan dan container untuk semua revisi fungsi ini. Pemfilteran dapat dilakukan berdasarkan tingkat keparahan log.

Registry image

Artifact Registry digunakan untuk menyimpan image yang di-build dari kode sumber fungsi Anda. Image disimpan dalam repositori bernama REGION-docker.pkg.dev/PROJECT_ID/gcf-artifacts yang berada di project yang sama dengan tempat fungsi Anda dibuat.

Untuk menentukan repositori Artifact Registry yang dikelola sendiri, jalankan perintah berikut:

gcloud functions deploy FUNCTION_NAME \
   --docker-repository=REPOSITORY \
   [FLAGS...]

Ganti kode berikut:

  • FUNCTION_NAME: Nama fungsi.
  • REPOSITORY: Nama repositori Artifact Registry yang sepenuhnya memenuhi syarat, dalam format berikut: projects/PROJECT_NAME/locations/LOCATION/repositories/REPOSITORY.

Saat menentukan repositori Artifact Registry yang berada di project atau region lain, Anda mungkin perlu mempertimbangkan konfigurasi tambahan:

Konfigurasi IAM:

  • Konfigurasi IAM: Pastikan akun layanan build memiliki akses yang sah untuk membaca dan menulis ke REPOSITORY.
  • Konfigurasi jaringan: Pastikan REPOSITORY target dapat dijangkau dari konfigurasi project saat ini.
  • Konfigurasi Kontrol Layanan VPC: Pastikan akun layanan build dapat menjangkau target REPOSITORY dalam perimeter VPC-SC.
  • Batasan residensi data: Menentukan REPOSITORY di region yang berbeda dengan lokasi fungsi Anda akan menyebabkan transfer data antar-region.

Mengamankan build dengan pool pribadi

Agar fungsi Anda dapat menggunakan dependensi (misalnya, paket npm), Cloud Build secara default memiliki akses internet tak terbatas selama proses build. Jika Anda telah menyiapkan perimeter Kontrol Layanan VPC (SC VPC) dan ingin membatasi akses build hanya ke dependensi yang disimpan di dalam perimeter, Anda dapat menggunakan fitur pool worker pribadi Cloud Build.

Secara umum, ikuti langkah-langkah berikut untuk menyiapkan pool pribadi:

  1. Buat pool worker pribadi. Lihat Membuat dan mengelola pool pribadi.
  2. Konfigurasi perimeter Kontrol Layanan VPC Anda. Baca Menggunakan Kontrol Layanan VPC.

  3. Jika pool worker pribadi Anda berada dalam project yang berbeda dengan fungsi Anda, Anda perlu memberikan Akun Layanan Agen Layanan Cloud Functions (service-FUNCTION_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) peran cloudbuild.workerPoolUser agar layanan Cloud Build dapat mengakses pool worker.

    gcloud projects add-iam-policy-binding PRIVATE_POOL_PROJECT_ID \
        --member serviceAccount:service-FUNCTION_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
        --role roles/cloudbuild.workerPoolUser

    Ganti FUNCTION_PROJECT_NUMBER dengan nomor project tempat fungsi berjalan dan PRIVATE_POOL_PROJECT_ID dengan ID project tempat pool worker berada. Lihat Menjalankan build di pool pribadi untuk mengetahui informasi selengkapnya.

  4. Deploy fungsi Anda untuk membangun dengan pool pribadi:

    gcloud functions deploy FUNCTION_NAME \
       --runtime RUNTIME \
       --build-worker-pool PRIVATE_POOL_NAME
       [FLAGS...]

    Ganti FUNCTION_NAME dengan nama fungsi, RUNTIME dengan runtime yang Anda gunakan, dan PRIVATE_POOL_NAME dengan nama pool Anda.

Untuk berhenti menggunakan pool pribadi tertentu dan alih-alih menggunakan pool Cloud Build default, gunakan flag --clear-build-worker-pool saat melakukan deployment ulang.

gcloud functions deploy FUNCTION_NAME \
   --runtime RUNTIME \
   --clear-build-worker-pool
   [FLAGS...]

Ganti FUNCTION_NAME dengan nama fungsi dan RUNTIME dengan runtime yang Anda gunakan.

Mengamankan build dengan akun layanan kustom

Kode sumber fungsi Anda dikirim ke Cloud Build untuk dibuat dalam container. Fungsi yang ada dalam container disimpan di Artifact Registry dan di-deploy ke Cloud Run sebagai layanan. Cloud Run Functions memanfaatkan Cloud Build saat membangun dan men-deploy fungsi Cloud Run Anda. Secara default, Cloud Run Functions menggunakan akun layanan Cloud Build default sebagai principal saat melakukan build Anda. Mulai Juli 2024, Cloud Build mengubah perilaku default tentang cara Cloud Build menggunakan akun layanan di project baru. Sebagai akibat dari perubahan ini, project baru yang men-deploy fungsi untuk pertama kalinya mungkin menggunakan akun layanan Cloud Build default dengan izin yang tidak memadai untuk membangun fungsi.

Untuk project Google Cloud yang dibuat sebelum Juli 2024, Cloud Build menggunakan akun layanan Cloud Build lama. Akun layanan ini dirancang untuk membantu pengguna menjalankan berbagai kasus penggunaan yang mungkin terlalu permisif untuk kebutuhan project Anda. Jika Anda ingin memindahkan project yang ada dari akun layanan ini, Anda dapat melakukan langkah-langkah berikut untuk lebih mengamankan lingkungan build fungsi Anda:

Mencegah penggunaan akun layanan Cloud Build lama untuk build

Anda dapat memverifikasi bahwa project Anda menggunakan akun layanan Cloud Build lama dengan memeriksa detail build fungsi Anda. Akun layanan build default memiliki format berikut:

PROJECT_NUMBER@cloudbuild.gserviceaccount.com.

Anda dapat menonaktifkan penggunaan akun layanan ini secara paksa dengan menetapkan batasan kebijakan org cloudbuild.useBuildServiceAccount ke Not Enforced. Atau, penghapusan semua pemberian perannya akan membatasi kemampuannya untuk mengakses resource Google Cloud.

Mencegah penggunaan akun layanan komputasi default untuk build

Akun layanan komputasi default memiliki format PROJECT_NUMBER-compute@developer.gserviceaccount.com. Anda dapat menonaktifkannya agar tidak menjadi default yang digunakan untuk build dengan menetapkan kebijakan org cloudbuild.useComputeServiceAccount ke Not Enforced. Atau, penonaktifan akun layanan ini akan mencegahnya digunakan untuk mengakses resource Google Cloud .

Menyediakan akun layanan untuk membangun fungsi

Sebagai bagian dari konfigurasi fungsi, Anda dapat menentukan akun layanan build saat men-deploy fungsi. Jika akun layanan Cloud Build lama dan akun layanan komputasi default tidak dapat digunakan untuk build, Anda harus menentukan akun layanan build untuk men-deploy fungsi, seperti yang dijelaskan di bagian ini.

Jika Anda terpengaruh oleh perubahan yang dijelaskan dalam Perubahan Akun Layanan Cloud Build, Anda dapat melakukan salah satu hal berikut:

  • Tinjau panduan Cloud Build tentang perubahan pada akun layanan default dan pilih untuk tidak menerapkan perubahan ini.

  • Tambahkan peran Akun Cloud Build (roles/cloudbuild.builds.builder) ke akun layanan Compute Engine default.

  • Buat akun layanan Cloud Build kustom untuk deployment fungsi.

Berikut beberapa skenario saat Anda mungkin ingin menyediakan akun layanan yang berbeda untuk digunakan saat Cloud Build membangun fungsi Anda:

  • Anda menginginkan kontrol yang lebih besar atas akun layanan yang akan ditambahkan ke perimeter VPC-SC Anda.

  • Anda ingin Cloud Build berjalan dengan izin yang berbeda dari yang dimiliki akun layanan default tanpa harus mencabut setiap izin satu per satu.

  • Anda ingin menetapkan izin Cloud Build terperinci khusus untuk fungsi Anda, bukan membagikan akun layanan Cloud Build yang dioptimalkan untuk tujuan lain.

  • Organisasi Anda menonaktifkan penggunaan akun layanan default.

Bagian berikut menunjukkan cara membuat akun layanan Cloud Build kustom untuk deployment fungsi.

Membuat akun layanan

Buat akun layanan baru seperti yang dijelaskan dalam Membuat akun layanan.

Memberikan Izin

Akun layanan yang Anda gunakan memerlukan peran berikut:

  • roles/logging.logWriter— Diperlukan untuk menyimpan log build di Cloud Logging.
  • roles/artifactregistry.writer— Diperlukan untuk menyimpan image build di Artifact Registry. Untuk perilaku default, akun layanan memerlukan akses ke repositori bernama "gcf-artifacts" dan "cloud-run-source-deploy". Akses ke repositori dapat ditetapkan pada kebijakan IAM repositori. Sebagai alternatif, Anda dapat menyediakan repositori artefak Anda sendiri melalui kolom dockerRepository.
  • roles/storage.objectViewer— Diperlukan untuk mengambil sumber fungsi dari bucket Cloud Storage, dan untuk menyimpan image build di Container Registry. Untuk perilaku default, akun layanan memerlukan akses ke bucket yang bernama "run-sources-*", "gcf-v2-sources-*", dan "gcf-v2-uploads-*". Hal ini dapat dilakukan dengan menambahkan kondisi IAM ke pemberian peran seperti (resource.type == "storage.googleapis.com/Object" && (resource.name.startsWith("projects/_/buckets/gcf-v2-sources-") || resource.name.startsWith("projects/_/buckets/gcf-v2-uploads-") || resource.name.startsWith("projects/_/buckets/run-sources-")))

Berikan peran berikut menggunakan Google Cloud CLI, atau gunakan konsolGoogle Cloud .

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
    --role=roles/logging.logWriter

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/artifactregistry.writer

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/storage.objectViewer

Ganti kode berikut:

Pertimbangan Kontrol Layanan VPC

Jika Anda memiliki perimeter Kontrol Layanan VPC yang melindungi project dan Cloud Run Functions API, dan jika Anda menggunakan akun layanan default Compute Engine sebagai peran Akun Layanan Cloud Build untuk Cloud Run Functions, Anda harus membuat aturan ingress berikut:

  • Izinkan ingress akun layanan default Compute Engine ke semua metode di Cloud Storage dan Cloud Logging API.
  • Izinkan ingress service-[PROJECT_NUMBER]@gcf-admin-robot.iam.gserviceaccount.com akun layanan ke semua metode di Cloud Storage dan Cloud Logging API.

Men-deploy fungsi dengan akun layanan kustom

Untuk meneruskan akun layanan yang dibuat pengguna, yang akan digunakan oleh Cloud Build, saat men-deploy fungsi Anda, jalankan perintah gcloud berikut:

  • Flag --build-service-account menentukan akun layanan IAM yang kredensialnya akan digunakan untuk langkah build. Jika akun layanan kustom tidak diberikan, fungsi akan menggunakan akun layanan default project untuk Cloud Build.
  • Anda dapat secara opsional menggunakan pool pribadi, yang Anda tentukan menggunakan flag --build-worker-pool.

gcloud functions deploy FUNCTION_NAME \
   --gen2 \
   --region=REGION \
   --project=PROJECT_ID \
   --runtime=RUNTIME \
   --entry-point=CODE_ENTRYPOINT \
   --build-service-account=projects/PROJECT_ID/serviceAccounts/SA_EMAIL \
   --memory=256Mi \
   --trigger-http \
   --source=.

Ganti kode berikut:

Memberi akun layanan Cloud Build akses ke perimeter Kontrol Layanan VPC

Cloud Run Functions menggunakan Cloud Build untuk mem-build kode sumber Anda ke dalam container yang dapat dijalankan. Untuk menggunakan Cloud Run Functions dengan Kontrol Layanan VPC, Anda harus mengonfigurasi akun layanan Cloud Build (baik default maupun kustom) agar memiliki akses ke perimeter layanan Anda.

Menemukan nama akun layanan

Jika menggunakan akun layanan Cloud Build default, Anda dapat menemukan namanya sebagai berikut:

  1. Gunakan halaman IAM di konsol Google Cloud untuk menemukan akun layanan Cloud Build.

    Buka IAM

  2. Pastikan project yang benar ditampilkan di drop-down project.

  3. Telusuri cloudbuild.gserviceaccount.com. Alamat email dalam bentuk PROJECT_NUMBER@cloudbuild.gserviceaccount.com adalah nama akun layanan.

Jika Anda memiliki akun layanan Cloud Build kustom, gunakan nama tersebut.

Memberi akun layanan akses ke perimeter layanan

Setelah Anda memiliki nama akun layanan, ikuti panduan di Membatasi akses menurut pengguna atau akun layanan untuk membuat tingkat akses untuk akun layanan. Kemudian, ikuti Menambahkan tingkat akses ke perimeter yang ada untuk menambahkan tingkat akses ke perimeter layanan Anda.