Gunakan "Google Terjemahan" dasar aplikasi di Python 2 Cloud Run (Docker)

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:

  1. Server Flask lokal (Python 2)
  2. Server Flask lokal (Python 3)
  3. App Engine (Python 2)
  4. App Engine (Python 3)
  5. Cloud Functions (Python 3)
  6. Cloud Run (Python 2 melalui Docker)
  7. Cloud Run (Python 3 melalui Docker)
  8. 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

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?

Membacanya dan menyelesaikan latihan Hanya membacanya

Bagaimana penilaian Anda terhadap pengalaman dengan Python?

Pemula Menengah Mahir

Bagaimana penilaian Anda terhadap pengalaman menggunakan layanan Google Cloud?

Pemula Menengah Mahir

2. Penyiapan dan persyaratan

Penyiapan lingkungan mandiri

  1. 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.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • 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.
  1. 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.

fb0f1d315f122d4a.png

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:

2275786a24f8f204.png

Pilih API yang ingin Anda aktifkan, lalu klik Aktifkan:

2556f923b628e31.png

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:

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:

5cd6110c4414cf65.png

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)))
  1. Impor ini akan menghadirkan fungsi Flask, modul google.auth, dan library klien Cloud Translation API.
  2. 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.
  3. 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:

  1. 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.
  2. Reset variabel dasar untuk formulir. Hal ini terutama untuk permintaan GET karena permintaan POST akan memiliki data yang menggantikannya.
  3. 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.
  4. 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:

169f6edf5f7d2068.png

Terjemahkan sesuatu untuk melihat cara kerjanya.

31554e71cb80f1b4.png

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:

  1. Selesaikan semua edisi lain dari codelab ini untuk dijalankan secara lokal atau di-deploy ke platform komputasi serverless Google Cloud (lihat README repo).
  2. Selesaikan tutorial ini menggunakan bahasa pemrograman lain.
  3. Ubah aplikasi ini untuk mendukung bahasa sumber atau target yang berbeda.
  4. 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

Google Cloud Functions

Google Cloud Run

Google Cloud Buildpacks, Container Registry, Artifact Registry

Google Cloud Translation dan Google ML Kit

Produk/halaman Google Cloud lainnya

Python dan Flask

Lisensi

Tutorial ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0, sedangkan kode sumber di repo dilisensikan berdasarkan Apache 2.