Solusi Praktis: Pemrosesan gambar AI/ML pada Cloud Functions

Last reviewed 2023-08-29 UTC

Panduan ini membantu Anda memahami, men-deploy, dan menggunakanpemrosesan gambar AI/ML pada Cloud Functions Solusi Praktis. Solusi ini menggunakan model machine learning terlatih untuk menganalisis gambar yang disediakan oleh pengguna dan menghasilkan anotasi gambar.

Men-deploy solusi ini membuat layanan pemrosesan gambar yang dapat membantu Anda melakukan hal berikut, dan lainnya:

  • Menangani konten buatan pengguna yang tidak aman atau berbahaya.
  • Mendigitalkan teks dari dokumen fisik.
  • Mendeteksi dan mengklasifikasikan objek dalam gambar.

Dokumen ini ditujukan bagi developer yang memiliki pemahaman dengan pengembangan layanan backend , kemampuan AI/ML, dan konsep dasar cloud computing. Meskipun tidak wajib, pengalaman Terraform sangat membantu.

Tujuan

  • Pelajari cara arsitektur serverless digunakan untuk membuat layanan pemrosesan gambar skalabel.
  • Pahami cara layanan pemrosesan gambar menggunakan model machine learning terlatih untuk analisis gambar.
  • Deploy layanan pemrosesan gambar dan panggil melalui panggilan REST API atau sebagai respons pada peristiwa upload gambar
  • Tinjau setelan keamanan dan konfigurasi untuk memahami cara mengadaptasi layanan pemrosesan gambar untuk berbagai kebutuhan.

Produk yang digunakan

Solusi ini menggunakan produk Google Cloud berikut:

  • Cloud Vision API: API menawarkan model machine learning terlatih yang andal untuk anotasi gambar. Solusi ini menggunakan Cloud Vision API untuk menganalisis gambar dan mendapatkan data anotasi gambar.
  • Cloud Storage: Layanan siap digunakan perusahaan yang menyediakan penyimpanan objek berbiaya rendah tanpa batas untuk berbagai jenis data. Data dapat diakses dari dalam dan dari luar Google Cloud dan direplikasi secara geo-redundan. Solusi ini menggunakan Cloud Storage untuk menyimpan gambar input dan menghasilkan data anotasi gambar.
  • Cloud Functions: Layanan komputasi serverless yang ringan memungkinkan anda membuat fungsi mandiri dengan tujuan tunggal yang dapat merespons peristiwa pada Google Cloud tanpa perlu mengelola server atau lingkungan runtime. Solusi ini menggunakan Cloud Functions untuk menghosting endpoint layanan pemrosesan gambar.

Untuk mengetahui informasi tentang cara produk ini dikonfigurasi dan berinteraksi, lihat bagian berikutnya.

Arsitektur

Solusi ini terdiri dari contoh layanan pemrosesan gambar yang menganalisis gambar input dan menghasilkan anotasi untuk gambar dengan menggunakan model machine learning terlatih. Diagram berikut menampilkan arsitektur resource Google Cloud yang digunakan dalam solusi.

Arsitektur infrastruktur yang diperlukan untuk pemrosesan gambar AI/ML pada solusi Cloud Functions.

Layanan dapat dipanggil dengan dua cara: secara langsung melalui panggilan REST API calls atau secara tidak langsung sebagai respons terhadap upload gambar.

Alur permintaan

Alur pemrosesan permintaan layanan pemrosesan gambar bergantung pada cara pengguna memanggil layanan. Langkah-langkah berikut ini diberi nomor seperti yang ditampilkan pada diagram arsitektur sebelumnya.

Ketika pengguna memanggil layanan pemrosesan gambar secara langsung melalui Panggilan REST APl:

  1. Pengguna membuat permintaan ke endpoint REST API layanan pemrosesan gambar yang di-deploy sebagai Cloud Function. Permintaan tersebut menentukan gambar sebagai URI atau stream berenkode base64.
  2. Cloud Function membuat panggilan ke Cloud Vision API untuk menghasilkan anotasi pada gambar yang telah ditentukan. Data anotasi gambar ditampilkan dalam format JSON sebagai respon fungsi kepada pengguna.

Ketika pengguna memanggil layanan pemrosesan gambar secara tidak langsung sebagai respons terhadap upload gambar:

  1. Pengguna mengupload gambar ke bucket Cloud Storage untuk input.
  2. Setiap upload gambar menghasilkan peristiwa Cloud Storage yang memicu Cloud Function untuk memproses gambar yang diupload.
  3. Cloud Function melakukan panggilan ke Cloud Vision API untuk menghasilkan anotasi pada gambar yang telah ditentukan.
  4. Cloud Function menulis data anotasi gambar sebagai file JSON dalam Cloud Storage bucket lain untuk mendapatkan output.

Biaya

Untuk mengetahui estimasi biaya resource Google Cloud yang digunakan oleh pemrosesan gambar AI/ML pada solusi Cloud Function, lihat estimasi yang telah dikalkulasi di Kalkulator Harga Google Cloud.

Gunakan estimasi sebagai titik awal untuk menghitung biaya deployment Anda. Anda dapat mengubah perkiraan biaya untuk mencerminkan setiap perubahan konfigurasi yang Anda rencanakan untuk memastikan resource yang digunakan dalam solusi.

