Triển khai "Google Dịch" cơ bản ứng dụng trên Python 2 App Engine

1. Tổng quan

Loạt lớp học lập trình này (hướng dẫn thực hành, tự học) nhằm giúp nhà phát triển hiểu rõ các lựa chọn mà họ có khi triển khai ứng dụng. Trong lớp học lập trình này, bạn sẽ tìm hiểu cách sử dụng API Dịch của Google Cloud bằng Python và chạy trên máy hoặc triển khai lên nền tảng điện toán không có máy chủ trên Google Cloud (App Engine, Cloud Functions hoặc Cloud Run). Ứng dụng mẫu có trong kho lưu trữ của hướng dẫn này có thể được triển khai theo (ít nhất) 8 cách khác nhau mà chỉ cần thay đổi cấu hình nhỏ:

  1. Máy chủ Flask cục bộ (Python 2)
  2. Máy chủ Flask cục bộ (Python 3)
  3. App Engine (Python 2)
  4. App Engine (Python 3)
  5. Cloud Functions (Python 3)
  6. Cloud Run (Python 2 thông qua Docker)
  7. Cloud Run (Python 3 thông qua Docker)
  8. Cloud Run (Python 3 thông qua Cloud Buildpacks)

Lớp học lập trình này tập trung vào việc triển khai ứng dụng này cho(các) nền tảng in đậm ở trên.

Bạn sẽ tìm hiểu cách

Bạn cần có

Bài khảo sát

Bạn sẽ sử dụng hướng dẫn này như thế nào?

Đọc và hoàn thành bài tập Chỉ đọc

Bạn đánh giá thế nào về trải nghiệm của mình với Python?

Tân binh Trung cấp Thành thạo

Bạn đánh giá trải nghiệm sử dụng các dịch vụ của Google Cloud như thế nào?

Tân binh Trung cấp Thành thạo

2. Cách thiết lập và yêu cầu

