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:
- Mem-build Cloud Run ke dalam container
- Menetapkan akun layanan build
- Menetapkan kumpulan pekerja 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 dalam project Anda untuk menyimpan direktori kode sumber untuk 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 mungkin bernama
gcf-v2-uploads-PROJECT_NUMBER-REGION.cloudfunctions.appspot.com
. - Setelah kode diupload, kode fungsi disimpan di bucket sumber yang 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.
- Jika Anda membuat fungsi menggunakan Google Cloud CLI, bucket upload akan dibuat untuk menyimpan kode sumber Anda. Bucket upload ini mungkin bernama
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 dropdown, lalu ikuti petunjuk 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.
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.
Google Cloud console
Untuk melihat log fungsi di halaman Cloud Run:
Klik fungsi yang dipilih dalam daftar yang ditampilkan.
Klik tab LOGS untuk mendapatkan log permintaan dan log 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. 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 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 yang berbeda, Anda mungkin perlu mempertimbangkan konfigurasi tambahan:
Konfigurasi IAM:
- Konfigurasi IAM: Pastikan akun layanan build memiliki akses resmi 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: Menentukan REPOSITORY di region yang berbeda dengan tempat fungsi Anda berada akan menyebabkan transfer data di seluruh 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 (VPC SC) dan ingin membatasi akses build hanya ke dependensi yang disimpan di dalam perimeter, Anda dapat menggunakan fitur pool pekerja pribadi Cloud Build.
Secara umum, ikuti langkah-langkah berikut untuk menyiapkan pool pribadi:
- Membuat pool worker pribadi. Lihat Membuat dan mengelola kumpulan 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.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 pekerja berada. Lihat Menjalankan build di pool pribadi untuk mengetahui informasi selengkapnya.
Deploy fungsi Anda untuk membangun penggunaan 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 kumpulan 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 di-container. Fungsi dalam container disimpan di Artifact Registry dan di-deploy ke Cloud Run sebagai layanan. Fungsi Cloud Run memanfaatkan Cloud Build saat mem-build dan men-deploy fungsi Cloud Run Anda. Secara default, fungsi Cloud Run menggunakan akun layanan Cloud Build default sebagai akun utama saat melakukan build. Mulai Juli 2024, Cloud Build mengubah perilaku default untuk cara Cloud Build menggunakan akun layanan di project baru. Akibat perubahan ini, project baru yang men-deploy fungsi untuk pertama kalinya mungkin menggunakan akun layanan Cloud Build default dengan izin yang tidak memadai untuk mem-build fungsi.
Untuk Google Cloud project 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:
- Mencegah akun layanan Cloud Build lama digunakan untuk build
- Mencegah akun layanan Compute default digunakan untuk build
- Mengonfigurasi akun layanan baru dengan izin yang cakupannya sesuai untuk digunakan dalam 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, Anda dapat menentukan akun layanan build saat men-deploy fungsi. Jika akun layanan Cloud Build lama dan akun layanan komputasi default dicegah agar tidak 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 mengikuti 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 memberikan akun layanan yang berbeda untuk digunakan saat Cloud Build mem-build fungsi Anda:
Anda ingin lebih mengontrol akun layanan mana yang akan ditambahkan ke perimeter VPC-SC.
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 secara 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.
Berikan Izin
Akun layanan yang Anda gunakan akan memerlukan peran berikut:
roles/logging.logWriter
— Wajib untuk menyimpan log build di Cloud Logging.roles/artifactregistry.writer
— Wajib 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. Atau, Anda dapat menyediakan repositori artefak Anda sendiri melalui kolomdockerRepository
.roles/storage.objectViewer
— Wajib 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 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("gcf-v2-sources-") || resource.name.startsWith("gcf-v2-uploads-") || resource.name.startsWith("run-sources-")))
Berikan peran berikut menggunakan Google Cloud CLI, atau gunakan Google Cloud console.
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 API fungsi Cloud Run, dan jika Anda menggunakan akun layanan default Compute Engine sebagai peran Akun Layanan Cloud Build untuk fungsi Cloud Run, Anda harus membuat aturan traffic masuk berikut:
- Izinkan masuk akun layanan default Compute Engine ke semua metode di Cloud Storage dan Cloud Logging API.
- Izinkan akun layanan
service-[PROJECT_NUMBER]@gcf-admin-robot.iam.gserviceaccount.com
masuk 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, jalankan perintah gcloud berikut:
- Flag
--build-service-account
menentukan akun layanan IAM yang kredensialnya akan digunakan untuk langkah build. Jika akun layanan kustom tidak disediakan, fungsi akan menggunakan akun layanan default project untuk Cloud Build. - Secara opsional, Anda dapat menggunakan
kumpulan 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 dari
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.