Perkiraan yang telah dihitung sebelumnya didasarkan pada asumsi untuk faktor-faktor tertentu, termasuk hal-hal berikut:

  • Lokasi Google Cloud tempat resource di-deploy.
  • Jumlah waktu resource tersebut digunakan.

  • Jumlah data yang disimpan di Cloud Storage.

  • Frekuensi layanan pemrosesan gambar dipanggil.

Men-deploy solusi

Bagian ini memandu Anda dalam proses men-deploy solusi.

Membuat atau memilih project Google Cloud

Saat Anda men-deploy solusi, Anda perlu menentukan di mana project Google Cloud resource akan di-deploy. Ketika Anda memutuskan apakah akan menggunakan project yang telah ada atau membuat project baru, pertimbangkan faktor-faktor berikut:

  • Jika membuat project untuk solusi tersebut, saat deployment tidak diperlukan lagi, Anda dapat menghapus project tersebut dan menghindari penagihan berkelanjutan. Jika Anda menggunakan project yang telah ada, Anda harus menghapus deployment jika tidak lagi memerlukannya.
  • Menggunakan project dapat membantu menghindari konflik dengan resource yang telah disediakan sebelumnya, seperti resource yang digunakan untuk workload produksi.

Jika Anda ingin men-deploy solusi dalam project baru, buatlah project sebelum memulai deployment.

Untuk membuat project, selesaikan langkah-langkah berikut ini:

  1. Di konsol Google Cloud, buka halaman Pemilih project.

    Buka pemilih project

  2. Untuk mulai membuat project Google Cloud, klik Buat project.

  3. Beri nama project Anda. Catat project ID yang dibuat.

  4. Edit kolom lain sesuai kebutuhan.

  5. Untuk membuat project, klik Buat.

Mendapatkan izin IAM yang diperlukan

Untuk memulai proses deployment, Anda memerlukan izin Identity and Access Management (IAM) yang terdaftar dalam tabel berikut ini. Jika Anda memiliki peran dasar roles/owner untuk project tempat Anda berencana men-deploy solusi, berarti Anda telah memiliki semua izin yang diperlukan. Jika Anda tidak memiliki peran roles/owner, mintalah administrator Anda untuk memberikan izin ini (atau peran yang menyertakan izin ini) kepada Anda.

Izin IAM diperlukan Peran bawaan yang mencakup izin yang diperlukan

serviceusage.services.enable

Service Usage Admin
(roles/serviceusage.serviceUsageAdmin)

iam.serviceAccounts.create

Service Account Admin
(roles/iam.serviceAccountAdmin)

resourcemanager.projects.setIamPolicy

Admin IAM Project
(roles/resourcemanager.projectIamAdmin)
config.deployments.create
config.deployments.list
Cloud Infrastructure Manager Admin
(roles/config.admin)

Akun layanan yang dibuat untuk solusi

Jika Anda memulai proses deployment melalui konsol, Google akan membuat akun layanan untuk men-deploy solusi atas nama Anda (dan menghapus deployment nanti jika Anda memilihnya). Akun layanan ini diberi izin IAM tertentu untuk sementara; yaitu, izin dicabut secara otomatis setelah operasi deployment dan penghapusan solusi selesai. Google merekomendasikan agar Anda menghapus akun layanan setelah menghapus deployment, seperti yang dijelaskan nanti dalam panduan ini.

Melihat peran yang ditetapkan ke akun layanan

Peran-peran tersebut tercantum di sini untuk mengantisipasi jika administrator project Google Cloud atau organisasi Anda membutuhkan informasi ini.

  • roles/serviceusage.serviceUsageAdmin
  • roles/iam.serviceAccountAdmin
  • roles/resourcemanager.projectIamAdmin
  • roles/cloudfunctions.admin
  • roles/run.admin
  • roles/storage.admin
  • roles/pubsublite.admin
  • roles/iam.securityAdmin
  • roles/logging.admin
  • roles/artifactregistry.reader
  • roles/cloudbuild.builds.editor
  • roles/compute.admin
  • roles/iam.serviceAccountUser

Memilih metode deployment

Untuk membantu Anda men-deploy solusi ini dengan upaya minimal, konfigurasi Terraform disediakan di GitHub. Konfigurasi Terraform menentukan semua resource Google Cloud yang diperlukan untuk solusi.

Anda dapat men-deploy solusi menggunakan salah satu dari metode berikut ini:

  • Melalui konsol: Gunakan metode ini jika Anda ingin mencoba solusi dengan konfigurasi default dan melihat cara kerjanya. Cloud Build men-deploy semua resource yang diperlukan untuk solusi. Jika Anda sudah tidak memerlukan solusi yang di-deploy, Anda dapat menghapusnya melalui konsol. Semua resource yang telah Anda buat setelah men-deploy solusi mungkin perlu dihapus secara terpisah.

    Untuk menggunakan metode deployment ini, ikuti petunjuknya di Deploy melalui konsol.

  • Menggunakan Terraform CLI: Gunakan metode ini jika Anda ingin menyesuaikan solusi atau mengotomatisasi penyediaan dan pengelolaan resource menggunakan pendekatan Infrastructure as Code (IaC). Download konfigurasi Terraform melalui GitHub, sesuaikan kode secara opsional sesuai kebutuhan, kemudian deploy solusi menggunakan Terraform CLI. Setelah men-deploy solusi, Anda dapat terus menggunakan Terraform untuk mengelola solusi tersebut.

    Untuk menggunakan metode deployment ini, ikuti instruksinya di Men-deploy menggunakan Terraform CLI.

Men-deploy melalui konsol

