Ringkasan proses build

Saat Anda men-deploy kode sumber fungsi ke fungsi Cloud Run, 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. Fungsi Cloud Run mengakses image ini saat perlu menjalankan container untuk mengeksekusi fungsi Anda. Jika fungsi Anda masih menggunakan Container Registry, Anda harus beralih ke Artifact Registry sesegera mungkin.

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 langsung di project Anda, dan direktori kode sumber untuk fungsi Anda disimpan di bucket dalam project. Perhatikan hal berikut:

    • 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 tidak memiliki periode retensi.

Karakteristik proses build

Proses build memiliki karakteristik berikut:

  • Cloud Build API harus diaktifkan untuk project Anda.

    Untuk mengaktifkan API secara manual, klik link di atas, pilih project Anda dari menu dropdown, lalu ikuti prompt untuk mengaktifkan UI.

  • Karena seluruh proses build berlangsung dalam konteks project Anda, project tersebut 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.

    • Untuk mengetahui harga Container Registry (tidak digunakan lagi), 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

  1. Dari jendela Cloud Run functions Overview, klik nama fungsi yang ingin diinvestigasi.
  2. Klik tab Detail.
  3. Di panel General Information, klik link Container build log untuk membuka panel Logs explorer.
  4. Klik baris mana pun untuk melihat detail entri log build tersebut. Jika hal ini adalah entri error yang terkait dengan file, detail tersebut mencakup nama, baris, dan kolom file.

Registry image

Fungsi Cloud Run menggunakan Artifact Registry untuk menyimpan image yang di-build dari kode sumber fungsi Anda. Gambar disimpan dalam repositori bernama REGION-docker.pkg.dev/PROJECT_ID/gcf-artifacts yang terletak di project yang sama dengan tempat fungsi Anda dibuat.

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

gcloud

gcloud functions deploy FUNCTION \
  --docker-registry=artifact-registry \
  --docker-repository=REPOSITORY \
  [FLAGS...]

Ganti kode berikut:

  • FUNCTION: 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 yang berbeda, Anda mungkin perlu mempertimbangkan konfigurasi tambahan:

Konfigurasi IAM:

  • Pastikan akun layanan build memiliki akses yang diotorisasi 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 REPOSITORY target dalam perimeter VPC-SC.

Batasan residensi data:

  • Perhatikan bahwa menentukan REPOSITORY di region yang berbeda dengan tempat fungsi Anda berada akan menyebabkan transfer data di seluruh region.

Konsol Google Cloud

  1. Buka halaman fungsi Cloud Run di konsol Google Cloud:
    Buka halaman fungsi Cloud Run

  2. Klik nama fungsi tempat Anda ingin menggunakan Artifact Registry.

  3. Klik Edit.

  4. Klik Runtime, build... untuk meluaskan opsi konfigurasi lanjutan.

  5. Klik Security and Image Repo dari panel menu untuk membuka tab keamanan.

  6. Di bagian Image repository, pilih salah satu opsi berikut, bergantung pada jenis Artifact Registry yang Anda gunakan:

    • Artifact Registry yang dikelola pelanggan. Gunakan opsi ini jika Anda menyiapkan repositori Docker sendiri.
    • Artifact Registry yang dikelola Google. Gunakan opsi ini jika Anda ingin menggunakan repositori Docker yang dikelola Google, bukan menyiapkannya sendiri.
  7. Untuk Artifact Registry yang dikelola pelanggan, gunakan menu drop-down Artifact Registry untuk memilih repositori Artifact Registry yang Anda inginkan, atau ikuti prompt-nya dan buat yang baru.

  8. Klik Next.

  9. Klik Deploy.

Mengidentifikasi fungsi yang menggunakan Container Registry

Fungsi yang menggunakan Container Registry memiliki kunci buildConfig.dockerRegistry dalam deskripsi fungsinya. Anda dapat mengambil deskripsi fungsi sebagai berikut:

gcloud

gcloud functions describe FUNCTION_NAME

Ganti FUNCTION_NAME dengan nama fungsi Anda.

Konsol Google Cloud

  1. Buka halaman fungsi Cloud Run di konsol Google Cloud:
    Buka halaman fungsi Cloud Run

  2. Klik nama fungsi tempat Anda ingin menggunakan Artifact Registry.

  3. Klik Details.

  4. Klik EQUIVALENT REST untuk mendapatkan detail fungsi lengkap.

Inventaris Aset Cloud

Anda dapat menggunakan Cloud Asset Inventory untuk membuat kueri di seluruh organisasi untuk fungsi yang menggunakan Container Registry:

  1. Tinjau panduan Inventaris Aset Cloud untuk melihat aset Anda.
  2. Gunakan perintah gcloud berikut untuk membuat kueri fungsi yang menggunakan CONTAINER_REGISTRY.
gcloud asset list \
  --content-type=resource \
  --asset-types=cloudfunctions.googleapis.com/Function
  --organization=ORGANIZATION_ID \
  --filter "resource.data.buildConfig.dockerRegistry='CONTAINER_REGISTRY'"

Ganti ORGANIZATION_ID dengan ID resource organisasi Anda.

Beralih ke Artifact Registry

Anda dapat membuat fungsi memublikasikan gambar ke Artifact Registry dengan mengubah setelan repositori:

gcloud

gcloud beta functions deploy FUNCTION_NAME \
  --docker-registry=artifact-registry \
  [FLAGS...]

Konsol Google Cloud

  1. Buka halaman fungsi Cloud Run di konsol Google Cloud:
    Buka halaman fungsi Cloud Run

  2. Klik nama fungsi tempat Anda ingin menggunakan Artifact Registry.

  3. Klik Edit.

  4. Klik Runtime, build... untuk meluaskan opsi konfigurasi lanjutan.

  5. Klik Security and Image Repo dari panel menu untuk membuka tab keamanan.

  6. Di bagian Image repository, pilih salah satu opsi berikut, bergantung pada jenis Artifact Registry yang Anda gunakan:

    • Artifact Registry yang dikelola pelanggan. Gunakan opsi ini jika Anda menyiapkan repositori Docker sendiri.
    • Artifact Registry yang dikelola Google. Gunakan opsi ini jika Anda ingin menggunakan repositori Docker yang dikelola Google, bukan menyiapkannya sendiri.
  7. Untuk Artifact Registry yang dikelola pelanggan, gunakan menu drop-down Artifact Registry untuk memilih repositori Artifact Registry yang Anda inginkan, atau ikuti prompt-nya dan buat yang baru.

  8. Klik Next.

  9. Klik Deploy.

Untuk mengetahui informasi harga mendetail, lihat Harga fungsi Cloud Run.

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. Membuat pool worker pribadi. Lihat Membuat dan mengelola pool pribadi.
  2. Konfigurasi perimeter Kontrol Layanan VPC Anda. Baca Menggunakan Kontrol Layanan VPC.

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

    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

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

  4. Deploy fungsi Anda untuk membangun penggunaan pool pribadi:

gcloud

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

dengan FUNCTION_NAME sebagai nama fungsi, RUNTIME adalah runtime yang Anda gunakan, dan PRIVATE_POOL_NAME adalah 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...]

dengan FUNCTION_NAME sebagai nama fungsi dan RUNTIME adalah runtime yang Anda gunakan.

Konsol Google Cloud

  1. Dari halaman ringkasan fungsi Cloud Run, pilih Create function.

  2. Di bagian Runtime, build..., klik tab Build, lalu masukkan nama lengkap resource pool pribadi Anda di kotak teks Build worker pools.

Untuk mengetahui informasi selengkapnya, lihat Menjalankan build di pool pribadi.

Mengamankan build dengan akun layanan kustom

Fungsi Cloud Run mengambil kode sumber Anda dan mengirimkannya ke Cloud Build untuk di-containerisasi. Fungsi dalam container disimpan di Artifact Registry dan di-deploy ke Cloud Run sebagai layanan. Secara default, Cloud Build menetapkan akun layanan untuk bertindak sebagai akun utama saat melakukan build. Mulai Juli 2024, project baru di organisasi akan menggunakan Akun Layanan default Compute Engine untuk bertindak sebagai akun utama yang menjalankan build. Untuk mengetahui detailnya, lihat Perubahan akun layanan default Cloud Build. Karena alasan keamanan, Akun Layanan default Compute Engine tidak memiliki izin yang memadai untuk melakukan build.

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 ingin memindahkan project yang ada dari akun layanan ini, Anda dapat melakukan langkah-langkah berikut untuk lebih mengamankan lingkungan build fungsi:

  1. Mencegah akun layanan Cloud Build lama digunakan untuk build.
  2. Mencegah akun layanan Compute default digunakan untuk build.
  3. Konfigurasikan akun layanan baru dengan izin yang cakupannya sesuai untuk digunakan dalam build.
  4. Gunakan akun layanan yang dikonfigurasi untuk build.

Mencegah akun layanan Cloud Build lama digunakan untuk build

Anda dapat memverifikasi bahwa project Anda menggunakan akun layanan Cloud Build lama dengan memeriksa detail build fungsi. 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 organisasi cloudbuild.useBuildServiceAccount ke Not Enforced. Atau, menghapus semua pemberian peran akan membatasi kemampuannya untuk mengakses resource Google Cloud.

Mencegah akun layanan komputasi default digunakan 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 organisasi cloudbuild.useComputeServiceAccount ke Not Enforced. Atau, menonaktifkan akun layanan ini akan mencegahnya digunakan untuk mengakses resource Google Cloud.

Menyediakan akun layanan untuk mem-build fungsi

Sebagai bagian dari konfigurasi fungsi, akun layanan build dapat ditentukan saat men-deploy fungsi. Jika akun layanan Cloud Build lama dan akun layanan Compute Engine default dicegah agar tidak digunakan untuk build, akun layanan build harus ditentukan untuk men-deploy fungsi.

Lihat Akun Layanan Kustom untuk Cloud Build untuk mengonfigurasi dan menggunakan akun layanan build untuk fungsi Anda.