1. Ringkasan
Rangkaian codelab ini (tutorial praktik mandiri) bertujuan untuk membantu developer memahami berbagai opsi yang mereka miliki saat men-deploy aplikasi. Dalam codelab ini, Anda akan mempelajari cara menggunakan Google Cloud Translation API dengan Python dan menjalankannya secara lokal atau men-deploy ke platform komputasi serverless Cloud (App Engine, Cloud Functions, atau Cloud Run). Aplikasi contoh yang ditemukan di repo tutorial ini dapat di-deploy dengan (setidaknya) delapan cara berbeda hanya dengan perubahan konfigurasi kecil:
- Server Flask lokal (Python 2)
- Server Flask lokal (Python 3)
- App Engine (Python 2)
- App Engine (Python 3)
- Cloud Functions (Python 3)
- Cloud Run (Python 2 melalui Docker)
- Cloud Run (Python 3 melalui Docker)
- Cloud Run (Python 3 melalui Cloud Buildpacks)
Codelab ini berfokus pada deployment aplikasi ini ke platform yang dicetak tebal di atas.
Anda akan mempelajari cara
- Menggunakan Google Cloud API, khususnya Cloud Translation API (advanced/v3)
- Menjalankan aplikasi web dasar secara lokal atau men-deploy ke platform komputasi serverless Cloud
Yang Anda butuhkan
- Project Google Cloud dengan akun Penagihan Cloud yang aktif
- Flask yang diinstal untuk dijalankan secara lokal, atau platform komputasi serverless Cloud yang diaktifkan untuk deployment berbasis cloud
- Keterampilan Python dasar
- Pengetahuan perintah sistem operasi dasar yang berfungsi
Survei
Bagaimana Anda akan menggunakan tutorial ini?
Bagaimana penilaian Anda terhadap pengalaman dengan Python?
Bagaimana penilaian Anda terhadap pengalaman menggunakan layanan Google Cloud?
2. Penyiapan dan persyaratan
Penyiapan lingkungan mandiri
- Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.
- Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API, dan Anda dapat memperbaruinya kapan saja.
- Project ID harus unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis menghasilkan string unik; biasanya Anda tidak peduli dengan kata-katanya. Pada sebagian besar codelab, Anda harus mereferensikan Project ID (dan biasanya diidentifikasi sebagai
PROJECT_ID
). Jadi, jika Anda tidak menyukainya, buat ID acak lain, atau, Anda dapat mencoba sendiri dan melihat apakah tersedia. Kemudian file akan "dibekukan" setelah project dibuat. - Ada nilai ketiga, Nomor Project yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
- Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan API/resource Cloud. Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Untuk menonaktifkan resource agar tidak menimbulkan penagihan di luar tutorial ini, ikuti petunjuk "pembersihan" yang ada di akhir codelab. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
3. Mengaktifkan Translation API
Mengaktifkan Cloud API
Di bagian ini, Anda akan mempelajari cara mengaktifkan Google API secara umum. Untuk aplikasi contoh, Anda akan mengaktifkan Cloud Translation API, Cloud Run, dan Cloud Artifact Registry.
Pengantar
Apa pun Google API yang ingin Anda gunakan di aplikasi, API tersebut harus diaktifkan. Contoh berikut menunjukkan dua cara untuk mengaktifkan Cloud Vision API. Setelah mempelajari cara mengaktifkan satu Cloud API, Anda dapat mengaktifkan API lainnya karena prosesnya serupa.
Opsi 1: Dari Cloud Shell atau antarmuka command line Anda
Meskipun mengaktifkan API dari Cloud Console lebih umum, beberapa developer lebih suka melakukan semuanya dari command line. Untuk melakukannya, Anda perlu mencari "nama layanan" API. URL ini terlihat seperti URL: SERVICE_NAME
.googleapis.com
. Anda dapat menemukannya di Diagram produk yang didukung, atau Anda dapat membuat kueri secara terprogram dengan Google Discovery API.
Dengan informasi ini, menggunakan Cloud Shell (atau lingkungan pengembangan lokal dengan alat command line gcloud
yang diinstal), Anda dapat mengaktifkan API, sebagai berikut:
gcloud services enable SERVICE_NAME.googleapis.com
Misalnya, perintah ini mengaktifkan Cloud Vision API:
gcloud services enable vision.googleapis.com
Perintah ini mengaktifkan App Engine:
gcloud services enable appengine.googleapis.com
Anda juga dapat mengaktifkan beberapa API dengan satu permintaan. Misalnya, command line ini mengaktifkan Cloud Run, Cloud Artifact Registry, dan Cloud Translation API:
gcloud services enable artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com
Opsi 2: Dari Cloud Console
Anda juga dapat mengaktifkan Vision API di Pengelola API. Dari Cloud Console, buka Pengelola API, lalu pilih Library.
Jika Anda ingin mengaktifkan Cloud Vision API, mulai masukkan "vision" di kotak penelusuran, dan semua yang cocok dengan yang telah Anda masukkan sejauh ini akan muncul:
Pilih API yang ingin Anda aktifkan, lalu klik Aktifkan:
Biaya
Meskipun banyak Google API yang dapat digunakan tanpa biaya, penggunaan produk & API Google Cloud tidak gratis. Saat mengaktifkan Cloud API, Anda mungkin diminta untuk memberikan akun penagihan yang aktif. Namun, penting untuk diperhatikan bahwa beberapa produk Google Cloud memiliki paket "Selalu Gratis" (harian/bulanan), yang harus Anda lampaui agar muncul tagihan. Jika tidak, kartu kredit Anda (atau instrumen penagihan yang ditentukan) tidak akan ditagih.
Pengguna harus merujuk pada informasi harga untuk API apa pun sebelum mengaktifkannya, terutama dengan memperhatikan apakah API tersebut memiliki paket gratis, dan jika ya, apa paketnya. Jika Anda mengaktifkan Cloud Vision API, Anda akan memeriksa halaman informasi harganya. Cloud Vision memiliki kuota gratis, dan selama Anda tidak melebihi batas agregat (dalam setiap bulan), Anda tidak akan dikenai biaya apa pun.
Harga dan paket gratis bervariasi di antara Google API. Contoh:
- Google Cloud/GCP — setiap produk ditagih secara berbeda dan umumnya menggunakan pembayaran per siklus vCPU, konsumen penyimpanan, penggunaan memori, atau pembayaran per penggunaan; lihat informasi paket gratis di atas.
- Google Maps — memiliki serangkaian API dan menawarkan kredit bulanan gratis sebesar$200 USD secara keseluruhan kepada pengguna.
- API Google Workspace (sebelumnya G Suite) — menyediakan penggunaan gratis (hingga batas tertentu) yang tercakup dalam biaya langganan bulanan Workspace, sehingga tidak ada penagihan langsung untuk penggunaan API Gmail, Google Drive, Kalender, Dokumen, Spreadsheet, dan Slide.
Produk Google yang berbeda ditagih secara berbeda, jadi pastikan untuk merujuk dokumentasi API Anda untuk informasi tersebut.
Ringkasan
Setelah Anda mengetahui cara mengaktifkan Google API secara umum, buka Pengelola API dan aktifkan Cloud Translation API, Cloud Run, dan Cloud Artifact Registry (jika Anda belum melakukannya). Anda mengaktifkan yang pertama karena aplikasi kami menggunakannya. Anda mengaktifkan yang terakhir karena di sanalah image container kami disimpan sebelum di-deploy untuk memulai layanan Cloud Run. Itulah sebabnya Anda harus mengaktifkan image container. Jika Anda lebih memilih untuk mengaktifkan semuanya dengan alat gcloud
, jalankan perintah berikut dari terminal Anda:
gcloud services enable artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com
Meskipun kuota bulanannya tidak tercantum di halaman ringkasan tingkat "Selalu Gratis" secara keseluruhan, halaman harga Translation API menyatakan bahwa semua pengguna mendapatkan jumlah karakter terjemahan tetap setiap bulan. Anda tidak akan dikenai biaya apa pun dari API jika tetap berada di bawah nilai minimum tersebut. Jika ada tagihan lain terkait Google Cloud, tagihan tersebut akan dibahas di bagian "Pembersihan" di akhir.
4. Mendapatkan kode aplikasi contoh
Clone kode di repo secara lokal atau di Cloud Shell (menggunakan perintah git clone
), atau download file ZIP dari tombol Code hijau seperti yang ditunjukkan pada screenshot berikut:
Setelah Anda memiliki semuanya, buat salinan lengkap folder untuk melakukan tutorial khusus ini, karena tutorial ini mungkin akan melibatkan penghapusan atau perubahan file. Jika ingin melakukan deployment yang berbeda, Anda dapat memulai dari awal dengan menyalin yang asli sehingga tidak perlu meng-clone atau mendownloadnya lagi.
5. Tur aplikasi contoh
Aplikasi contoh adalah turunan Google Terjemahan sederhana yang meminta pengguna memasukkan teks dalam bahasa Inggris dan menerima terjemahan yang setara dari teks tersebut dalam bahasa Spanyol. Sekarang buka file main.py
agar kita dapat melihat cara kerjanya. Dengan menghapus baris yang dikomentari tentang pemberian lisensi, tampilannya akan terlihat seperti ini di bagian atas dan bawah:
from flask import Flask, render_template, request
import google.auth
from google.cloud import translate
app = Flask(__name__)
_, PROJECT_ID = google.auth.default()
TRANSLATE = translate.TranslationServiceClient()
PARENT = 'projects/{}'.format(PROJECT_ID)
SOURCE, TARGET = ('en', 'English'), ('es', 'Spanish')
# . . . [translate() function definition] . . .
if __name__ == '__main__':
import os
app.run(debug=True, threaded=True, host='0.0.0.0',
port=int(os.environ.get('PORT', 8080)))
- Impor ini akan menghadirkan fungsi Flask, modul
google.auth
, dan library klien Cloud Translation API. - Variabel global mewakili aplikasi Flask, project ID Cloud, klien Translation API, "jalur lokasi" induk untuk panggilan Translation API, serta bahasa sumber dan target. Dalam hal ini, bahasanya adalah Inggris (
en
) dan Spanyol (es
), tetapi Anda dapat mengubah nilai ini ke kode bahasa lain yang didukung oleh Cloud Translation API. - Blok
if
besar di bagian bawah digunakan dalam tutorial untuk menjalankan aplikasi ini secara lokal—blok ini menggunakan server pengembangan Flask untuk menayangkan aplikasi kita. Bagian ini juga ada di sini untuk tutorial deployment Cloud Run jika server web tidak dipaketkan ke dalam penampung. Anda diminta untuk mengaktifkan penggabungan server dalam penampung, tetapi jika Anda mengabaikannya, kode aplikasi akan kembali menggunakan server pengembangan Flask. (Ini bukan masalah dengan App Engine atau Cloud Functions karena keduanya adalah platform berbasis sumber, yang berarti Google Cloud menyediakan dan menjalankan server web default.)
Terakhir, di tengah main.py
adalah inti aplikasi, fungsi translate()
:
@app.route('/', methods=['GET', 'POST'])
def translate(gcf_request=None):
"""
main handler - show form and possibly previous translation
"""
# Flask Request object passed in for Cloud Functions
# (use gcf_request for GCF but flask.request otherwise)
local_request = gcf_request if gcf_request else request
# reset all variables (GET)
text = translated = None
# if there is data to process (POST)
if local_request.method == 'POST':
text = local_request.form['text']
data = {
'contents': [text],
'parent': PARENT,
'target_language_code': TARGET[0],
}
# handle older call for backwards-compatibility
try:
rsp = TRANSLATE.translate_text(request=data)
except TypeError:
rsp = TRANSLATE.translate_text(**data)
translated = rsp.translations[0].translated_text
# create context & render template
context = {
'orig': {'text': text, 'lc': SOURCE},
'trans': {'text': translated, 'lc': TARGET},
}
return render_template('index.html', **context)
Fungsi utama melakukan pekerjaan mengambil input pengguna, dan memanggil Translation API untuk melakukan pekerjaan berat. Mari kita bahas satu per satu:
- Periksa apakah permintaan berasal dari Cloud Functions menggunakan variabel
local_request
. Cloud Functions mengirimkan objek Permintaan Flask-nya sendiri, sedangkan semua yang lain (berjalan secara lokal atau di-deploy ke App Engine atau Cloud Run) akan mendapatkan objek permintaan langsung dari Flask. - Reset variabel dasar untuk formulir. Hal ini terutama untuk permintaan GET karena permintaan POST akan memiliki data yang menggantikannya.
- Jika permintaannya adalah POST, ambil teks yang akan diterjemahkan, dan buat struktur JSON yang mewakili persyaratan metadata API. Kemudian, panggil API, yang akan kembali ke versi API sebelumnya jika pengguna menggunakan library yang lebih lama.
- Apa pun hasilnya, format hasil sebenarnya (POST) atau tidak ada data (GET) ke dalam konteks template dan render.
Bagian visual aplikasi ada dalam file index.html
template. Halaman ini menampilkan hasil terjemahan sebelumnya (kosong jika tidak ada) diikuti dengan formulir yang meminta sesuatu untuk diterjemahkan:
<!doctype html>
<html><head><title>My Google Translate 1990s</title><body>
<h2>My Google Translate (1990s edition)</h2>
{% if trans['text'] %}
<h4>Previous translation</h4>
<li><b>Original</b>: {{ orig['text'] }} (<i>{{ orig['lc'][0] }}</i>)</li>
<li><b>Translated</b>: {{ trans['text'] }} (<i>{{ trans['lc'][0] }}</i>)</li>
{% endif %}
<h4>Enter <i>{{ orig['lc'][1] }}</i> text to translate to <i>{{ trans['lc'][1] }}</i>:</h4>
<form method="POST"><input name="text"><input type="submit"></form>
</body></html>
6. Men-deploy layanan
Sekarang Anda siap men-deploy layanan terjemahan ke Cloud Run dengan menjalankan perintah ini:
gcloud run deploy translate --source . --allow-unauthenticated --platform managed
Output akan terlihat seperti berikut, dan memberikan beberapa perintah untuk langkah berikutnya:
$ gcloud run deploy translate --source . --allow-unauthenticated --platform managed Please specify a region: [1] asia-east1 [2] asia-east2 . . . (other regions) . . . [28] us-west4 [29] cancel Please enter your numeric choice: REGION_CHOICE To make this the default region, run `gcloud config set run/region REGION`. Deploying from source requires an Artifact Registry repository to store build artifacts. A repository named [cloud-run-source-deploy] in region [REGION] will be created. Do you want to continue (Y/n)? This command is equivalent to running "gcloud builds submit --pack image=[IMAGE] ." and "gcloud run deploy translate --image [IMAGE]" Building . . . and deploying container to Cloud Run service [translate] in project [PROJECT_ID] region [REGION] ✓ Building and deploying... Done. ✓ Creating Container Repository... ✓ Uploading sources... ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/60e1b 9bb-b991-4b4e-8d8a-HASH?project=PROJECT_NUMBER]. ✓ Creating Revision... ✓ Routing traffic... ✓ Setting IAM Policy... Done. Service [translate] revision [translate-00001-xyz] has been deployed and is serving 100 percent of traffic. Service URL: https://SVC_NAME-HASH-REG_ABBR.a.run.app
Setelah aplikasi tersedia secara global di seluruh dunia, Anda akan dapat mengaksesnya di URL yang berisi project ID seperti yang ditampilkan dalam output deployment:
Terjemahkan sesuatu untuk melihat cara kerjanya.
7. Kesimpulan
Selamat! Anda telah mempelajari cara mengaktifkan Cloud Translation API, mendapatkan kredensial yang diperlukan, dan men-deploy aplikasi web sederhana ke Cloud Run Python 2. Anda dapat mempelajari lebih lanjut deployment ini dari tabel ini di repo.
Pembersihan
Cloud Translation API memungkinkan Anda melakukan jumlah karakter terjemahan tetap per bulan secara gratis. App Engine juga memiliki kuota gratis, dan hal yang sama berlaku untuk Cloud Functions dan Cloud Run. Anda akan dikenai biaya jika salah satunya terlampaui. Jika berencana melanjutkan ke codelab berikutnya, Anda tidak perlu menonaktifkan aplikasi.
Namun, jika Anda belum siap melanjutkan ke tutorial berikutnya atau khawatir internet akan menemukan aplikasi yang baru saja Anda deploy, nonaktifkan aplikasi App Engine, hapus Cloud Function, atau nonaktifkan layanan Cloud Run untuk menghindari tagihan. Jika sudah siap untuk beralih ke codelab berikutnya, Anda dapat mengaktifkannya kembali. Di sisi lain, jika Anda tidak akan melanjutkan aplikasi ini atau codelab lainnya dan ingin menghapus semuanya, Anda dapat mematikan project.
Selain itu, men-deploy ke platform komputasi serverless Google Cloud akan menimbulkan biaya build dan penyimpanan kecil. Cloud Build memiliki kuota gratisnya sendiri seperti halnya Cloud Storage. Untuk transparansi yang lebih besar, Cloud Build mem-build image aplikasi Anda, yang kemudian disimpan di Cloud Container Registry atau Artifact Registry, penerusnya. Penyimpanan gambar tersebut akan menggunakan sebagian kuota tersebut, begitu juga dengan traffic keluar jaringan saat mentransfer gambar tersebut ke layanan. Namun, Anda mungkin tinggal di wilayah yang tidak memiliki paket gratis tersebut, jadi perhatikan penggunaan penyimpanan Anda untuk meminimalkan potensi biaya.
8. Referensi lainnya
Di bagian berikut, Anda dapat menemukan materi bacaan tambahan serta latihan yang direkomendasikan untuk menambah pengetahuan yang diperoleh dari menyelesaikan tutorial ini.
Studi tambahan
Setelah Anda memiliki beberapa pengalaman dengan Translation API, mari kita lakukan beberapa latihan tambahan untuk mengembangkan keterampilan Anda lebih lanjut. Untuk melanjutkan jalur pembelajaran Anda, ubah aplikasi contoh kami untuk melakukan hal berikut:
- Selesaikan semua edisi lain dari codelab ini untuk dijalankan secara lokal atau di-deploy ke platform komputasi serverless Google Cloud (lihat README repo).
- Selesaikan tutorial ini menggunakan bahasa pemrograman lain.
- Ubah aplikasi ini untuk mendukung bahasa sumber atau target yang berbeda.
- Mengupgrade aplikasi ini agar dapat menerjemahkan teks ke dalam lebih dari satu bahasa; mengubah file template agar memiliki pulldown bahasa target yang didukung.
Pelajari lebih lanjut
Google App Engine
- Halaman beranda App Engine
- Dokumentasi App Engine
- Panduan memulai App Engine Python 3
- Akun layanan default untuk App Engine
- Runtime Python 2 App Engine (Standar)
- Runtime Python 3 App Engine (Standar)
- Perbedaan antara runtime App Engine (Standar) Python 2 & 3
- Panduan migrasi App Engine (Standar) Python 2 ke 3
Google Cloud Functions
- Halaman beranda Cloud Functions
- Dokumentasi Cloud Functions
- Panduan memulai Cloud Functions Python
- Akun layanan default untuk Cloud Functions
Google Cloud Run
- Halaman beranda Cloud Run
- Dokumentasi Cloud Run
- Panduan memulai Python Cloud Run
- Akun layanan default untuk Cloud Run
Google Cloud Buildpacks, Container Registry, Artifact Registry
- Pengumuman Cloud Buildpacks
- repo Cloud Buildpacks
- Halaman beranda Cloud Artifact Registry
- Dokumentasi Cloud Artifact Registry
- Halaman beranda Cloud Container Registry
- Dokumentasi Cloud Container Registry
Google Cloud Translation dan Google ML Kit
- Halaman beranda Cloud Translation
- Dokumentasi Cloud Translation
- Halaman harga Translation API
- Semua API "komponen penyusun" Cloud AI/ML
- Google ML Kit (subset Cloud AI/ML API untuk perangkat seluler)
- Google ML Kit Translation API
Produk/halaman Google Cloud lainnya
- Dukungan Python Google Cloud
- Library klien Google Cloud
- Paket "Selalu Gratis" Google Cloud
- Semua dokumentasi Google Cloud
Python dan Flask
Lisensi
Tutorial ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0, sedangkan kode sumber di repo dilisensikan berdasarkan Apache 2.