Selesaikan langkah-langkah berikut untuk men-deploy solusi yang telah terkonfigurasi.

  1. Di katalog solusi praktis Google cloud, buka solusi Pemrosesan gambar AI/ML di Cloud Functions

    Buka pemrosesan gambar AI/ML di solusi Cloud Functions

  2. Tinjau informasi yang tersedia di halaman seperti perkiraan biaya solusi dan waktu deployment.

  3. Jika sudah siap untuk mulai men-deploy solusi, klik Deploy.

    Panduan interaktif langkah demi langkah akan ditampilkan.

  4. Selesaikan langkah-langkah dalam panduan interaktif.

    Catat nama yang Anda masukkan untuk deployment. Nama ini akan diperlukan saat Anda menghapus deployment.

    Saat Anda mengklik Deploy, halaman Deployment solusi akan ditampilkan. Kolom Status di halaman ini menampilkan Men-deploy.

  5. Tunggu hingga solusi berhasil di-deploy.

    Jika deployment gagal, kolom Status akan menampilkan Gagal. Anda dapat menggunakan log Cloud Build untuk mendiagnosis error. Untuk informasi selengkapnya, lihat Error ketika men-deploy melalui konsol.

    Setelah deployment selesai, kolom Status berubah menjadi Ter-deploy.

  6. Untuk melihat resource Google Cloud yang di-deploy beserta konfigurasinya, ikuti tur interaktif.

    Memulai tur

Selanjutnya, cobalah sendiri solusinya, lihat Pelajari solusi.

Ketika Anda tidak lagi memerlukan solusi tersebut, Anda dapat menghapus deployment untuk menghindari penagihan berkelanjutan untuk resource Google Cloud tersebut. Untuk informasi selengkapnya, lihat Menghapus deployment.

Men-deploy menggunakan Terraform CLI

Bagian ini menjelaskan cara menyesuaikan solusi atau mengotomatiskan penyediaan dan pengelolaan solusi menggunakan Terraform CLI. Solusi yang Anda deploy menggunakan Terraform CLI tidak ditampilkan di halaman Deployment solusi pada Konsol Google Cloud.

Menyiapkan klien Terraform

Anda dapat menjalankan Terraform baik di Cloud Shell maupun host lokal Anda. Panduan ini menjelaskan cara menjalankan Terraform di Cloud Shell, yang telah menginstal Terraform di Cloud Shell dan dikonfigurasi untuk diautentikasi dengan Google Cloud.

Kode Terraform untuk solusi ini tersedia di repositori GitHub.

  1. Lakukan clone repositori GitHub ke Cloud Shell.

    Buka di Cloud Shell

    Perintah akan ditampilkan untuk mengonfirmasi download repositori GitHub ke Cloud Shell.

  2. Klik Confirm.

    Cloud Shell diluncurkan di tab browser yang terpisah, lalu kode Terraform didownload ke direktori $HOME/cloudshell_open lingkungan Cloud Shell Anda.

  3. Dalam Cloud Shell, periksa apakah direktori yang sedang bekerja adalah $HOME/cloudshell_open/terraform-ml-image-annotation-gcf/infra. Ini merupakan direktori yang berisi file konfigurasi Terraform untuk solusi. Jika Anda perlu mengubah ke direktori tersebut, jalankan perintah berikut:

    cd $HOME/cloudshell_open/terraform-ml-image-annotation-gcf/infra
    
  4. Lakukan inisialisasi Terraform dengan menjalankan perintah berikut:

    terraform init
    

    Tunggu hingga Anda melihat pesan berikut:

    Terraform has been successfully initialized!
    

Mengonfigurasi variabel Terraform

Kode Terraform yang Anda download mencakup variabel yang dapat digunakan untuk menyesuaikan deployment berdasarkan persyaratan Anda. Misalnya, Anda dapat menentukan project Google Cloud dan region tempat Anda ingin men-deploy solusi.

  1. Pastikan direktori yang sedang bekerja adalah $HOME/cloudshell_open/terraform-ml-image-annotation-gcf/infra. Jika bukan, buka direktori tersebut.

  2. Pada direktori yang sama, buatlah file teks dengan nama terraform.tfvars.

  3. Dalam file terraform.tfvars, salin cuplikan kode berikut dan tetapkan nilai untuk variabel yang diperlukan.

    • Ikuti petunjuk yang disediakan sebagai komentar dalam cuplikan kode.
    • Cuplikan kode ini hanya mencakup variabel yang harus Anda tetapkan nilainya. Konfigurasi Terraform mencakup variabel lain yang memiliki nilai default. Untuk meninjau semua variabel dan nilai default, lihat file variables.tf yang tersedia di direktori $HOME/cloudshell_open/terraform-ml-image-annotation-gcf/infra.
    • Pastikan setiap nilai yang Anda tetapkan dalam file terraform.tfvars cocok dengan jenis variabel seperti yang dideklarasikan di dalam file variables.tf. Misalnya, jika jenis yang ditentukan untuk variabel di dalam file adalah variables.tf bool, maka Anda harus memastikan true atau false sebagai nilai variabel dalam file terraform.tfvars.
    # This is an example of the terraform.tfvars file.
    # The values in this file must match the variable types declared in variables.tf.
    # The values in this file override any defaults in variables.tf.
    
    # ID of the project in which you want to deploy the solution
    project_id = "PROJECT_ID"
    

