Solusi Praktis: platform E-commerce dengan komputasi serverless

Last reviewed 2023-08-24 UTC

Panduan ini membantu Anda memahami, men-deploy, dan menggunakan solusi Platform e-commerce dengan komputasi serverless. Solusi ini menunjukkan cara membangun dan menjalankan aplikasi e-commerce untuk organisasi retail, dengan situs toko online yang dapat dilihat publik. Panduan ini menunjukkan cara membuat aplikasi yang dapat diskalakan untuk menangani lonjakan penggunaan (misalnya, selama peristiwa skala puncak seperti diskon musiman), dan yang dapat mengelola permintaan berdasarkan lokasi pengunjung. Desain ini membantu toko online memberikan layanan yang konsisten kepada pelanggan yang tersebar secara geografis.

Solusi ini adalah titik awal yang bagus jika Anda ingin mempelajari cara men-deploy aplikasi web e-commerce yang skalabel dengan kemampuan serverless. Jika Anda menginginkan kontrol operasional terperinci, lihat solusi Aplikasi web e-commerce yang di-deploy di Kubernetes.

Dokumen ini mengasumsikan bahwa Anda telah memahami konsep-konsep dasar cloud, meskipun bukan tentang Google Cloud. Anda akan terbantu jika Anda memiliki pengalaman dengan Terraform.

Tujuan

Panduan solusi ini membantu Anda dalam hal berikut:

  • Mempelajari cara mendesain arsitektur sistem untuk situs e-commerce.
  • Optimalkan situs e-commerce untuk performa, skala, dan responsivitas.
  • Memantau dan mengantisipasi batasan beban.
  • Gunakan pelacakan dan pelaporan error untuk memahami dan mengelola masalah.

Produk

Solusi ini menggunakan produk Google Cloud berikut:

  • Cloud Run: Layanan terkelola sepenuhnya yang memungkinkan Anda membangun dan men-deploy aplikasi dalam container tanpa server. Google Cloud menangani penskalaan dan tugas infrastruktur lainnya sehingga Anda dapat berfokus pada logika bisnis kode Anda.
  • Cloud SQL: Database PostgreSQL berbasis cloud yang dikelola sepenuhnya di infrastruktur Google Cloud.
  • Secret Manager: Layanan yang memungkinkan Anda menyimpan, mengelola, dan mengakses secret sebagai blob biner atau string teks. Anda dapat menggunakan Secret Manager untuk menyimpan sandi database, kunci API, atau sertifikat TLS yang diperlukan aplikasi saat runtime.
  • Cloud Storage: Layanan siap pakai bagi perusahaan yang menyediakan penyimpanan objek tanpa batas dan berbiaya rendah untuk beragam jenis data. Data dapat diakses dari dalam dan di luar Google Cloud serta direplikasi secara geo-redundan.
  • Firebase Hosting: Layanan hosting yang terkelola sepenuhnya untuk men-deploy dan menyalurkan aplikasi web serta konten statis Anda.
  • Cloud Logging: Layanan yang dapat Anda gunakan untuk menyimpan, menelusuri, menganalisis, memantau, serta membuat pemberitahuan terkait data logging dan peristiwa dari Google Cloud dan cloud lainnya.
  • Cloud Trace: Sistem pelacakan terdistribusi untuk Google Cloud yang membantu Anda memahami waktu yang diperlukan aplikasi untuk menangani permintaan masuk dari pengguna atau aplikasi lain, dan berapa lama waktu yang diperlukan untuk menyelesaikan operasi seperti panggilan RPC yang dilakukan saat menangani permintaan.
  • Error Reporting: Layanan ini menggabungkan dan menampilkan error yang dihasilkan dalam layanan cloud yang sedang berjalan. Pelaporan Error mengelompokkan error yang dianggap memiliki akar masalah yang sama.

Arsitektur

Diagram berikut menunjukkan arsitektur dari solusi:

Aplikasi web e-commerce yang di-deploy dengan Cloud Run

Alur permintaan