Thiết lập môi trường theo tốc độ của riêng bạn

  1. Đăng nhập vào Google Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Tên dự án là tên hiển thị cho người tham gia dự án này. Đây là một chuỗi ký tự không được API của Google sử dụng và bạn có thể cập nhật chuỗi này bất cứ lúc nào.
  • Mã dự án phải là duy nhất trên tất cả các dự án Google Cloud và không thể thay đổi được (không thể thay đổi sau khi đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường thì bạn không cần quan tâm đến chuỗi này. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (và mã này thường được xác định là PROJECT_ID). Vì vậy, nếu không thích mã này, hãy tạo một mã ngẫu nhiên khác hoặc bạn có thể thử mã của riêng mình và xem mã đó có được chấp nhận hay không. Sau đó, tệp này sẽ "đóng băng" sau khi dự án được tạo.
  • Có một giá trị thứ ba là Mã dự án mà một số API sử dụng. Tìm hiểu thêm về cả ba giá trị này trong tài liệu.
  1. Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên/API trên Cloud. Việc tham gia lớp học lập trình này sẽ không tốn kém nhiều chi phí, nếu có. Để tắt các tài nguyên để không bị tính phí sau khi kết thúc hướng dẫn này, hãy làm theo hướng dẫn "dọn dẹp" ở cuối lớp học lập trình. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.

3. Bật API dịch

Đối với ứng dụng mẫu của chúng tôi, bạn sẽ bật Cloud Translation API và dịch vụ App Engine bằng cách sử dụng hướng dẫn tương tự được cung cấp bên dưới.

Bật Cloud API

Giới thiệu

Bất kể bạn muốn sử dụng API Google nào trong ứng dụng, bạn đều phải bật các API đó. Ví dụ sau đây cho thấy hai cách để bật API Cloud Vision. Sau khi tìm hiểu cách bật một Cloud API, bạn có thể bật các API khác vì quy trình này tương tự.

Cách 1: Từ Cloud Shell hoặc giao diện dòng lệnh

Mặc dù việc bật API từ Cloud Console phổ biến hơn, nhưng một số nhà phát triển lại thích làm mọi việc từ dòng lệnh. Để làm như vậy, bạn cần tra cứu "tên dịch vụ" của API. Mã này có dạng như một URL: SERVICE_NAME.googleapis.com. Bạn có thể tìm thấy các sản phẩm này trong Biểu đồ sản phẩm được hỗ trợ hoặc bạn có thể truy vấn các sản phẩm này theo phương thức lập trình bằng Google Discovery API.

Khi đã có thông tin này, bạn có thể sử dụng Cloud Shell (hoặc môi trường phát triển cục bộ đã cài đặt công cụ dòng lệnh gcloud) để bật một API như sau:

gcloud services enable SERVICE_NAME.googleapis.com

Ví dụ: lệnh này bật Cloud Vision API:

gcloud services enable vision.googleapis.com

Lệnh này bật App Engine:

gcloud services enable appengine.googleapis.com

Bạn cũng có thể bật nhiều API bằng một yêu cầu. Ví dụ: dòng lệnh này bật Cloud Run, Cloud Artifact Registry và Cloud Translation API:

gcloud services enable artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com

Cách 2: Trong Bảng điều khiển Google Cloud

Bạn cũng có thể bật API Vision trong Trình quản lý API. Trên Cloud Console, hãy chuyển đến Trình quản lý API rồi chọn Thư viện.

fb0f1d315f122d4a.png

Nếu bạn muốn bật API Cloud Vision, hãy bắt đầu nhập "vision" (tầm nhìn) vào thanh tìm kiếm. Mọi nội dung khớp với nội dung bạn đã nhập cho đến thời điểm này sẽ xuất hiện:

2275786a24f8f204.png

Chọn API bạn muốn bật rồi nhấp vào Bật:

2556f923b628e31.png

Chi phí

Mặc dù bạn có thể sử dụng nhiều API của Google mà không mất phí, nhưng việc sử dụng các sản phẩm và API của Google Cloud không miễn phí. Khi bật API đám mây, bạn có thể được yêu cầu cung cấp một tài khoản thanh toán đang hoạt động. Tuy nhiên, điều quan trọng cần lưu ý là một số sản phẩm của Google Cloud có cấp "Luôn miễn phí" (hằng ngày/hằng tháng). Bạn phải vượt quá cấp này thì mới phải trả phí; nếu không, thẻ tín dụng (hoặc phương thức thanh toán đã chỉ định) của bạn sẽ không bị tính phí.

Người dùng nên tham khảo thông tin về giá của mọi API trước khi bật, đặc biệt là lưu ý xem API đó có cấp miễn phí hay không và nếu có thì cấp đó là gì. Nếu đang bật API Cloud Vision, bạn sẽ kiểm tra trang thông tin về giá của API đó. Cloud Vision có hạn mức miễn phí. Miễn là bạn tuân thủ hạn mức tổng thể (trong mỗi tháng), bạn sẽ không phải trả phí.

Mức giá và các cấp miễn phí khác nhau giữa các API của Google. Ví dụ:

Các sản phẩm của Google được tính phí theo cách khác nhau, vì vậy, hãy nhớ tham khảo tài liệu của API để biết thông tin đó.

Tóm tắt

Giờ đây, bạn đã biết cách bật các API của Google nói chung, vui lòng chuyển đến Trình quản lý APIbật cả API Dịch trên đám mây và dịch vụ App Engine (nếu bạn chưa bật), API Dịch trên đám mây vì ứng dụng của chúng ta sẽ sử dụng API này và dịch vụ App Engine vì bạn đang triển khai một ứng dụng App Engine. Nếu bạn muốn thực hiện việc này từ dòng lệnh, hãy đưa ra lệnh sau:

gcloud services enable appengine.googleapis.com translate.googleapis.com

Mặc dù hạn mức hằng tháng không được liệt kê trong trang tóm tắt tổng thể về cấp "Luôn miễn phí", nhưng trang giá của API Dịch cho biết tất cả người dùng đều nhận được một lượng ký tự được dịch cố định hằng tháng. Bạn sẽ không phải trả bất kỳ khoản phí nào từ API nếu vẫn ở dưới ngưỡng đó. Nếu có bất kỳ khoản phí nào khác liên quan đến Google Cloud, chúng tôi sẽ thảo luận về các khoản phí đó ở phần cuối trong mục "Dọn dẹp".

4. Tải mã ứng dụng mẫu

Sao chép mã trong kho lưu trữ trên máy hoặc trong Cloud Shell (bằng lệnh git clone) hoặc tải tệp ZIP xuống qua nút màu xanh lục như trong ảnh chụp màn hình sau:

5cd6110c4414cf65.png

Giờ thì bạn đã có mọi thứ, hãy tạo một bản sao đầy đủ của thư mục để thực hiện hướng dẫn cụ thể này, vì hướng dẫn này có thể liên quan đến việc xoá hoặc thay đổi các tệp. Nếu muốn triển khai một cách khác, bạn có thể bắt đầu lại bằng cách sao chép bản gốc để không phải sao chép hoặc tải xuống lại.

5. Tham quan ứng dụng mẫu

Ứng dụng mẫu là một sản phẩm phái sinh đơn giản của Google Dịch, nhắc người dùng nhập văn bản bằng tiếng Anh và nhận bản dịch tương đương của văn bản đó bằng tiếng Tây Ban Nha. Bây giờ, hãy mở tệp main.py để xem cách hoạt động. Nếu bỏ qua các dòng có chú thích về việc cấp phép, thì ở đầu và cuối tệp sẽ có nội dung như sau:

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. Các lệnh nhập này mang lại chức năng Flask, mô-đun google.auth và thư viện ứng dụng API Dịch trên đám mây.
  2. Các biến toàn cục đại diện cho ứng dụng Flask, mã dự án trên Google Cloud, ứng dụng API Dịch, "đường dẫn vị trí" gốc cho các lệnh gọi API Dịch, cũng như ngôn ngữ nguồn và ngôn ngữ đích. Trong trường hợp này, đó là tiếng Anh (en) và tiếng Tây Ban Nha (es), nhưng bạn có thể thay đổi các giá trị này thành mã ngôn ngữ khác do Cloud Translation API hỗ trợ.
  3. Khối if lớn ở dưới cùng được dùng trong hướng dẫn chạy ứng dụng này trên máy – khối này sử dụng máy chủ phát triển Flask để phân phát ứng dụng của chúng ta. Phần này cũng có trong hướng dẫn triển khai Cloud Run trong trường hợp máy chủ web không được đóng gói vào vùng chứa. Bạn sẽ được yêu cầu bật tính năng đóng gói máy chủ trong vùng chứa, nhưng trong trường hợp bạn bỏ qua việc này, mã ứng dụng sẽ quay lại sử dụng máy chủ phát triển Flask. (Đây không phải là vấn đề với App Engine hoặc Cloud Functions vì đó là các nền tảng dựa trên nguồn, nghĩa là Google Cloud cung cấp và chạy một máy chủ web mặc định.)

Cuối cùng, ở giữa main.py là phần cốt lõi của ứng dụng, hàm 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)