Memvalidasi dan meninjau konfigurasi Terraform

  1. Pastikan direktori yang sedang bekerja adalah $HOME/cloudshell_open/terraform-ml-image-annotation-gcf/infra. Jika bukan, buka direktori tersebut.

  2. Pastikan konfigurasi Terraform tidak terdapat error:

    terraform validate
    

    Jika perintah menunjukkan error, lakukan perbaikan yang diperlukan dalam konfigurasi kemudian jalankan kembali perintahterraform validate. Ulangi langkah ini hingga perintah menunjukkan pesan berikut:

    Success! The configuration is valid.
    
  3. Tinjau resource yang ditentukan dalam konfigurasi:

    terraform plan
    
  4. Jika Anda tidak membuat file terraform.tfvars seperti yang dijelaskan sebelumnya, Terraform akan meminta Anda memasukkan nilai untuk variabel yang tidak memiliki nilai default. Masukkan nilai yang diperlukan.

    Output perintah terraform plan adalah daftar resource yang disediakan Terraform ketika Anda menerapkan konfigurasi.

    Jika Anda ingin melakukan perubahan, edit konfigurasi, kemudian jalankan kembali perintah terraform validate dan terraform plan.

Menyediakan resource

Jika tidak ada perubahan lebih lanjut yang diperlukan dalam konfigurasi Terraform, deploy resource.

  1. Pastikan direktori yang sedang bekerja adalah $HOME/cloudshell_open/terraform-ml-image-annotation-gcf/infra. Jika bukan, buka direktori tersebut.

  2. Terapkan konfigurasi Terraform:

    terraform apply
    
  3. Jika Anda tidak membuat file terraform.tfvars seperti yang dijelaskan sebelumnya, Terraform akan meminta Anda memasukkan nilai untuk variabel yang tidak memiliki nilai default. Masukkan nilai yang diperlukan.

    Terraform menampilkan daftar resource yang akan dibuat.

  4. Ketika Anda diminta untuk melakukan tindakan, masukkan yes.

    Terraform menampilkan pesan yang menunjukkan progres deployment.

    Jika deployment tidak dapat diselesaikan, Terraform akan menampilkan error yang menyebabkan kegagalan. Tinjau pesan error dan update konfigurasi untuk memperbaiki error. Kemudian jalankan kembali perintah terraform apply. Untuk bantuan terkait pemecahan masalah error Terraform, lihat Error ketika men-deploy solusi menggunakan Terraform CLI.

    Setelah semua resource dibuat, Terraform akan menampilkan pesan berikut:

    Apply complete!
    

    Output Terraform juga mencakup URL titik entri layanan pemrosesan gambar, nama input bucket Cloud Storage untuk mengupload gambar, dan nama output bucket Cloud Storage yang berisi data anotasi gambar, seperti yang ditampilkan pada contoh berikut:

    vision_annotations_gcs = "gs://vision-annotations-1234567890"
    vision_input_gcs = "gs://vision-input-1234567890"
    vision_prediction_url = [
      "https://annotate-http-abcde1wxyz-wn.a.run.app",
      "ingressIndex:0",
      "ingressValue:ALLOW_ALL",
      "isAuthenticated:false",
    ]
    
  5. Untuk melihat resource Google Cloud yang di-deploy beserta konfigurasinya, ikuti tur interaktif.

    Memulai tur

Selanjutnya, Anda dapat mempelajari solusi dan melihat cara kerjanya.

Ketika Anda tidak lagi memerlukan solusi tersebut, Anda dapat menghapus deployment untuk menghindari penagihan berkelanjutan untuk resource Google Cloud tersebut. Untuk mengetahui informasi selengkapnya, lihat Menghapus deployment.

Mempelajari Solusi

Di bagian ini, Anda dapat mencoba menggunakan solusi untuk melihat cara kerjanya. Layanan pemrosesan gambar dapat dipanggil dengan dua cara: dengan memanggil REST API-nya secara langsung atau dengan mengupload gambar ke bucket Cloud Storage.

Memanggil layanan melalui REST API

Dalam skenario di mana Anda ingin memproses gambar secara sinkron dalam alur permintaan-respons, gunakan REST API layanan pemrosesan gambar.

Fungsiannotate-http yang di-deploy oleh solusi merupakan titik entri ke REST API layanan pemrosesan gambar. Anda dapat menemukan URL dari fungsi ini di konsol, atau jika Anda men-deploy dengan menggunakan Terraform CLI, di variabel output vision_prediction_url. URL titik entri ini mengekspos endpoint bernama /annotate untuk membuat permintaan pemrosesan gambar. Endpoint /annotate mendukung permintaan GET dan POST dengan parameter berikut:

Parameter Deskripsi
image (POST khusus permintaan) konten gambar, diupload dalam format biner atau ditentukan sebagai data image berenkode base64.
image_uri URI yang mengarah ke gambar.
features (Opsional) Fitur anotasi Vision API yang dipisahkan oleh koma untuk meminta.

Nilai fitur yang mungkin adalah:
  • CROP_HINTS
  • DOCUMENT_TEXT_DETECTION
  • FACE_DETECTION
  • IMAGE_PROPERTIES
  • LABEL_DETECTION
  • LANDMARK_DETECTION
  • LOGO_DETECTION
  • OBJECT_LOCALIZATION
  • PRODUCT_SEARCH
  • SAFE_SEARCH_DETECTION
  • TEXT_DETECTION
  • WEB_DETECTION

Untuk menentukan gambar yang akan dianalisis, sertakan salah satu parameter image atau image_uri. Jika Anda menetapkan keduanya, image_uri akan digunakan.

