1. Giới thiệu
Cloud Run là một nền tảng điện toán được quản lý cho phép bạn chạy các vùng chứa không có trạng thái có thể gọi qua các yêu cầu HTTP. Phiên bản này được xây dựng dựa trên dự án nguồn mở Knative, cho phép di chuyển khối lượng công việc của bạn trên nhiều nền tảng. Cloud Run là giải pháp không máy chủ: loại bỏ mọi hoạt động quản lý cơ sở hạ tầng, vì vậy, bạn có thể tập trung vào công việc quan trọng nhất — xây dựng các ứng dụng tuyệt vời.
Mục tiêu của hướng dẫn này là tạo một ứng dụng web đơn giản và triển khai ứng dụng đó trên Cloud Run.
2. Thiết lập và yêu cầu
Thiết lập môi trường theo tiến độ riêng
- Đăng nhập vào Google Cloud Console rồi tạo dự án mới hoặc sử dụng lại 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.
- 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ự không được API của Google sử dụng. Bạn luôn có thể cập nhật ứng dụng.
- Mã dự án là duy nhất trong tất cả các dự án Google Cloud và không thể thay đổi (không thể thay đổi sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường bạn không quan tâm đến sản phẩm đó là gì. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham khảo Mã dự án (thường được xác định là
PROJECT_ID
). Nếu không thích mã đã tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Ngoài ra, bạn có thể thử cách riêng của mình để xem có thể sử dụng hay không. Bạn không thể thay đổi mã này sau bước này và mã vẫn giữ nguyên trong thời gian của dự án. - Đối với thông tin của bạn, có giá trị thứ ba, Project Number (Số 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 này.
- Tiếp theo, bạn sẽ phải bật tính năng thanh toán trong Cloud Console để sử dụng API/tài nguyên trên đám mây. Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Để tắt các tài nguyên nhằm tránh phát sinh việc thanh toán ngoài hướng dẫn này, bạn có thể xoá các tài nguyên bạ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í 300 USD.
Khởi động Cloud Shell
Mặc dù bạn có thể vận hành Google Cloud từ xa bằng máy tính xách tay, nhưng trong hướng dẫn này, bạn sẽ sử dụng Cloud Shell, một môi trường dòng lệnh chạy trong Đám mây.
Kích hoạt Cloud Shell
- Trong Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell .
Nếu đây là lần đầu tiê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 nhìn thấy màn hình trung gian, hãy nhấp vào Tiếp tục.
Quá trình cấp phép và kết nối với Cloud Shell chỉ mất vài phút.
Máy ảo này được tải tất cả các công cụ phát triển cần thiết. Dịch vụ này cung cấp thư mục gốc có dung lượng ổn định 5 GB và chạy trên Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Nhiều (nếu không nói là) tất cả công việc của bạn trong lớp học lập trình này đều có thể thực hiện bằng trình duyệt.
Sau khi kết nối với Cloud Shell, bạn sẽ thấy mình đã được xác thực và dự án được đặt thành mã dự án.
- Chạy lệnh sau trong Cloud Shell để xác nhận rằng bạn đã được xác thực:
gcloud auth list
Kết quả lệnh
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- 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
Kết quả lệnh
[core] project = <PROJECT_ID>
Nếu chưa, bạn có thể thiết lập chế độ này bằng lệnh sau:
gcloud config set project <PROJECT_ID>
Kết quả lệnh
Updated property [core/project].
3. Bật các API
Trên Cloud Shell, hãy bật các API Artifact Registry, Cloud Build và Cloud Run:
gcloud services enable \ artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ run.googleapis.com
Thao tác này sẽ tạo ra một thông báo thành công tương tự như thông báo sau:
Operation "operations/..." finished successfully.
Bây giờ, bạn đã sẵn sàng bắt đầu làm việc và viết đơn đăng ký...
4. Viết ứng dụng
Trong bước này, bạn sẽ xây dựng một ứng dụng Python đơn giản dựa trên Flask để phản hồi các yêu cầu HTTP.
Thư mục hoạt động
Sử dụng Cloud Shell để tạo một thư mục đang hoạt động có tên là helloworld-python
và chuyển sang thư mục đó:
mkdir ~/helloworld-python cd ~/helloworld-python
main.py
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 Trình chỉnh sửa Cloud Shell:
Để 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
from flask import Flask, request
app = Flask(__name__)
@app.get("/")
def hello():
"""Return a friendly HTTP greeting."""
who = request.args.get("who", default="World")
return f"Hello {who}!\n"
if __name__ == "__main__":
# Development only: run "python main.py" and open http://localhost:8080
# When deploying to Cloud Run, a production-grade WSGI HTTP server,
# such as Gunicorn, will serve the app.
app.run(host="localhost", port=8080, debug=True)
Mã này tạo ra một dịch vụ web cơ bản phản hồi các yêu cầu HTTP GET bằng một thông báo thân thiện.
requirements.txt
Thêm một tệp có tên requirements.txt
để xác định các phần phụ thuộc:
touch requirements.txt
Để chỉnh sửa trực tiếp 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
# https://pypi.org/project/gunicorn
gunicorn==21.2.0
Tệp Procfile
Cuối cùng, hãy thêm tệp có tên Procfile
để chỉ định cách phân phát ứng dụng:
touch Procfile
Để chỉnh sửa trực tiếp tệp bằng Cloud Shell Editor, hãy dùng lệnh sau:
cloudshell edit Procfile
Procfile
web: gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
Đảm bảo tất cả các tệp đều có trong thư mục đang hoạt động:
ls
Thao tác này sẽ liệt kê các tệp sau:
main.py Procfile requirements.txt
Ứng dụng của bạn đã sẵn sàng để được triển khai, nhưng trước tiên hãy kiểm thử ứng dụng đó...
5. Kiểm thử ứng dụng
Để kiểm thử ứng dụng, hãy tạo một môi trường ảo:
virtualenv venv
Kích hoạt môi trường ảo:
source venv/bin/activate
Cài đặt phần phụ thuộc:
pip install -r requirements.txt
Bạn sẽ nhận được thông báo xác nhận như sau:
... Successfully installed Flask ... gunicorn ...
Khởi động ứng dụng:
python main.py
Nhật ký cho thấy bạn đang ở chế độ phát triển:
* Serving Flask app 'main' * Debug mode: on WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://localhost:8080 Press CTRL+C to quit ...
Trong cửa sổ Cloud Shell, hãy nhấp vào biểu tượng Web Preview
rồi chọn Preview on port 8080
:
Thao tác này sẽ mở ra một cửa sổ trình duyệt hiển thị thông báo Hello World!
.
Bạn cũng có thể mở một phiên Cloud Shell khác (một thẻ dòng lệnh mới) bằng cách nhấp vào biểu tượng +
rồi gửi yêu cầu web tới ứng dụng chạy trên máy:
curl localhost:8080
Bạn sẽ nhận được câu trả lời sau:
Hello World!
Khi bạn hoàn tất, hãy quay lại phiên chính trên Cloud Shell và dừng lệnh python main.py
bằng CTRL+C
.
Thoát khỏi môi trường ảo:
deactivate
Cuối cùng, hãy xoá thư mục môi trường ảo:
rm -r venv/
Ứng dụng của bạn hoạt động như mong đợi: hãy triển khai ứng dụng...
6. Triển khai lên Cloud Run
Cloud Run mang tính khu vực, nghĩa là cơ sở hạ tầng chạy các dịch vụ Cloud Run được đặt ở một khu vực cụ thể và được Google quản lý để có thể sử dụng dự phòng trên tất cả các vùng trong khu vực đó. Xác định khu vực bạn sẽ dùng để triển khai, ví dụ:
REGION="europe-west9"
Đảm bảo bạn vẫn đang ở trong thư mục đang hoạt động:
ls
Thao tác này sẽ liệt kê các tệp sau:
main.py Procfile requirements.txt
Triển khai ứng dụng cho Cloud Run:
gcloud run deploy helloworld-python \ --source . \ --platform managed \ --region $REGION \ --allow-unauthenticated
- Bạn có thể xác định một khu vực mặc định bằng lệnh sau:
gcloud config set run/region $REGION
- Bạn cũng có thể dùng lệnh sau để quản lý Cloud Run theo mặc định:
gcloud config set run/platform managed
- Tuỳ chọn
--allow-unauthenticated
sẽ cung cấp dịch vụ công khai. Để tránh các yêu cầu chưa được xác thực, hãy sử dụng--no-allow-unauthenticated
.
Lần đầu tiên, bạn sẽ nhận được lời nhắc tạo một kho lưu trữ Artifact Registry. Nhấn Enter để xác thực:
Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [REGION] will be created. Do you want to continue (Y/n)?
Thao tác này sẽ khởi chạy quá trình tải mã nguồn của bạn lên kho lưu trữ Artifact Registry và bản dựng của hình ảnh vùng chứa:
Building using Buildpacks and deploying container ... * Building and deploying new service... Building Container. OK Creating Container Repository... OK Uploading sources... * Building Container... Logs are available at ...
Sau đó, hãy đợi trong giây lát cho đến khi quá trình triển khai hoàn tất. Khi thành công, dòng lệnh sẽ hiển thị URL dịch vụ:
... OK Building and deploying new service... Done. OK Creating Container Repository... OK Uploading sources... OK Building Container... Logs are available at ... OK Creating Revision... Creating Service. OK Routing traffic... OK Setting IAM Policy... Done. Service [SERVICE]... has been deployed and is serving 100 percent of traffic. Service URL: https://SERVICE-PROJECTHASH-REGIONID.a.run.app
Bạn có thể lấy URL dịch vụ bằng lệnh sau:
SERVICE_URL=$( \ gcloud run services describe helloworld-python \ --platform managed \ --region $REGION \ --format "value(status.url)" \ ) echo $SERVICE_URL
Thao tác này sẽ hiển thị nội dung như sau:
https://helloworld-python-PROJECTHASH-REGIONID.a.run.app
Giờ đây, bạn có thể sử dụng ứng dụng của mình bằng cách mở URL dịch vụ trong trình duyệt web:
Bạn cũng có thể gọi ứng dụng từ Cloud Shell:
curl $SERVICE_URL?who=me
Thao tác này sẽ cung cấp cho bạn lời chào dự kiến:
Hello me!
Xin chúc mừng! Bạn vừa triển khai một ứng dụng lên Cloud Run. Cloud Run tự động mở rộng và điều chỉnh tỷ lệ hình ảnh vùng chứa theo chiều ngang để xử lý các yêu cầu đã nhận được, sau đó thu nhỏ lại khi nhu cầu giảm. Bạn chỉ phải thanh toán cho CPU, bộ nhớ và kết nối mạng được tiêu thụ trong quá trình xử lý yêu cầu.
7. Dọn dẹp
Mặc dù Cloud Run không tính phí khi không sử dụng dịch vụ này, nhưng bạn vẫn có thể bị tính phí do lưu trữ hình ảnh vùng chứa trong Artifact Registry. Bạn có thể xoá kho lưu trữ hoặc xoá dự án trên Cloud để tránh phát sinh phí. Khi bạn xoá dự án Cloud của mình, hệ thống sẽ ngừng tính phí cho tất cả tài nguyên dùng trong dự án đó.
Cách xoá kho lưu trữ hình ảnh vùng chứa:
gcloud artifacts repositories delete cloud-run-source-deploy \ --location $REGION
Cách xoá dịch vụ Cloud Run:
gcloud run services delete helloworld-python \ --platform managed \ --region $REGION
Cách xoá dự án của bạn trên Google Cloud:
- Truy xuất mã dự án hiện tại của bạn:
PROJECT_ID=$(gcloud config get-value core/project)
- Hãy đảm bảo dự án mà bạn muốn xoá:
echo $PROJECT_ID
- Xoá dự án:
gcloud projects delete $PROJECT_ID
8. Xin chúc mừng!
Bạn đã tạo một ứng dụng web đơn giản và triển khai ứng dụng đó trên Cloud Run!
Tìm hiểu thêm
- Xem tài liệu về Cloud Run
- Hoàn thành bước phát triển cho nhà phát triển trong 3 bước đơn giản với Cloud Run để khám phá thêm nhiều lựa chọn
- Hoàn tất quy trình Django trên Cloud Run để tạo DB Cloud SQL, quản lý thông tin xác thực bằng Secret Manager và triển khai Django
- Xem thêm các lớp học lập trình Cloud Run...
Giấy phép
Tác phẩm này được cấp phép theo Giấy phép chung Ghi nhận tác giả Creative Commons 2.0.