Hàm chính thực hiện việc nhập dữ liệu của người dùng và gọi API Dịch để thực hiện các thao tác phức tạp. Hãy cùng phân tích:

  1. Kiểm tra xem các yêu cầu có đến từ Cloud Functions hay không bằng cách sử dụng biến local_request. Cloud Functions gửi đối tượng Yêu cầu Flask của riêng mình, trong khi tất cả các đối tượng khác (chạy cục bộ hoặc triển khai lên App Engine hoặc Cloud Run) sẽ nhận được đối tượng yêu cầu trực tiếp từ Flask.
  2. Đặt lại các biến cơ bản cho biểu mẫu. Việc này chủ yếu dành cho các yêu cầu GET vì các yêu cầu POST sẽ có dữ liệu thay thế các yêu cầu này.
  3. Nếu đó là yêu cầu POST, hãy lấy văn bản cần dịch và tạo một cấu trúc JSON thể hiện yêu cầu về siêu dữ liệu API. Sau đó, hãy gọi API, quay lại phiên bản API trước đó nếu người dùng đang sử dụng một thư viện cũ.
  4. Dù sao đi nữa, hãy định dạng kết quả thực tế (POST) hoặc không có dữ liệu (GET) vào ngữ cảnh mẫu và hiển thị.

Phần hình ảnh của ứng dụng nằm trong tệp index.html của mẫu. Trang này hiển thị mọi kết quả đã dịch trước đó (nếu không thì sẽ để trống), theo sau là biểu mẫu yêu cầu nội dung cần dịch:

<!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. Cài đặt các gói/phần phụ thuộc cục bộ (vào lib)

Như đã đề cập trước đó, ứng dụng mẫu sử dụng khung web vi mô Flask và thư viện ứng dụng API Google Cloud Translation cho Python. Cài đặt và cập nhật pip cùng với cặp gói này bằng lệnh pip (hoặc pip3) sau:

pip install -t lib -r requirements.txt

Sau khi chạy nhận xét ở trên, bạn sẽ thấy kết quả cài đặt có dạng như sau:

$ pip install -t lib -r requirements.txt
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.
Collecting flask>=1.1.2
  Using cached Flask-1.1.4-py2.py3-none-any.whl (94 kB)
Collecting google-cloud-translate>=2.0.1
  Using cached google_cloud_translate-2.0.2-py2.py3-none-any.whl (91 kB)
Collecting click<8.0,>=5.1
  Using cached click-7.1.2-py2.py3-none-any.whl (82 kB)
Collecting Jinja2<3.0,>=2.10.1
  Using cached Jinja2-2.11.3-py2.py3-none-any.whl (125 kB)
Collecting Werkzeug<2.0,>=0.15
  Using cached Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB)
Collecting itsdangerous<2.0,>=0.24
  Using cached itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB)
Collecting google-api-core[grpc]<2.0.0dev,>=1.15.0
  Downloading google_api_core-1.29.0-py2.py3-none-any.whl (93 kB)
     |████████████████████████████████| 93 kB 2.1 MB/s
Collecting google-cloud-core<2.0dev,>=1.1.0
  Using cached google_cloud_core-1.6.0-py2.py3-none-any.whl (28 kB)
Collecting MarkupSafe>=0.23
  Using cached MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl (17 kB)
Collecting protobuf>=3.12.0
  Downloading protobuf-3.17.2-cp27-cp27m-macosx_10_9_x86_64.whl (958 kB)
     |████████████████████████████████| 958 kB 21.6 MB/s
Collecting futures>=3.2.0; python_version < "3.2"
  Using cached futures-3.3.0-py2-none-any.whl (16 kB)
Collecting six>=1.13.0
  Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting packaging>=14.3
  Using cached packaging-20.9-py2.py3-none-any.whl (40 kB)
Collecting googleapis-common-protos<2.0dev,>=1.6.0
  Using cached googleapis_common_protos-1.52.0-py2.py3-none-any.whl (100 kB)
Collecting requests<3.0.0dev,>=2.18.0
  Using cached requests-2.25.1-py2.py3-none-any.whl (61 kB)
Collecting google-auth<2.0dev,>=1.25.0
  Using cached google_auth-1.30.1-py2.py3-none-any.whl (146 kB)
Collecting pytz
  Using cached pytz-2021.1-py2.py3-none-any.whl (510 kB)
Collecting setuptools>=40.3.0
  Using cached setuptools-44.1.1-py2.py3-none-any.whl (583 kB)
Collecting grpcio<2.0dev,>=1.29.0; extra == "grpc"
  Using cached grpcio-1.38.0-cp27-cp27m-macosx_10_10_x86_64.whl (3.8 MB)
Collecting pyparsing>=2.0.2
  Using cached pyparsing-2.4.7-py2.py3-none-any.whl (67 kB)
Collecting chardet<5,>=3.0.2
  Using cached chardet-4.0.0-py2.py3-none-any.whl (178 kB)
Collecting urllib3<1.27,>=1.21.1
  Using cached urllib3-1.26.5-py2.py3-none-any.whl (138 kB)