Misalnya, untuk melakukan deteksi object pada gambar dengan URI internet, Anda dapat mengirim permintaan GET menggunakan curl seperti berikut:

curl "YOUR_ENTRYPOINT_URL/annotate?features=OBJECT_LOCALIZATION&image_uri=YOUR_IMAGE_URI"

Atau, untuk menentukan konten gambar secara langsung menggunakan file gambar lokal, Anda dapat menggunakan permintaan POST seperti berikut:

curl -X POST -F image=@YOUR_IMAGE_FILENAME -F features=OBJECT_LOCALIZATION "YOUR_ENTRYPOINT_URL/annotate"

Respons berisi anotasi gambar dari Vision API dalam format JSON.

Memanggil layanan dengan mengupload gambar ke Cloud Storage

Dalam skenario di mana Anda ingin memproses gambar secara asinkron atau dengan upload banya, gunakan pemicu Cloud Storage layanan pemrosesan gambar, yang secara otomatis memanggil layanan sebagai respons terhadap uplaod gambar.

Ikuti langkah-langkah berikut untuk menganalisis gambar menggunakan pemicu Cloud Storage:

  1. Buka halaman Bucket Cloud Storage di konsol.

    Buka Cloud Storage

  2. Klik nama bucket input Anda (vision-input-ID) untuk membuka halaman Bucket details.

  3. Klik Upload file di tab Object.

  4. Pilih file gambar atau file lain yang ingin Anda analisis.

  5. Setelah upload selesai, kembali ke halaman Bucket Cloud Storage.

    Buka Cloud Storage

  6. Klik nama bucket output anotasi Anda (vision-annotations-ID) untuk membuka halaman Detail bucket.

  7. Tab Object berisi file JSON terpisah untuk setiap gambar yang Anda upload. File JSON berisi data anotasi untuk setiap gambar.

Menyesuaikan solusi

Bagian ini memberikan informasi yang dapat digunakan oleh developer Terraform untuk memodifikasi pemrosesan gambar AI/ML pada solusi Cloud Functions guna memenuhi keperluan teknis dan bisnis mereka sendiri. Panduan di bagian ini hanya relevan jika Anda men-deploy solusi menggunakan Terraform CLI.

Konfigurasi Terraform untuk solusi ini menyediakan variabel berikut yang dapat Anda gunakan untuk menyesuaikan layanan pemrosesan gambar:

Variabel Deskripsi Nilai default
region Region Google Cloud untuk men-deploy Cloud Functions dan resource solusi lain. Lihat Lokasi Cloud Functions untuk informasi selengkapnya. us-west4
gcf_max_instance_count Jumlah maksimum instance Cloud Functions untuk layanan. Tindakan ini membantu mengontrol perilaku penskalaan layanan. Lihat Menggunakan instance maksimum untuk informasi selengkapnya. 10
gcf_timeout_seconds Waktu tunggu untuk permintaan ke layanan dalam hitungan detik. Ini mengontrol berapa waktu yang diperlukan layanan untuk merespon. Lihat Waktu tunggu fungsi untuk informasi selengkapnya. 120
gcf_http_ingress_type_index Mengontrol apakah layanan dapat dipanggil oleh resource di luar project Google Cloud Anda. Lihat Setelan Ingress untuk informasi selengkapnya.

Nilai yang mungkin adalah:
  • 0 (Izinkan semua)
  • 1 (Izinkan internal saja)
  • 2 (Izinkan internal dan Cloud Load Balancing )
0 (Izinkan semua)
gcf_require_http_authentication Mengontrol apakah autentikasi diperlukan untuk membuat permintaan ke layanan. Lihat Mengautentikasi untuk pemanggilan untuk informasi selengkapnya. false
gcf_annotation_features Daftar Fitur anotasi Vision API yang dipisahkan koma pada layanan untuk menyertakan secara default. Ini dapat diganti untuk permintaan perorangan.

Nilai fitur yang mungkin adalah:
  • CROP_HINTS
  • DOCUMENT_TEXT_DETECTION
  • FACE_DETECTION
  • IMAGE_PROPERTIES
  • LABEL_DETECTION
  • LANDMARK_DETECTION
  • LOGO_DETECTION
  • OBJECT_LOCALIZATION
  • PRODUCT_SEARCH
  • SAFE_SEARCH_DETECTION
  • TEXT_DETECTION
  • WEB_DETECTION
FACE_DETECTION,PRODUCT_SEARCH,SAFE_SEARCH_DETECTION

Untuk menyesuaikan solusi, selesaikan langkah-langkah berikut di Cloud Shell:

  1. Pastikan direktori yang sedang bekerja adalah $HOME/cloudshell_open/terraform-ml-image-annotation-gcf/infra. Jika tidak, buka direktori tersebut.

  2. Buka file terraform.tfvars dan lakukan perubahan yang diperlukan, dengan menentukan nilai yang sesuai untuk variabel yang terdaftar di tabel sebelumnya.

  3. Validasi dan tinjau konfigurasi Terraform.

  4. Sediakan resource.

Rekomendasi desain

Ketika Anda membuat perubahan pada solus, baik dengan mengubah nilai yang disediakan variabel Terraform maupun memodifikasi konfigurasi Terraform itu sendiri, lihat referensi di bagian ini untuk membantu Anda mengembangkan arsitektur yang memenuhi keperluan Anda. untuk keamanan, keandalan, biaya, dan performa.

