Tutorial ini menunjukkan cara mem-build layanan Cloud Run kustom
yang mengubah parameter input deskripsi grafik menjadi diagram dalam format gambar
PNG
. Library ini menggunakan Graphviz dan
diinstal sebagai paket sistem di lingkungan container layanan.
Graphviz digunakan melalui utilitas command line untuk menayangkan permintaan.
Tujuan
- Menulis dan mem-build container kustom dengan Dockerfile
- Menulis, mem-build, dan men-deploy layanan Cloud Run
- Menggunakan utilitas Graphviz dot untuk menghasilkan diagram
- Menguji layanan dengan memposting diagram sintaksis DOT dari koleksi atau kreasi Anda sendiri
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
- Aktifkan Cloud Run Admin API
- Instal dan lakukan inisialisasi gcloud CLI.
- Perbarui komponen:
gcloud components update
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan tutorial, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:
-
Editor Cloud Build (
roles/cloudbuild.builds.editor
) -
Admin Cloud Run (
roles/run.admin
) -
Membuat Akun Layanan (
roles/iam.serviceAccountCreator
) -
Service Account User (
roles/iam.serviceAccountUser
) -
Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer
) [Konsumen Penggunaan Layanan] -
Admin Penyimpanan (
roles/storage.admin
)
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Menyiapkan default gcloud
Untuk mengonfigurasi gcloud dengan setelan default untuk layanan Cloud Run Anda:
Setel project default Anda:
gcloud config set project PROJECT_ID
Ganti PROJECT_ID dengan nama project yang Anda buat untuk tutorial ini.
Konfigurasi gcloud untuk region yang Anda pilih:
gcloud config set run/region REGION
Ganti REGION dengan region Cloud Run pilihan Anda yang didukung.
Lokasi Cloud Run
Cloud Run bersifat regional, berarti infrastruktur yang
menjalankan layanan Cloud Run Anda terletak di region tertentu dan
dikelola oleh Google agar tersedia secara redundan di
semua zona dalam region tersebut.
Memenuhi persyaratan latensi, ketersediaan, atau ketahanan adalah faktor utama
untuk memilih region tempat layanan Cloud Run dijalankan.
Pada umumnya, Anda dapat memilih region yang paling dekat dengan pengguna Anda, tetapi Anda harus mempertimbangkan
lokasi dari produk Google Cloud
lain yang digunakan oleh layanan Cloud Run Anda.
Menggunakan produk Google Cloud secara bersamaan di beberapa lokasi dapat memengaruhi
latensi serta biaya layanan Anda.
Cloud Run tersedia di region berikut:
Tergantung harga Tingkat 1
asia-east1
(Taiwan)asia-northeast1
(Tokyo)asia-northeast2
(Osaka)europe-north1
(Finlandia) CO2 Rendaheurope-southwest1
(Madrid)europe-west1
(Belgia) CO2 Rendaheurope-west4
(Belanda)europe-west8
(Milan)europe-west9
(Paris) CO2 Rendahme-west1
(Tel Aviv)us-central1
(Iowa) CO2 rendahus-east1
(South Carolina)us-east4
(North Virginia)us-east5
(Columbus)us-south1
(Dallas)us-west1
(Oregon) CO2 Rendah
Tergantung harga Tingkat 2
africa-south1
(Johannesburg)asia-east2
(Hong Kong)asia-northeast3
(Seoul, Korea Selatan)asia-southeast1
(Singapura)asia-southeast2
(Jakarta)asia-south1
(Mumbai, India)asia-south2
(Delhi, India)australia-southeast1
(Sydney)australia-southeast2
(Melbourne)europe-central2
(Warsawa, Polandia)europe-west10
(Berlin)europe-west12
(Turin)europe-west2
(London, Inggris Raya) CO2 Rendaheurope-west3
(Frankfurt, Jerman) CO2 Rendaheurope-west6
(Zurich, Swiss) CO2 Rendahme-central1
(Doha)me-central2
(Damam)northamerica-northeast1
(Montreal) CO2 Rendahnorthamerica-northeast2
(Toronto) CO2 Rendahsouthamerica-east1
(Sao Paulo, Brasil) CO2 Rendahsouthamerica-west1
(Santiago, Cile) CO2 Rendahus-west2
(Los Angeles)us-west3
(Salt Lake City)us-west4
(Las Vegas)
Jika sudah membuat layanan Cloud Run, Anda dapat melihat region di dasbor Cloud Run di Konsol Google Cloud.
Mengambil contoh kode
Untuk mengambil contoh kode agar dapat digunakan:
Clone repositori aplikasi contoh ke komputer lokal Anda:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Atau, Anda dapat mendownload sampel sebagai file ZIP dan mengekstraknya.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Atau, Anda dapat mendownload sampel sebagai file ZIP dan mengekstraknya.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Atau, Anda dapat mendownload sampel sebagai file ZIP dan mengekstraknya.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Atau, Anda dapat mendownload sampel sebagai file ZIP dan mengekstraknya.
Ubah ke direktori yang memuat kode contoh Cloud Run:
Node.js
cd nodejs-docs-samples/run/system-package/
Python
cd python-docs-samples/run/system-package/
Go
cd golang-samples/run/system_package/
Java
cd java-docs-samples/run/system-package/
Memvisualisasikan arsitektur
Arsitektur dasarnya seperti ini:
Pengguna membuat permintaan HTTP ke layanan Cloud Run yang menjalankan utilitas Graphviz untuk mengubah permintaan menjadi gambar. Gambar tersebut dikirimkan ke pengguna sebagai respons HTTP.
Memahami kode
Menentukan konfigurasi lingkungan Anda dengan Dockerfile
Dockerfile
Anda dibuat khusus untuk bahasa dan lingkungan operasi dasar,
seperti Ubuntu, yang akan digunakan oleh layanan Anda.
Panduan Memulai Build dan Deploy
menunjukkan berbagai Dockerfiles
yang dapat digunakan sebagai titik awal untuk mem-build
Dockerfile
untuk layanan lain.
Layanan ini memerlukan satu atau beberapa paket sistem tambahan yang tidak tersedia secara default.
Buka
Dockerfile
di editor.Cari pernyataan
Dockerfile
RUN
. Pernyataan ini memungkinkan perintah shell arbitrer dijalankan untuk memodifikasi lingkungan. JikaDockerfile
memiliki beberapa tahapan, yang diidentifikasi dengan menemukan beberapa pernyataanFROM
, maka tahapan tersebut akan ditemukan di tahap terakhir.Paket spesifik yang diperlukan dan mekanisme untuk menginstalnya bervariasi menurut sistem operasi yang dideklarasikan di dalam container.
Untuk petunjuk sistem operasi atau image dasar Anda, klik tab yang sesuai.
Debian/Ubuntu Alpin Alpine memerlukan paket kedua untuk dukungan font.Untuk menentukan sistem operasi image container, periksa nama dalam pernyataan
FROM
atau README yang terkait dengan image dasar Anda. Misalnya, jika Anda memperluas darinode
, Anda dapat menemukan dokumentasi dan indukDockerfile
di Docker Hub.Uji penyesuaian Anda dengan mem-build image, menggunakan
docker build
secara lokal atau Cloud Build.
Menangani permintaan masuk
Layanan contoh menggunakan parameter dari permintaan HTTP yang masuk untuk memanggil
panggilan sistem yang menjalankan perintah utilitas dot
yang sesuai.
Di pengendali HTTP berikut, parameter input deskripsi grafik diekstrak dari
variabel string kueri dot
.
Deskripsi grafik dapat menyertakan karakter yang harus dienkode URL untuk digunakan dalam string kueri.
Node.js
Python
Go
Java
Anda harus membedakan antara error server internal dan input pengguna yang
tidak valid. Layanan contoh ini menampilkan Error Server Internal untuk semua
error command line dot kecuali jika pesan error tersebut berisi string syntax
, yang
menunjukkan masalah input pengguna.
Membuat diagram
Logika inti pembuatan diagram menggunakan alat command line dot untuk memproses parameter input deskripsi grafik menjadi diagram dalam format gambar PNG.
Node.js
Python
Go
Java
Merancang layanan yang aman
Kerentanan apa pun dalam alat dot
adalah potensi kerentanan
untuk layanan web. Anda dapat mengurangi hal ini dengan menggunakan versi terbaru
paket graphviz
dengan mem-build ulang image container secara rutin.
Jika memperluas sampel saat ini untuk menerima input pengguna sebagai parameter command line, Anda harus melindungi dari serangan injection perintah. Beberapa cara untuk mencegah serangan injection meliputi:
- Memetakan input ke kamus parameter yang didukung
- Memvalidasi input cocok dengan rentang nilai yang diketahui aman, mungkin menggunakan ekspresi reguler
- Meng-escape input untuk memastikan sintaksis shell tidak dievaluasi
Anda dapat mengurangi potensi kerentanan lebih lanjut dengan men-deploy layanan dengan akun layanan yang belum diberi izin untuk menggunakan layanan Google Cloud, daripada menggunakan akun default, yang biasanya menggunakan izin. Oleh sebab itu, langkah-langkah dalam tutorial ini akan membuat dan menggunakan akun layanan baru.
Mengirimkan kode
Untuk mengirim kode, build kode dengan Cloud Build, lalu upload ke Container Registry, dan deploy ke Cloud Run:
Jalankan perintah berikut untuk mem-build container dan memublikasikannya di Container Registry.
Node.js
gcloud builds submit --tag gcr.io/PROJECT_ID/graphviz
Dengan PROJECT_ID sebagai project ID Google Cloud Anda, dan
graphviz
merupakan nama yang ingin Anda berikan ke layanan.Setelah berhasil, Anda akan melihat pesan SUCCESS yang berisi ID, waktu pembuatan, dan nama image. Image tersebut disimpan di Container Registry dan dapat digunakan kembali bila diinginkan.
Python
gcloud builds submit --tag gcr.io/PROJECT_ID/graphviz
Dengan PROJECT_ID sebagai project ID Google Cloud Anda, dan
graphviz
merupakan nama yang ingin Anda berikan ke layanan.Setelah berhasil, Anda akan melihat pesan SUCCESS yang berisi ID, waktu pembuatan, dan nama image. Image tersebut disimpan di Container Registry dan dapat digunakan kembali bila diinginkan.
Go
gcloud builds submit --tag gcr.io/PROJECT_ID/graphviz
Dengan PROJECT_ID sebagai project ID Google Cloud Anda, dan
graphviz
merupakan nama yang ingin Anda berikan ke layanan.Setelah berhasil, Anda akan melihat pesan SUCCESS yang berisi ID, waktu pembuatan, dan nama image. Image tersebut disimpan di Container Registry dan dapat digunakan kembali bila diinginkan.
Java
Contoh ini menggunakan Jib untuk mem-build image Docker menggunakan alat Java umum. Jib mengoptimalkan build container tanpa memerlukan Dockerfile atau menginstal Docker. Pelajari lebih lanjut cara mem-build container Java dengan Jib.Dengan Dockerfile, konfigurasikan dan build image dasar menggunakan paket sistem yang diinstal untuk menggantikan image dasar default Jib:
gcloud builds submit --tag gcr.io/PROJECT_ID/graphviz-base
Dengan PROJECT_ID sebagai project ID Google Cloud Anda.
Gunakan bantuan kredensial gcloud untuk memberi otorisasi Docker agar dikirim ke Container Registry Anda.
gcloud auth configure-docker
Build container akhir Anda dengan Jib dan publikasikan di Container Registry:
mvn compile jib:build \ -Dimage=gcr.io/PROJECT_ID/graphviz \ -Djib.from.image=gcr.io/PROJECT_ID/graphviz-base
Dengan PROJECT_ID sebagai project ID Google Cloud Anda.
Deploy menggunakan:
Command line
- Buat akun layanan baru. Kode Anda, termasuk paket sistem apa pun
yang digunakan, hanya dapat menggunakan
layanan Google Cloud yang telah diberikan ke akun layanan ini.
Dengan SA_NAME adalah nama yang Anda berikan untuk akun layanan ini. Jika ada error atau kerentanan dalam kode, kode Anda tidak akan dapat mengakses resource project Google Cloud lainnya.gcloud iam service-accounts create SA_NAME
- Deploy kode, dengan menentukan akun layanan.
Dengan PROJECT_ID sebagai project ID Google Cloud Anda, SA_NAME adalah nama akun layanan yang Anda buat,gcloud run deploy graphviz-web --service-account SA_NAME@PROJECT_ID.iam.gserviceaccount.com --image gcr.io/PROJECT_ID/graphviz
graphviz
adalah nama container dari contoh di atas, dangraphviz-web
adalah nama layanan. Berikan responsY
untuk permintaan "izinkan untuk tidak diautentikasi". Lihat Mengelola akses untuk mengetahui detail selengkapnya tentang autentikasi berbasis IAM. - Tunggu hingga deployment selesai. Proses ini dapat memakan waktu sekitar setengah menit. Jika berhasil, command line akan menampilkan URL layanan.
Terraform
Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.
Kode Terraform berikut membuat layanan Cloud Run.
Ganti
gcr.io/cloudrun/hello
dengan referensi ke container Anda.Kode Terraform berikut membuat layanan Cloud Run Anda menjadi publik.
- Buat akun layanan baru. Kode Anda, termasuk paket sistem apa pun
yang digunakan, hanya dapat menggunakan
layanan Google Cloud yang telah diberikan ke akun layanan ini.
Jika Anda ingin men-deploy pembaruan kode ke layanan, ulangi langkah-langkah sebelumnya. Setiap deployment ke layanan akan membuat revisi baru dan otomatis melayani lalu lintas jika sudah siap.
Cobalah
Coba layanan Anda dengan mengirimkan permintaan POST
HTTP dengan deskripsi sintaksis DOT
dalam payload permintaan.
Kirim permintaan HTTP ke layanan Anda.
Salin URL ke kolom URL browser Anda dan perbarui
[SERVICE_DOMAIN]
:https://SERVICE_DOMAIN/diagram.png?dot=digraph Run { rankdir=LR Code -> Build -> Deploy -> Run }
Anda dapat menyematkan diagram di halaman web:
<img src="https://SERVICE_DOMAIN/diagram.png?dot=digraph Run { rankdir=LR Code -> Build -> Deploy -> Run }" />
Buka file
diagram.png
yang dihasilkan di aplikasi apa pun yang mendukung filePNG
, seperti Chrome.Kodenya akan terlihat seperti berikut:
Anda dapat menjelajahi koleksi deskripsi diagram siap pakai.
- Salin konten file
.dot
yang dipilih Kirim permintaan HTTP ke layanan Anda.
Salin URL ke kolom URL browser
https://SERVICE_DOMAIN/diagram.png?dot=SELECTED DOTFILE CONTENTS
Pembersihan
Jika Anda membuat project baru untuk tutorial ini, hapus project tersebut. Jika Anda menggunakan project yang ada dan ingin mempertahankannya tanpa ada perubahan yang ditambahkan dalam tutorial ini, hapus resource yang dibuat untuk tutorial.
Menghapus project
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.
Untuk menghapus project:
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Menghapus resource tutorial
Hapus layanan Cloud Run yang Anda deploy dalam tutorial ini:
gcloud run services delete SERVICE-NAME
Dengan SERVICE-NAME adalah nama layanan pilihan Anda.
Anda juga dapat menghapus layanan Cloud Run dari Konsol Google Cloud.
Hapus konfigurasi region default gcloud yang Anda tambahkan selama penyiapan tutorial:
gcloud config unset run/region
Hapus konfigurasi project:
gcloud config unset project
Hapus resource Google Cloud lain yang dibuat dalam tutorial ini:
Hapus image container bernama
gcr.io/<var>PROJECT_ID</var>/graphviz
dari Container Registry.Hapus akun layanan
<var>SA_NAME</var>
.gcloud iam service-accounts delete SA_NAME@PROJECT_ID.iam.gserviceaccount.com
Langkah selanjutnya
- Bereksperimen dengan aplikasi graphviz:
- Menambahkan dukungan untuk utilitas graphviz lainnya yang menerapkan berbagai algoritma untuk pembuatan diagram.
- Simpan diagram ke Cloud Storage. Anda ingin menyimpan gambar atau sintaks DOT?
- Menerapkan perlindungan terhadap penyalahgunaan konten dengan Cloud Natural Language API.
- Lihat contoh lain paket sistem dalam tutorial Memproses Gambar dengan Cloud Run.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.