Berikut adalah alur pemrosesan permintaan platform e-commerce. Langkah-langkah dalam alur diberi nomor seperti yang ditunjukkan pada diagram arsitektur sebelumnya.

  1. Frontend klien Firebase Hosting. Frontend menggunakan Lit dan komponen web untuk rendering sisi klien data API.
  2. Klien web memanggil backend API yang berjalan sebagai layanan Cloud Run. Server Cloud Run API ditulis dalam Django menggunakan Framework Django REST.
  3. Konfigurasi dan secret lainnya untuk aplikasi Python disimpan di Secret Manager
  4. Aset statis untuk aplikasi disimpan di Cloud Storage.
  5. Database Cloud SQL, menggunakan PostgreSQL, digunakan sebagai backend database relasional untuk aplikasi Python.
  6. Cloud Logging, Cloud Trace, dan Error Reporting menyimpan log, trace OpenTelemetry, dan laporan error yang dikirim oleh produk cloud lain dan server Cloud Run API. Data ini memungkinkan pemantauan untuk perilaku aplikasi yang benar dan pemecahan masalah perilaku yang tidak terduga.

Biaya

Untuk mengetahui estimasi biaya resource Google Cloud yang digunakan oleh platform E-commerce dengan solusi komputasi serverless, lihat perkiraan yang telah dihitung sebelumnya di Kalkulator Harga Google Cloud.

Gunakan perkiraan biaya tersebut 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.
  • Durasi waktu resource tersebut digunakan.

Sebelum memulai

Untuk men-deploy solusi ini, Anda memerlukan project Google Cloud dan beberapa izin IAM terlebih dahulu.

Membuat atau memilih project Google Cloud

Saat men-deploy solusi, Anda perlu menentukan di mana project Google Cloud resource akan di-deploy. Anda dapat membuat project baru atau menggunakan project yang ada untuk deployment.

Jika Anda ingin membuat project baru, lakukan sebelum memulai deployment. Menggunakan project dapat membantu menghindari konflik dengan resource yang telah disediakan sebelumnya, seperti resource yang digunakan untuk workload produksi.

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 membuat project baru untuk solusi ini, Anda memiliki peran dasar roles/owner di project tersebut dan memiliki semua izin yang diperlukan. Jika Anda tidak memiliki peran roles/owner, minta 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

Project IAM Admin
(roles/resourcemanager.projectIamAdmin)
config.deployments.create
config.deployments.list
Cloud Infrastructure Manager Admin
(roles/config.admin)
iam.serviceAccount.actAs Service Account User
(roles/iam.serviceAccountUser)

Tentang izin akun layanan sementara

Jika Anda memulai proses deployment melalui konsol, Google akan membuat akun layanan untuk men-deploy solusi atas nama Anda (dan akan menghapus deployment jika Anda memilihnya). Akun layanan ini diberi izin IAM tertentu untuk sementara; yaitu, izin tersebut akan otomatis dicabut setelah operasi deployment dan penghapusan solusi selesai. Google merekomendasikan agar setelah Anda menghapus deployment, Anda harus menghapus akun layanan, seperti yang akan dijelaskan 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.

Men-deploy solusi

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. Dalam katalog Solusi Praktis Memulai Google Cloud, buka solusi Platform e-commerce dengan komputasi serverless.

    Buka solusi Platform e-commerce dengan komputasi serverless

  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.

    Panel konfigurasi langkah demi langkah akan ditampilkan.

  4. Selesaikan langkah-langkah di panel konfigurasi.

    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 dan menggunakan aplikasi web e-commerce yang di-deploy, ikuti petunjuk dalam artikel Menjelajahi deployment Avocano.

  7. Untuk melihat resource Google Cloud yang di-deploy dan konfigurasinya, ikuti tur interaktif.

    Mulai tur

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-dynamic-python-webapp/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-dynamic-python-webapp/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-dynamic-python-webapp/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-dynamic-python-webapp/infra.
    • Pastikan setiap nilai yang Anda tetapkan dalam file terraform.tfvars cocok dengan jenis variabel seperti yang dideklarasikan dalam file variables.tf. Misalnya, jika jenis yang ditentukan untuk variabel dalam file variables.tf adalah file bool, Anda harus menentukan true atau false sebagai nilai variabel tersebut di 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"
      
      # Google Cloud region where you want to deploy the solution
      # Example: us-central1
      region = "REGION"
      
      # Google Cloud zone where you want to deploy the solution
      # Example: us-central1-a
      zone = "ZONE"
      
      # Container Registry that hosts the client image
      client_image_host = "hsa-public/serverless-ecommerce"
      
      # Container Registry that hosts the server image
      server_image_host = "hsa-public/serverless-ecommerce"
      

      Untuk mengetahui informasi tentang nilai yang dapat Anda tetapkan ke variabel yang diperlukan, lihat artikel berikut:

Memvalidasi dan meninjau konfigurasi Terraform

  1. Pastikan direktori yang sedang bekerja adalah $HOME/cloudshell_open/terraform-dynamic-python-webapp/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-dynamic-python-webapp/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!
    
  5. Untuk melihat dan menggunakan aplikasi web e-commerce yang di-deploy, ikuti petunjuk dalam artikel Menjelajahi deployment Avocano.

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

    Mulai tur

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.

Jelajahi deployment Avocano Anda

Anda telah men-deploy aplikasi situs Avocano. Anda dapat mengunjungi situs Avocano dan melihat-lihat, lalu jelajahi cara kerja solusi tersebut di konsol Google Cloud. Perlu diketahui bahwa setelah men-deploy aplikasi, diperlukan waktu beberapa menit agar situs muncul di alamat yang diberikan.

Apa itu Avocano?

Solusi ini menggunakan aplikasi contoh bernama Avocano untuk mendemonstrasikan deployment dan pengelolaan aplikasi web dengan banyak alat dan produk yang digunakan untuk aplikasi serverless. Avocano adalah aplikasi yang meniru penerapan aplikasi web e-commerce di dunia nyata.

Frontend Avocano menyajikan etalase tiruan, tempat Anda dapat menambahkan item ke keranjang, dan mencoba menyelesaikan proses checkout, tetapi kemudian toko mengungkapkan bahwa itu palsu (Avoca--no!). Meskipun Anda tidak dapat membeli avocano, aplikasi ini menunjukkan pengelolaan inventaris dengan mengurangi jumlah produk yang tersedia satu per satu.

Halaman landing Avocano

Jelajahi frontend

Untuk meluncurkan frontend deployment solusi Anda:

  1. Buka Firebase console.
  2. Pilih project yang ada.
  3. Buka bagian Build > Hosting.
  4. Pilih Domain yang diakhiri dengan web.app. Frontend aplikasi contoh Anda akan terbuka di jendela browser baru.

Sekarang Anda dapat berinteraksi dengan situs Avocano seperti yang akan dilihat pelanggannya, termasuk menjelajahi produk, menambahkan produk ke keranjang belanja, dan check out sebagai tamu.

Lihat penskalaan otomatis dan konfigurasi konkurensi

Cloud Runsecara otomatis meningkatkan atau menurunkan skala instance container dari nol, bergantung pada traffic, guna memberikan waktu startup yang cepat untuk aplikasi Anda.

Pahami setelan untuk penskalaan otomatis dan konkurensi

Penting untuk dipahami bahwa setelan untuk penskalaan otomatis dan konkurensi di Cloud Run dapat memengaruhi performa dan biaya aplikasi Anda:

  • Instance minimum: Anda dapat menetapkan setelan instance minimum untuk mengaktifkan instance tidak ada aktivitas untuk layanan Anda. Dengan meningkatkan setelan instance minimum untuk mengantisipasi traffic yang lebih tinggi, Anda dapat meminimalkan waktu respons untuk pengguna N pertama. Jika layanan Anda memerlukan latensi yang lebih rendah, terutama saat melakukan penskalaan dari nol instance aktif, Anda dapat menentukan jumlah minimum instance container yang tetap aktif dan siap untuk melayani permintaan.

  • Instance maksimum: Meningkatkan setelan instance maksimum di Cloud Run dapat membantu Anda melayani traffic yang sangat tinggi yang diharapkan. IDalam skenario seperti itu, Anda juga harus mengevaluasi kuota saat ini dan mempertimbangkan untuk meminta penambahan kuota. Mengurangi setelan instance maksimum dapat membantu Anda menghindari biaya yang tidak terduga atau pemanfaatan infrastruktur pendukung pokok yang lebih tinggi (seperti kapasitas database Anda).

  • Konkurensi: Setelan serentak Cloud Run menentukan jumlah maksimum permintaan yang dapat diproses secara bersamaan oleh instance penampung tertentu. Mengoptimalkan memori, CPU, dan konkurensi untuk perilaku aplikasi Anda akan memastikan bahwa setiap instance container memiliki pemanfaatan terbaik, dan meminimalkan kebutuhan untuk meningkatkan skala ke instance baru. Untuk mengetahui informasi selengkapnya, lihat Mengoptimalkan konkurensi.

Lihat setelan penskalaan otomatis dan konkurensi