Perhatikan hal-hal berikut:

  • Sebelum membuat perubahan desain apa pun, evaluasi dampak biaya dan pertimbangkan kemungkinan kompromi dengan fitur lain. Anda dapat menilai dampak biaya perubahan desain dengan menggunakan Kalkulator Harga Google Cloud.
  • Untuk menerapkan perubahan desain dalam solusi tersebut, Anda memerlukan keahlian dalam coding Terraform dan pengetahuan tingkat lanjut tentang layanan Google Cloud yang digunakan pada solusi tersebut.
  • Jika Anda mengubah konfigurasi Terraform yang disediakan Google, dan mengalami error, buat masalah di GitHub. Laporan masalah pada GitHub ditinjau berdasarkan upaya terbaik dan tidak ditujukan untuk pertanyaan umum.
  • Untuk informasi selengkapnya mengenai mendesain dan menyiapkan lingkungan tingkat produksi di Google Cloud, lihat Desain zona landing di Google Cloud dan Checklist penyiapan Google Cloud.

Keamanan

Secara default, layanan pemrosesan gambar mengizinkan permintaan dari internet dan tidak memerlukan autentikasi untuk permintaan. Dalam lingkungan produksi, Anda mungkin ingin membatasi akses ke layanan.

Anda dapat mengontrol asal permintaan ke layanan Anda dengan mengubah variabel Terraform gcf_http_ingress_type_index. Berhati-hatilah agar tidak membuat endpoint layanan solusi dapat diakses secara publik di internet. Lihat Mengonfigurasi setelan jaringan dalam dokumentasi Cloud Functions untuk informasi selengkapnya.

Anda dapat mewajibkan autentikasi untuk permintaan ke REST API layanan pemrosesan gambar dengan mengubah variabel Terraform gcf_require_http_authentication. Hal ini membantu mengontrol akses individu ke layanan. Jika Anda mewajibkan autentikasi, pemanggil layanan harus memberikan kredensial untuk membuat permintaan. Lihat Autentikasi untuk pemanggilan dalam dokumentasi Cloud Functions untuk informasi selengkapnya.

Untuk rekomendasi keamanan lainnya, lihat panduan Framework Arsitektur Google Cloud untuk Keamanan, privasi, dan kepatuhan.

Keandalan

Ketika pengguna mengupload gambar ke bucket Google Cloud Storage input, mereka mungkin mengalami level latensi yang berbeda dalam menghasilkan output anotasi. Secara default, pengguna harus melakukan polling pada bucket output untuk menentukan kapan anotasi tersedia. Agar aplikasi Anda dapat tanggap mengambil tindakan andal setelah pemrosesan gambar selesai, Anda dapat berlangganan peristiwa Cloud Storage di bucket output. Misalnya, Anda men-deploy Cloud Function lain untuk memproses data anotasi - lihat Pemicu Cloud Storage dalam dokumentasi Cloud Functions untuk informasi selengkapnya.

Untuk rekomendasi lainnya, lihat panduan berikut untuk membantu mengoptimalkan keandalan produk yang digunakan dalam solusi ini:

Performa

Throughput layanan pemrosesan gambar dipengaruhi secara langsung oleh kemampuan penskalaan Cloud Functions. Cloud Functions menskalakan secara otomatis dengan membuat instance fungsi untuk menangani beban traffic yang masuk, hingga batas instance yang dapat dikonfigurasi. Anda dapat mengontrol penskalaan fungsi dan throughput layanan pemrosesan gambar, dengan mengubah batas instance maksimum atau menghapus batas tersebut seluruhnya. Gunakan variabel Terraform gcf_max_instance_count untuk mengubah batas. Lihat Menggunakan instance maksimum dan Perilaku penskalaan otomatis dalam dokumentasi Cloud Functions untuk informasi selengkapnya.

Selain itu, Anda dapat membantu mengoptimalkan performa dengan mematuhi praktik terbaik berikut:

Biaya

Gunakan rekomendasi dalam panduan berikut untuk membantu mengoptimalkan biaya solusi Anda:

Menghapus deployment

Jika Anda tidak lagi memerlukan deployment solusi, hapus deployment tersebut untuk menghindari penagihan berkelanjutan pada resource yang Anda buat.

Menghapus melalui konsol

Gunakan prosedur ini jika Anda men-deploy solusi melalui konsol.

  1. Pada Konsol Google Cloud, buka halaman Deployment solusi.

    Buka Deployment solusi

  2. Pilih project berisi deployment yang ingin Anda hapus.

  3. Cari deployment yang ingin Anda hapus.

  4. Klik Tindakan , lalu pilih Hapus.

  5. Masukkan nama deployment, lalu klik Konfirmasi.

    Kolom Status menampilkan Menghapus.

    Jika penghapusan gagal, lihat panduan pemecahan masalah pada bagian Error saat menghapus deployment.

Jika tidak lagi memerlukan project Google Cloud yang digunakan untuk solusi, Anda dapat menghapus project tersebut. Untuk informasi selengkapnya, lihat Opsional: Menghapus project

Menghapus menggunakan Terraform CLI

Gunakan prosedur ini jika Anda men-deploy solusi menggunakan Terraform CLI.

  1. Di Cloud Shell, pastikan direktori kerja saat ini adalah $HOME/cloudshell_open/terraform-ml-image-annotation-gcf/infra. Jika bukan, buka direktori tersebut.

  2. Hapus resource yang disediakan oleh Terraform:

    terraform destroy
    

    Terraform menampilkan daftar resource yang akan dimusnahkan.

  3. Ketika Anda diminta untuk melakukan tindakan, masukkan yes.

    Terraform menampilkan pesan yang menunjukkan progres. Setelah semua resource dihapus, Terraform akan menampilkan pesan berikut:

    Destroy complete!
    

    Jika penghapusan gagal, lihat panduan pemecahan masalah pada bagian Error saat menghapus deployment.

