Bắt đầu với App Engine (Python 3)

1. Tổng quan

befa7a877ccdd35d.png

Các ứng dụng Google App Engine rất dễ tạo, dễ duy trì và dễ mở rộng khi nhu cầu về lưu lượng truy cập và bộ nhớ lưu trữ dữ liệu của bạn thay đổi. Với App Engine, bạn không cần duy trì máy chủ. Bạn chỉ cần tải ứng dụng lên là có thể sử dụng ngay.

Trong lớp học lập trình này, bạn sẽ tìm hiểu cách triển khai một ứng dụng web Python đơn giản được viết bằng khung web Flask. Mặc dù mẫu này sử dụng Flask, nhưng bạn có thể dùng các khung web khác, bao gồm cả Django, Pyramid, Bottleweb.py.

Hướng dẫn này được điều chỉnh từ https://cloud.google.com/appengine/docs/standard/python3/quickstart

Kiến thức bạn sẽ học được

  • Cách tạo một máy chủ Python đơn giản trên Google App Engine.
  • Cách cập nhật mã mà không làm gián đoạn máy chủ.

Bạn cần có

  • Làm quen với cách sử dụng Python
  • Làm quen với các trình chỉnh sửa văn bản tiêu chuẩn của Linux, chẳng hạn như vim, emacs hoặc nano

Khảo sát

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

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

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

Người mới bắt đầu Trung cấp Thành thạo

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

Người mới bắt đầu Trung cấp Thành thạo

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Tên dự án là tên hiển thị của những người tham gia dự án này. Đây là một chuỗi ký tự mà các API của Google không sử dụng. Bạn luôn có thể cập nhật thông tin này.
  • Mã dự án là mã duy nhất trên tất cả các dự án trên Google Cloud và không thể thay đổi (bạn không thể thay đổi mã này 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 (thường được xác định là PROJECT_ID). Nếu không thích mã nhận dạng được tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Hoặc bạn có thể thử tên người dùng của riêng mình để xem tên đó có được chấp nhận hay không. Bạn không thể thay đổi tên này sau bước này và tên này sẽ tồn tại trong suốt thời gian của dự án.
  • Để bạn nắm được thông tin, có một giá trị thứ ba là Số dự án mà một số API sử dụng. Tìm hiểu thêm về cả 3 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 đám mây. Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Để tắt các tài nguyên nhằm tránh bị tính phí ngoài phạm vi hướng dẫn này, bạn có thể xoá các tài nguyên đã tạo hoặc xoá dự án. 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í trị giá 300 USD.

Khởi động Cloud Shell

Mặc dù có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Cloud Shell, một môi trường dòng lệnh chạy trên đám mây.

Kích hoạt Cloud Shell

  1. Trong Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell 853e55310c205094.png.

3c1dabeca90e44e5.png

Nếu đây là lần đầu tiên bạn khởi động Cloud Shell, bạn sẽ thấy một màn hình trung gian mô tả về Cloud Shell. Nếu bạn thấy màn hình trung gian, hãy nhấp vào Tiếp tục.

9c92662c6a846a5c.png

Quá trình cung cấp và kết nối với Cloud Shell chỉ mất vài giây.

9f0e51b578fecce5.png

Máy ảo này được trang bị tất cả các công cụ phát triển cần thiết. Nền tảng này cung cấp một thư mục chính có dung lượng 5 GB và chạy trong Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn có thể thực hiện hầu hết, nếu không muốn nói là tất cả, công việc của mình trong lớp học lập trình này bằng trình duyệt.

Sau khi kết nối với Cloud Shell, bạn sẽ thấy rằng mình đã được xác thực và dự án được đặt thành mã dự án của bạn.

  1. Chạy lệnh sau trong Cloud Shell để xác nhận rằng bạn đã được xác thực:
gcloud auth list

Đầu ra của lệnh

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Chạy lệnh sau trong Cloud Shell để xác nhận rằng lệnh gcloud biết về dự án của bạn:
gcloud config list project

Đầu ra của lệnh

[core]
project = <PROJECT_ID>

Nếu không, bạn có thể đặt nó bằng lệnh sau:

gcloud config set project <PROJECT_ID>

Đầu ra của lệnh

Updated property [core/project].

3. Viết ứng dụng web

Sau khi Cloud Shell khởi chạy, bạn có thể dùng dòng lệnh để gọi lệnh Cloud SDK gcloud hoặc các công cụ khác có trên phiên bản máy ảo. Bạn có thể sử dụng thư mục $HOME trong ổ đĩa lưu trữ dài lâu để lưu trữ tệp trên các dự án và giữa các phiên Cloud Shell. Thư mục $HOME chỉ dành riêng cho bạn và người dùng khác không thể truy cập vào thư mục này.

Hãy bắt đầu bằng cách tạo một thư mục mới trong thư mục $HOME cho ứng dụng:

mkdir ~/helloworld
cd ~/helloworld

Tạo một tệp có tên main.py:

touch main.py

Chỉnh sửa tệp bằng trình chỉnh sửa dòng lệnh mà bạn muốn (nano, vim hoặc emacs) hoặc bằng cách nhấp vào nút Cloud Shell Editor:

10af7b1a6240e9f4.gif

Để chỉnh sửa trực tiếp tệp bằng Cloud Shell Editor, hãy dùng lệnh sau:

cloudshell edit main.py

main.py

import flask

# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)


@app.get("/")
def hello():
    """Return a friendly HTTP greeting."""
    return "Hello World!\n"


if __name__ == "__main__":
    # Used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host="localhost", port=8080, debug=True)

4. Xác định các phần phụ thuộc

Để chỉ định các phần phụ thuộc của ứng dụng web, hãy quay lại thiết bị đầu cuối và tạo một tệp requirements.txt trong thư mục gốc của dự án, với phiên bản chính xác của Flask cần sử dụng:

touch requirements.txt

Để chỉnh sửa tệp bằng Cloud Shell Editor, hãy dùng lệnh sau:

cloudshell edit requirements.txt

requirements.txt

# https://pypi.org/project/Flask
Flask==3.0.2

5. Định cấu hình quy trình triển khai

Để triển khai ứng dụng web của bạn vào App Engine, bạn cần có tệp app.yaml. Tệp cấu hình này xác định chế độ cài đặt của ứng dụng web cho App Engine.

Trên thiết bị đầu cuối, hãy tạo và chỉnh sửa tệp app.yaml trong thư mục gốc của dự án:

touch app.yaml

Để chỉnh sửa tệp bằng Cloud Shell Editor, hãy dùng lệnh sau:

cloudshell edit app.yaml

app.yaml

runtime: python312

6. Triển khai ứng dụng web

Trong cửa sổ dòng lệnh, hãy kiểm tra nội dung của thư mục:

ls

Bạn sẽ có 3 tệp sau:

app.yaml  main.py  requirements.txt

Triển khai ứng dụng web bằng lệnh sau:

gcloud app deploy

Lần đầu tiên, bạn cần chọn một khu vực triển khai:

Please choose the region where you want your App Engine application
located:

 [1] asia-east2
...
 [7] australia-southeast1
 [8] europe-west
 [9] europe-west2
...
 [12] northamerica-northeast1
 [13] southamerica-east1
...
 [19] us-west4
...
Please enter your numeric choice:

Xác nhận để triển khai:

Creating App Engine application in project [PROJECT_ID] and region [REGION]....done.
Services to deploy:

descriptor:      [~/helloworld/app.yaml]
source:          [~/helloworld]
target project:  [PROJECT_ID]
target service:  [default]
target version:  [YYYYMMDDtHHMMSS]
target url:      [https://PROJECT_ID.REGION_ID.r.appspot.com]

Do you want to continue (Y/n)?

Ứng dụng của bạn được triển khai:

Beginning deployment of service [default]...
Created .gcloudignore file. See `gcloud topic gcloudignore` for details.
Uploading 3 files to Google Cloud Storage
100%
File upload done.
Updating service [default]...done.     
Setting traffic split for service [default]...done.
Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]

Giờ đây, ứng dụng web của bạn đã sẵn sàng phản hồi các yêu cầu HTTP trên https://PROJECT_ID.REGION_ID.r.appspot.com.

7. Kiểm thử ứng dụng web

Ứng dụng web của bạn đã sẵn sàng phản hồi các yêu cầu HTTP trên https://PROJECT_ID.REGION_ID.r.appspot.com.

Trước tiên, hãy truy xuất tên máy chủ của ứng dụng web bằng lệnh gcloud app describe:

APPENGINE_HOSTNAME=$(gcloud app describe --format "value(defaultHostname)")

Kiểm thử ứng dụng web của bạn bằng yêu cầu GET HTTP đơn giản này:

curl https://$APPENGINE_HOSTNAME

Bạn sẽ nhận được câu trả lời sau:

Hello World!

Tóm tắt

Trong các bước trước, bạn đã thiết lập một ứng dụng web Python đơn giản, chạy và triển khai ứng dụng trên App Engine.

8. Cập nhật ứng dụng web

Sửa đổi ứng dụng web bằng cách thay đổi nội dung hàm hello() trong tệp main.py.

Để chỉnh sửa tệp bằng Cloud Shell Editor, hãy dùng lệnh sau:

cloudshell edit main.py

main.py

import flask

# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)


@app.get("/")
def hello():
    """Return a friendly HTTP greeting."""
    # return "Hello World!\n"  # ← Replace this line
    who = flask.request.args.get("who", "World")
    return f"Hello {who}!\n"


if __name__ == "__main__":
    # Used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host="localhost", port=8080, debug=True)

Từ thiết bị đầu cuối, hãy triển khai lại để cập nhật ứng dụng web của bạn:

gcloud app deploy --quiet

Phiên bản mới của ứng dụng sẽ được triển khai:

Beginning deployment of service [default]...
Uploading 1 file to Google Cloud Storage 
...
Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]

Kiểm thử phiên bản mới của ứng dụng web, giống hệt như cách bạn đã làm trước đây:

curl https://$APPENGINE_HOSTNAME

Bạn sẽ nhận được câu trả lời tương tự:

Hello World!

Kiểm thử bằng tham số không bắt buộc:

curl https://$APPENGINE_HOSTNAME?who=Universe

Bạn sẽ nhận được câu trả lời sau:

Hello Universe!

Tóm tắt

Trong bước này, bạn đã cập nhật và triển khai lại ứng dụng web mà không bị gián đoạn dịch vụ.

9. Xin chúc mừng!

Bạn đã học được cách viết ứng dụng web App Engine đầu tiên bằng Python!

Tìm hiểu thêm

Giấy phép

Tác phẩm này được cấp phép theo giấy phép Ghi công theo Creative Commons 2.0 Chung.