Untuk melihat setelan instance minimum dan maksimum saat ini, serta setelan konkurensi untuk layanan Cloud Run Anda:

  1. Buka Cloud Run
  2. Klik layanan yang Anda minati untuk membuka halaman Detail layanan.
  3. Klik tab Revisi.
  4. Pada panel detail di sebelah kanan, instance minimum, instance maksimum, dan setelan konkurensi saat ini dicantumkan di bagian tab Container.

Jika Anda ingin mempelajari cara menyesuaikan setelan ini untuk mengoptimalkan performa aplikasi, lihat Tips pengembangan umum dalam dokumentasi Cloud Run.

Lihat log traffic

Anda dapat menggunakan alat logging di Cloud Run untuk memantau traffic ke aplikasi Anda dan mendapatkan peringatan saat terjadi masalah.

Untuk melihat log layanan Cloud Run Anda:

  1. Buka Cloud Run
  2. Klik layanan yang dipilih dalam daftar yang ditampilkan.
  3. Klik tab Logs untuk mendapatkan log permintaan dan container untuk semua revisi layanan ini. Pemfilteran dapat dilakukan berdasarkan tingkat keparahan log.

Cloud Run secara otomatis merekam log dari banyak tempat: apa pun yang ditulis ke standard out dan error standar, apa pun di /var/log/, dan lainnya. Setiap logging manual yang dilakukan dengan library Cloud Logging juga akan direkam. Anda juga dapat melihat log untuk layanan ini langsung di Cloud Logging dengan mengklik Lihat di Logs Explorer.

Di aplikasi Avocano, coba tindakan pengguna berikut untuk memicu output yang sesuai yang dapat Anda lihat di log.

Tindakan pengguna Output log
Beli keranjang belanja menggunakan Kumpulkan sebagai jenis pembayaran dan jumlah produk di keranjang tidak melebihi jumlah inventaris. Output log menampilkan log info, dengan status httpRequest 200.
Beli keranjang belanja menggunakan Kumpulkan sebagai jenis pembayaran, tetapi jumlah produk di keranjang melebihi jumlah inventaris. Output log menampilkan log Peringatan, dengan status httpRequest 400.
Beli keranjang belanja menggunakan Kredit sebagai jenis pembayaran. Output log menampilkan log Error, dengan status httpRequest 501.

Anda dapat melihat kode yang menimbulkan error yang mengarah ke respons HTTP 400/501 dalam file serializers.py . Cloud Run mencatat responsnya, dan membuat entri log permintaan yang sesuai.

Anda dapat menggunakan pemberitahuan berbasis log untuk memberi tahu Anda setiap kali pesan tertentu muncul di log yang disertakan.

Lihat instrumentasi trace dan trace yang direkam

Solusi ini menggunakan instrumentasi otomatis Open Telemetry Python untuk mengambil data telemetri untuk aplikasi Avocano.

Pahami cara tracing diterapkan

Solusi ini mengimplementasikan kode dan setelan konfigurasi berikut untuk menghasilkan rekaman aktivitas menggunakan instrumentasi otomatis:

  1. Tambahkan dependensi untuk Cloud Trace dalam file requirements.txt , termasuk yang berikut ini:
    • opentelemetry-distro: menginstal Open Telemetry API, SDK, dan alat command line.
    • opentelemetry-instrumentation: menambahkan dukungan untuk instrumentasi otomatis Python.
    • opentelemetry-exporter-gcp-trace: menyediakan dukungan untuk mengekspor rekaman aktivitas ke Cloud Trace.
    • opentelemetry-resource-detector: memberikan dukungan untuk mendeteksi resource Google Cloud.
    • opentelemetry-instrumentation-django: mengizinkan permintaan pelacakan untuk aplikasi Django.
  2. Tetapkan binding IAM di file iam.tf untuk memungkinkan server menulis ke Cloud Trace.
  3. Konfigurasikan variabel lingkungan OTEL_TRACES_EXPORTER di file services.tf agar dapat menggunakan pengekspor untuk Cloud Trace.
  4. Di server/Procfile, konfigurasi server untuk menjalankan perintah opentelemetry-instrument di aplikasi Avocano. Perintah ini mendeteksi paket di Avocano dan menerapkan instrumentasi pelacakan otomatis pada paket tersebut, jika memungkinkan.

Untuk mempelajari lebih lanjut cara mengumpulkan data Cloud Trace untuk Python, lihat Python dan OpenTelemetry.

Lihat data latensi