Jika tidak lagi memerlukan project Google Cloud yang digunakan untuk solusi, Anda dapat menghapus project tersebut. Untuk informasi selengkapnya, lihat Opsional: Menghapus project

Opsional: Menghapus project

Jika Anda men-deploy solusi di project Google Cloud baru, dan tidak lagi memerlukan project tersebut, hapus dengan melakukan langkah-langkah berikut:

  1. Pada Konsol Google Cloud, buka halaman Kelola resource

    Buka Kelola resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Hapus.
  3. Pada layar perintah, ketik project ID, lalu klik Matikan.

Jika Anda memutuskan untuk mempertahankan project, hapus akun layanan yang dibuat untuk solusi ini, seperti yang akan dijelaskan pada bagian selanjutnya.

Opsional: Menghapus akun layanan

Jika Anda menghapus project yang digunakan untuk solusi tersebut, lewati bagian ini.

Seperti yang telah disebutkan dalam panduan ini, ketika men-deploy solusi, akun layanan akan dibuat atas nama Anda. Akun layanan telah diberi izin IAM tertentu untuk sementara; yaitu, izin yang otomatis dicabut setelah operasi deployment dan penghapusan solusi selesai, tetapi akun layanan tidak dihapus. Google merekomendasikan agar Anda menghapus akun layanan ini.

  • Jika Anda men-deploy solusi melalui Konsol Google Cloud, buka halaman Deployment solusi. (Jika Anda sudah berada di halaman tersebut, muat ulang browser.) Proses terpicu di latar belakang untuk menghapus akun layanan. Tidak ada tindakan lebih lanjut yang diperlukan.

  • Jika Anda men-deploy solusi menggunakan Terraform CLI, lakukan langkah-langkah berikut:

    1. Di Konsol Google Cloud, buka halaman Service accounts.

      Buka halaman Service accounts

    2. Pilih project yang Anda gunakan untuk solusi tersebut.

    3. Pilih akun layanan yang ingin Anda hapus.

      ID email akun layanan yang digunakan untuk membuat solusi menggunakan format berikut:

      goog-sc-DEPLOYMENT_NAME-NNN@PROJECT_ID.iam.gserviceaccount.com
      

      ID email berisi nilai-nilai berikut:

      • DEPLOYMENT_NAME: nama deployment.
      • NNN: 3 digit angka acak.
      • PROJECT_ID: ID project tempat Anda men-deploy solusi.
    4. Klik Delete.

Memecahkan masalah error

Tindakan yang dapat Anda lakukan untuk mendiagnosis dan mengatasi error bergantung pada metode deployment dan kompleksitas error.

Error ketika men-deploy melalui konsol

Jika deployment gagal saat Anda menggunakan konsol, lakukan hal-hal berikut:

  1. Buka halaman Deployment solusi.

    Jika deployment gagal, kolom Status akan menampilkan Gagal.

  2. Lihat detail error yang menyebabkan kegagalan:

    1. Klik Tindakan.

    2. Pilih Lihat log Cloud Build.

  3. Tinjau log Cloud Build dan ambil tindakan yang sesuai untuk menyelesaikan masalah yang menyebabkan kegagalan.

Error ketika men-deploy menggunakan Terraform CLI

Jika deployment gagal saat Anda menggunakan Terraform, output perintah terraform apply akan menyertakan pesan error yang dapat Anda tinjau untuk mendiagnosis masalah.

Pada bagian berikut akan ditunjukkan contoh-contoh error deployment yang mungkin Anda alami ketika menggunakan Terraform.

API tidak diaktifkan

Jika Anda membuat project dan dengan segera mencoba men-deploy solusi di project baru, deployment mungkin akan gagal dengan error seperti berikut:

Error: Error creating Network: googleapi: Error 403: Compute Engine API has not
been used in project PROJECT_ID before or it is disabled. Enable it by visiting
https://console.developers.google.com/apis/api/compute.googleapis.com/overview?project=PROJECT_ID
then retry. If you enabled this API recently, wait a few minutes for the action
to propagate to our systems and retry.

Jika terjadi error, tunggu beberapa menit, lalu jalankan perintah terraform apply lagi.

Jika error API yang tidak diaktifkan tetap berlanjut, ikuti link dalam pesan error untuk mengaktifkan API. Tunggu beberapa ketika sampai API aktif, lalu jalankan lagi perintah terraform apply.

Tidak dapat menetapkan alamat yang diminta

Ketika Anda menjalankan perintah terraform apply, error cannot assign requested address mungkin terjadi dengan pesan seperti berikut:

Error: Error creating service account:
 Post "https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts:
 dial tcp [2001:db8:ffff:ffff::5f]:443:
 connect: cannot assign requested address

Jika terjadi error ini, jalankan kembali perintah terraform apply.

Error ketika menghapus deployment

Dalam kasus tertentu, upaya untuk menghapus deployment mungkin akan gagal:

  • Jika Anda mengubah resource yang disediakan oleh solusi setelah men-deploy solusi melalui konsol, lalu Anda mencoba menghapus deployment, penghapusan mungkin akan gagal. Kolom Status pada halaman Deployment solusi akan menampilkan Gagal, dan log Cloud Build akan menunjukkan penyebab error.
  • Jika Anda mengubah resource dengan menggunakan antarmuka non-Terraform (misalnya, konsol) setelah men-deploy solusi menggunakan Terraform CLI, kemudian Anda mencoba menghapus deployment, penghapusan mungkin akan gagal. Pesan dalam output perintah terraform destroy menunjukkan penyebab error.

Tinjau log dan pesan error serta identifikasi dan hapus resource yang menyebabkan error tersebut. Setelah itu, coba hapus kembali deployment.

Jika deployment berbasis konsol tidak dapat dihapus dan Anda tidak dapat mendiagnosis error menggunakan log Cloud Build, Anda dapat menghapus deployment tersebut menggunakan Terraform CLI yang akan dijelaskan pada bagian berikutnya.

Menghapus deployment berbasis konsol menggunakan Terraform CLI

Bagian ini menjelaskan cara menghapus deployment berbasis konsol jika terjadi error saat Anda mencoba menghapusnya melalui konsol. Dalam pendekatan ini, Anda perlu mendownload konfigurasi Terraform untuk deployment yang ingin dihapus, lalu gunakan Terraform CLI untuk menghapus deployment tersebut.

  1. Identifikasi region tempat kode Terraform, log, dan data deployment lainnya disimpan. Region ini mungkin berbeda dari region yang Anda pilih ketika men-deploy solusi.

    1. Pada Konsol Google Cloud, buka halaman Deployment solusi.

      Buka Deployment solusi

    2. Pilih project berisi deployment yang ingin Anda hapus.

    3. Dalam daftar deployment, identifikasi baris deployment yang ingin Anda hapus.

    4. Klik Lihat semua konten baris.

    5. Pada kolom Lokasi, catat lokasi kedua seperti yang ditandai dalam contoh berikut:

      Lokasi kode deployment, log, dan artefak lainnya.

  2. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.

  3. Membuat variabel lingkungan untuk project ID, region, dan nama deployment yang ingin Anda hapus:

    export REGION="REGION"
    export PROJECT_ID="PROJECT_ID"
    export DEPLOYMENT_NAME="DEPLOYMENT_NAME"
    

    Dalam perintah ini, ganti kode berikut:

    • REGION: lokasi yang Anda catat sebelumnya dalam prosedur ini.
    • PROJECT_ID: ID project tempat Anda men-deploy solusi.
    • DEPLOYMENT_NAME: nama deployment yang ingin Anda hapus.
  4. Dapatkan ID revisi deployment terbaru yang ingin Anda hapus:

    export REVISION_ID=$(curl \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}" \
        | jq .latestRevision -r)
        echo $REVISION_ID
    

    Outputnya mirip dengan hal berikut ini:

    projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME/revisions/r-0
    
  5. Dapatkan lokasi Cloud Storage dari konfigurasi Terraform untuk deployment:

    export CONTENT_PATH=$(curl \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/${REVISION_ID}" \
        | jq .applyResults.content -r)
        echo $CONTENT_PATH
    

    Berikut adalah contoh output dari perintah ini:

    gs://PROJECT_ID-REGION-blueprint-config/DEPLOYMENT_NAME/r-0/apply_results/content
    
  6. Download konfigurasi Terraform dari Cloud Storage ke Cloud Shell:

    gsutil cp -r $CONTENT_PATH $HOME
    cd $HOME/content/infra
    

    Tunggu hingga pesan Operation completed ditampilkan, seperti yang ditunjukkan dalam contoh berikut:

    Operation completed over 45 objects/268.5 KiB
    
  7. Lakukan inisialisasi Terraform:

    terraform init
    

    Tunggu hingga Anda melihat pesan berikut:

    Terraform has been successfully initialized!
    
  8. Menghapus resource yang di-deploy:

    terraform destroy
    

    Terraform menampilkan daftar resource yang akan dimusnahkan.

    Jika muncul peringatan tentang variabel yang tidak dideklarasikan, abaikan peringatan tersebut.

  9. Ketika Anda diminta untuk melakukan tindakan, masukkan yes.

    Terraform menampilkan pesan yang menunjukkan progres. Setelah semua resource dihapus, Terraform akan menampilkan pesan berikut:

    Destroy complete!
    
  10. Menghapus artefak deployment:

    curl -X DELETE \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}?force=true&delete_policy=abandon"
    
  11. Tunggu beberapa detik, lalu verifikasi bahwa artefak deployment telah dihapus:

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}" \
        | jq .error.message
    

    Jika output menampilkan null, tunggu beberapa detik, lalu jalankan kembali perintah.

    Setelah artefak deployment dihapus, pesan seperti yang ditunjukkan pada contoh yang ditampilkan berikut ini:

    Resource 'projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME' was not found
    

Mengirim masukan

Solusi Praktis hanya untuk keperluan informasi dan bukan produk yang didukung secara resmi. Google dapat mengubah atau menghapus solusi tanpa pemberitahuan.

Untuk memecahkan masalah error, tinjau log Cloud Build dan output Terraform.

Untuk mengirim masukan, lakukan hal-hal berikut:

  • Untuk dokumentasi, tutorial dalam konsol, atau solusi, gunakan tombol Kirim Masukan pada halaman tersebut.
  • Untuk kode Terraform yang tidak dimodifikasi, buat laporan masalah di Repositori GitHub. Laporan masalah pada GitHub ditinjau berdasarkan upaya terbaik dan tidak ditujukan untuk pertanyaan umum.

Langkah selanjutnya