Collecting idna<3,>=2.5
  Using cached idna-2.10-py2.py3-none-any.whl (58 kB)
Collecting certifi>=2017.4.17
  Downloading certifi-2021.5.30-py2.py3-none-any.whl (145 kB)
     |████████████████████████████████| 145 kB 61.1 MB/s
Collecting pyasn1-modules>=0.2.1
  Using cached pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)
Collecting rsa<4.6; python_version < "3.6"
  Using cached rsa-4.5-py2.py3-none-any.whl (36 kB)
Collecting cachetools<5.0,>=2.0.0
  Using cached cachetools-3.1.1-py2.py3-none-any.whl (11 kB)
Collecting enum34>=1.0.4; python_version < "3.4"
  Using cached enum34-1.1.10-py2-none-any.whl (11 kB)
Collecting pyasn1<0.5.0,>=0.4.6
  Using cached pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)
Installing collected packages: click, MarkupSafe, Jinja2, Werkzeug, itsdangerous, flask, six, protobuf, futures, pyparsing, packaging, googleapis-common-protos, chardet, urllib3, idna, certifi, requests, pyasn1, pyasn1-modules, rsa, cachetools, setuptools, google-auth, pytz, enum34, grpcio, google-api-core, google-cloud-core, google-cloud-translate
ERROR: pip's legacy dependency resolver does not consider dependency conflicts when selecting packages. This behaviour is the source of the following dependency conflicts.
matplotlib 1.3.1 requires nose, which is not installed.
matplotlib 1.3.1 requires tornado, which is not installed.
Successfully installed Jinja2-2.11.3 MarkupSafe-1.1.1 Werkzeug-1.0.1 cachetools-3.1.1 certifi-2021.5.30 chardet-4.0.0 click-7.1.2 enum34-1.1.10 flask-1.1.4 futures-3.3.0 google-api-core-1.29.0 google-auth-1.30.1 google-cloud-core-1.6.0 google-cloud-translate-2.0.2 googleapis-common-protos-1.52.0 grpcio-1.38.0 idna-2.10 itsdangerous-1.1.0 packaging-20.9 protobuf-3.17.2 pyasn1-0.4.8 pyasn1-modules-0.2.8 pyparsing-2.4.7 pytz-2021.1 requests-2.25.1 rsa-4.5 setuptools-44.1.1 six-1.16.0 urllib3-1.26.5

7. Triển khai dịch vụ

Để triển khai dịch vụ dịch sang Python 2 App Engine, hãy chạy lệnh sau:

gcloud app deploy

Kết quả sẽ có dạng như sau và đưa ra một số lời nhắc cho các bước tiếp theo:

$ gcloud app deploy
Services to deploy:

descriptor:      [/private/tmp/nebulous-serverless-python/app.yaml]
source:          [/private/tmp/nebulous-serverless-python]
target project:  [PROJECT_ID]
target service:  [default]
target version:  [20210422t161025]
target url:      [https://PROJECT_ID.appspot.com]


Do you want to continue (Y/n)?

Beginning deployment of service [default]...
╔════════════════════════════════════════════════════════════╗
╠═ Uploading 1290 files to Google Cloud Storage                       ═╣
╚════════════════════════════════════════════════════════════╝
File upload done.
Updating service [default]...done.
Setting traffic split for service [default]...done.
Deployed service [default] to [https://PROJECT_ID.appspot.com]

You can stream logs from the command line by running:
  $ gcloud app logs tail -s default

To view your application in the web browser run:
  $ gcloud app browse

Giờ đây, ứng dụng của bạn đã có trên toàn cầu, bạn có thể truy cập vào ứng dụng đó tại URL (chứa mã dự án) được cung cấp trong kết quả triển khai:

da28f951c33a2c3d.png

Hãy dịch một nội dung để xem tính năng này hoạt động như thế nào!

d911984d15dd5ef9.png

8. Kết luận

Xin chúc mừng! Bạn đã tìm hiểu cách bật API Dịch trên đám mây, lấy thông tin xác thực cần thiết và triển khai một ứng dụng web đơn giản cho App Engine Python 2! Bạn có thể tìm hiểu thêm về quá trình triển khai này trong bảng này trong kho lưu trữ.

Dọn dẹp

Cloud Translation API cho phép bạn thực hiện một số lượng ký tự được dịch cố định mỗi tháng mà không tốn phí. App Engine cũng có hạn mức miễn phí, tương tự như Cloud FunctionsCloud Run. Bạn sẽ phải trả phí nếu vượt quá một trong hai hạn mức này. Nếu dự định tiếp tục lớp học lập trình tiếp theo, bạn không cần phải tắt ứng dụng.

Tuy nhiên, nếu bạn chưa sẵn sàng chuyển sang phần hướng dẫn tiếp theo hoặc lo ngại rằng Internet sẽ phát hiện ứng dụng bạn vừa triển khai, hãy tắt ứng dụng App Engine, xoá Hàm trên đám mây hoặc tắt dịch vụ Cloud Run để tránh bị tính phí. Khi đã sẵn sàng chuyển sang lớp học lập trình tiếp theo, bạn có thể bật lại tính năng này. Mặt khác, nếu không tiếp tục với ứng dụng này hoặc các lớp học lập trình khác và muốn xoá mọi thứ hoàn toàn, bạn có thể tắt dự án.

Ngoài ra, việc triển khai lên nền tảng điện toán không máy chủ của Google Cloud sẽ gây ra một số chi phí nhỏ về việc xây dựng và lưu trữ. Cloud Build có hạn mức miễn phí riêng, cũng như Cloud Storage. Để tăng tính minh bạch, Cloud Build sẽ tạo hình ảnh ứng dụng của bạn, sau đó lưu trữ hình ảnh đó trong Cloud Container Registry (Kho lưu trữ vùng chứa trên đám mây) hoặc Artifact Registry (Kho lưu trữ cấu phần phần mềm), phiên bản kế nhiệm của Cloud Container Registry. Việc lưu trữ hình ảnh đó sẽ sử dụng một phần hạn mức đó cũng như lưu lượng truy cập mạng khi chuyển hình ảnh đó đến dịch vụ. Tuy nhiên, bạn có thể sống ở một khu vực không có cấp miễn phí như vậy. Vì vậy, hãy lưu ý đến mức sử dụng bộ nhớ để giảm thiểu chi phí tiềm ẩn.

9. Tài nguyên khác

Trong các phần sau, bạn có thể tìm thấy tài liệu đọc bổ sung cũng như các bài tập được đề xuất để mở rộng kiến thức đã có được sau khi hoàn thành hướng dẫn này.

Nghiên cứu bổ sung

Giờ đây, khi bạn đã có một số kinh nghiệm với API Dịch, hãy làm một số bài tập bổ sung để phát triển thêm kỹ năng của bạn. Để tiếp tục lộ trình học tập, hãy sửa đổi ứng dụng mẫu của chúng tôi để thực hiện những việc sau:

  1. Hoàn tất tất cả các phiên bản khác của lớp học lập trình này để chạy cục bộ hoặc triển khai trên nền tảng điện toán không máy chủ của Google Cloud (xem README của kho lưu trữ).
  2. Hoàn thành hướng dẫn này bằng một ngôn ngữ lập trình khác.
  3. Thay đổi ứng dụng này để hỗ trợ nhiều ngôn ngữ nguồn hoặc đích.
  4. Nâng cấp ứng dụng này để có thể dịch văn bản sang nhiều ngôn ngữ; thay đổi tệp mẫu để có trình đơn thả xuống gồm các ngôn ngữ đích được hỗ trợ.

Tìm hiểu thêm

Google App Engine

Google Cloud Functions

Google Cloud Run

Google Cloud Buildpacks, Container Registry, Artifact Registry

Google Cloud Translation và Bộ công cụ máy học của Google

Các sản phẩm/trang khác của Google Cloud

Python và Flask

Giấy phép

Hướng dẫn này được cấp phép theo Giấy phép chung Ghi nhận tác giả 2.0 của Creative Commons, còn mã nguồn trong kho lưu trữ được cấp phép theo Apache 2.