Agar dapat melihat data latensi permintaan, ikuti langkah-langkah berikut:

  1. Buka Cloud Trace
  2. Di bagian Pilih rekaman aktivitas di halaman Daftar rekaman aktivitas, klik titik biru, yang mewakili rekaman aktivitas yang disimpan. Kolom Latensi menampilkan latensi untuk rekaman aktivitas yang diambil.

Anda juga dapat melihat data rekaman aktivitas menggunakan visualisasi berikut di halaman Daftar rekaman aktivitas:

  • Grafik waterfall: mewakili permintaan lengkap melalui aplikasi. Setiap langkah dalam linimasa adalah span, yang dapat Anda klik untuk melihat detailnya. Cloud Run secara otomatis membuat span untuk operasi internal, seperti penanganan permintaan dan load balancing. Span ini muncul dalam grafik waterfall yang sama dengan span yang dihasilkan oleh Avocano, sehingga Anda dapat melihat masa aktif penuh permintaan.
  • Detail span: menampilkan label atau anotasi apa pun yang Anda tambahkan ke kode aplikasi saat menginstrumentasikannya untuk rekaman aktivitas.

Jika Anda ingin menambahkan rekaman aktivitas yang disesuaikan, lihat Instrumentasi Manual dalam dokumentasi Open Telemetry.

Rekomendasi desain

Bagian ini berisi rekomendasi penggunaan platform E-commerce dengan solusi komputasi serverless untuk mengembangkan arsitektur yang memenuhi kebutuhan Anda akan keamanan, keandalan, biaya, dan performa.

Untuk melihat rekomendasi desain untuk setiap area, klik tab yang sesuai.

Tingkatkan keamanan

Fokus desain Saran
Enkripsi data

Secara default, Cloud Run mengenkripsi data menggunakan kunci milik dan dikelola Google. Untuk melindungi container dengan menggunakan kunci yang Anda kontrol, Anda dapat menggunakan kunci enkripsi yang dikelola pelanggan. Untuk informasi selengkapnya, lihat Menggunakan kunci enkripsi yang dikelola pelanggan.

Keamanan supply chain software Untuk memastikan bahwa hanya image container resmi yang di-deploy ke layanan Cloud Run, Anda dapat menggunakan Otorisasi Biner.

Meningkatkan keandalan

Fokus desain Saran
Penskalaan aplikasi Layanan Cloud Run dalam solusi tersebut dikonfigurasi untuk menskalakan instance container secara horizontal berdasarkan beban permintaan. Tinjau dan sesuaikan parameter penskalaan otomatis berdasarkan persyaratan Anda. Untuk mengetahui informasi selengkapnya, lihat Tentang penskalaan otomatis instance container.
Penanganan permintaan Untuk meningkatkan daya respons layanan Cloud Run yang menyimpan status spesifik klien pada instance container, Anda dapat menggunakan afinitas sesi. Permintaan dari klien yang sama dirutekan ke instance container yang sama sesuai upaya terbaik. Untuk mengetahui informasi selengkapnya, lihat Menetapkan afinitas sesi (layanan).
Ketahanan data Untuk melindungi data dari kehilangan, Anda dapat menggunakan pencadangan otomatis database Cloud SQL. Untuk informasi selengkapnya, lihat artikel Tentang cadangan Cloud SQL.
Ketersediaan tinggi (HA) database

Database Cloud SQL dalam solusi tersebut di-deploy dalam satu zona. Untuk ketersediaan tinggi, Anda dapat menggunakan konfigurasi multi-zona. Untuk informasi selengkapnya, lihat Tentang ketersediaan tinggi.

Jika ketersediaan tinggi database merupakan persyaratan penting, AlloyDB for PostgreSQL adalah layanan Google Cloud alternatif yang dapat Anda pertimbangkan.

Keandalan database

Instance Cloud SQL dalam solusi ini menggunakan jenis mesin db-custom-2-4096, yang menggunakan dua CPU dengan memori 4 GB. Jenis mesin ini dirancang guna menyediakan resource untuk database berbiaya rendah yang mungkin hanya cocok untuk lingkungan pengujian dan pengembangan. Jika Anda membutuhkan keandalan tingkat produksi, pertimbangkan untuk menggunakan jenis mesin yang menyediakan lebih banyak CPU dan memori.

Instance Cloud SQL yang menggunakan jenis mesin db-g1-small tidak disertakan dalam perjanjian tingkat layanan (SLA) Cloud SQL. Untuk informasi selengkapnya tentang konfigurasi yang dikecualikan dari SLA, lihat Panduan operasional.

Kuota dan batas

