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:
- Membangun Cloud Run ke dalam container
- Menetapkan akun layanan build
- Menetapkan kumpulan worker build
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.
- Jika Anda menggunakan enkripsi default,
bucket ini akan diberi nama
- Bucket sumber dan upload tidak memiliki periode retensi data.
- Jika Anda membuat fungsi menggunakan Google Cloud CLI, bucket upload akan dibuat untuk menyimpan
kode sumber Anda. Bucket upload ini diberi nama
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
Deploy fungsi Anda menggunakan perintah
gcloud functions deploy.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:
Klik fungsi yang dipilih dalam daftar yang ditampilkan.
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:
- Buat pool worker pribadi. Lihat Membuat dan mengelola pool pribadi.
Konfigurasi perimeter Kontrol Layanan VPC Anda. Baca Menggunakan Kontrol Layanan VPC.
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) perancloudbuild.workerPoolUseragar 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.
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
- Mencegah penggunaan akun layanan Compute default untuk build
- Mengonfigurasi akun layanan baru dengan izin yang cakupannya sesuai untuk digunakan dalam build
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 kolomdockerRepository.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:
- PROJECT_ID: Project IDGoogle Cloud Anda.
- SA_EMAIL: Alamat email akun layanan Anda.
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.comakun 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-accountmenentukan 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:
- FUNCTION_NAME: Nama tempat Anda men-deploy fungsi.
- REGION: Nama regionGoogle Cloud tempat Anda ingin men-deploy fungsi (misalnya,
us-west1). - PROJECT_ID: Project IDGoogle Cloud Anda.
- RUNTIME: ID runtime
versi runtime yang didukung
untuk menjalankan fungsi Anda, misalnya
nodejs18. - CODE_ENTRYPOINT: Titik entri ke fungsi Anda dalam kode sumber. Ini adalah kode yang akan dijalankan saat fungsi Anda berjalan.
- SA_EMAIL: Alamat email akun layanan Anda.
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:
Gunakan halaman IAM di konsol Google Cloud untuk menemukan akun layanan Cloud Build.
Pastikan project yang benar ditampilkan di drop-down project.
Telusuri
cloudbuild.gserviceaccount.com. Alamat email dalam bentukPROJECT_NUMBER@cloudbuild.gserviceaccount.comadalah 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.