Jumlah resource Cloud Run terbatas. Jika Anda mengantisipasi lonjakan traffic, misalnya karena acara musiman atau penjualan, Anda harus meminta penambahan kuota. Untuk mengetahui informasi selengkapnya, lihat Cara menambah kuota.

Beberapa permintaan kuota memerlukan persetujuan manual, jadi Anda harus membuat perencanaan terlebih dahulu. Anda juga dapat menyetel peringatan tentang kemajuan Anda dalam mencapai kuota.

Mengoptimalkan biaya

Fokus desain Saran
Efisiensi sumber daya

Cloud Run menentukan jumlah permintaan yang harus dikirim ke instance container berdasarkan penggunaan CPU dan penggunaan memori. Dengan meningkatkan setelan serentak maksimum, Anda dapat mengurangi jumlah instance container yang perlu dibuat oleh Cloud Run, sehingga mengurangi biaya. Untuk mengetahui informasi selengkapnya, lihat Permintaan serentak maksimum per instance (layanan).

Layanan Cloud Run dalam solusi ini dikonfigurasi untuk mengalokasikan CPU hanya selama pemrosesan permintaan. Saat layanan Cloud Run selesai menangani permintaan, akses instance container ke CPU akan dinonaktifkan. Untuk informasi tentang efek biaya dan performa dari konfigurasi ini, lihat Alokasi CPU (layanan).

Meningkatkan performa

Fokus desain Saran
Waktu mulai aplikasi Untuk mengurangi efek performa cold start, Anda dapat mengonfigurasi jumlah minimum instance container Cloud Run ke nilai bukan nol. Untuk informasi selengkapnya, lihat Tips pengembangan umum untuk Cloud Run.
Setel konkurensi Solusi ini disesuaikan untuk memaksimalkan throughput container individual. Cloud Run otomatis menyesuaikan konkurensi untuk melayani beberapa permintaan. Namun, Anda harus menyesuaikan konkurensi maksimum default jika container Anda tidak dapat memproses banyak permintaan serentak, atau jika container Anda dapat menangani volume permintaan yang lebih besar. Untuk mengetahui informasi selengkapnya, lihat Mengoptimalkan konkurensi.
Performa database

Untuk aplikasi yang sensitif terhadap performa, Anda dapat meningkatkan performa Cloud SQL dengan menggunakan jenis mesin yang lebih besar dan dengan meningkatkan kapasitas penyimpanan.

Jika performa database merupakan persyaratan penting, AlloyDB untuk PostgreSQL adalah layanan Google Cloud alternatif yang dapat Anda pertimbangkan.

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 memodifikasi konfigurasi Terraform yang disediakan Google, dan kemudian 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.

Menghapus deployment solusi

Jika Anda tidak lagi memerlukan deployment solusi, hapus deployment tersebut guna menghindari penagihan berkelanjutan untuk 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. Di baris untuk deployment, klik Tindakan, lalu pilih Hapus.

    Anda mungkin perlu men-scroll untuk melihat Tindakan di baris.

  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-dynamic-python-webapp/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.
      

      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.

Mengatasi 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. Di baris untuk deployment, klik Tindakan.

      Anda mungkin perlu men-scroll untuk melihat Tindakan di baris.

    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 ditunjukkan contoh error deployment yang mungkin Anda alami saat menggunakan Terraform.

Error API dinonaktifkan

Jika Anda membuat project dan 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 error ini terjadi, tunggu beberapa menit, lalu jalankan terraform apply kembali perintah.

Error tidak dapat menetapkan alamat yang diminta

Ketika Anda menjalankan perintah terraform apply, error cannot assign requested address mungkin saja 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 yang 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:

    gcloud storage cp $CONTENT_PATH $HOME --recursive
    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 mengatasi error, tinjau log Cloud Build dan output Terraform.

Untuk mengirim masukan, lakukan hal-hal berikut:

  • Untuk dokumentasi, tutorial dalam konsol, atau solusinya, gunakan tombol Kirim Masukan pada halaman tersebut.
  • Untuk kode yang tidak dimodifikasi, buat masalah di repositori GitHub yang sesuai:

    Masalah GitHub ditinjau berdasarkan upaya terbaik dan tidak ditujukan untuk pertanyaan penggunaan umum.

Langkah berikutnya

Solusi ini menunjukkan cara men-deploy aplikasi web e-commerce menggunakan Cloud Run. Untuk terus mempelajari produk dan kemampuan Google Cloud lebih lanjut, lihat: