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 trạng thái có thể gọi được bằng cách sử dụng các yêu cầu HTTP. Nền tảng này được xây dựng dựa trên dự án nguồn mở Knative, cho phép di chuyển các tải công việc của bạn trên nhiều nền tảng. Cloud Run là dịch vụ không máy chủ: dịch vụ này loại bỏ mọi hoạt động quản lý cơ sở hạ tầng, nhờ đó bạn có thể tập trung vào nhữ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 "Hello World" Streamlit và triển khai ứng dụng đó vào Cloud Run.
Kiến thức bạn sẽ học được
- Cách tạo ứng dụng "Hello World" bằng Streamlit.
- Kiểm thử ứng dụng bằng cách chạy ứng dụng Streamlit trước khi triển khai.
- Cloud Buildpacks và cách sự hiện diện của
streamlittrongrequirements.txtgiúp bạn không cần Dockerfile. - Cách triển khai ứng dụng Streamlit lên Cloud Run.
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
- Đă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.



- Tên dự án là tên hiển thị cho 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à giá trị 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.
- 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 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í 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 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 trên Cloud.
Kích hoạt Cloud Shell
- Trên Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell

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.

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

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 trên 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.
- 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`
- 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. Bật các API
Trong Cloud Shell, hãy bật 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ẽ xuất ra một thông báo thành công tương tự như thông báo sau:
Operation "operations/..." finished successfully.
Giờ đây, bạn đã sẵn sàng bắt đầu làm việc và viết ứng dụng của mình...
4. Viết ứng dụng
Trong bước này, bạn sẽ tạo một ứng dụng Python "Hello World" Streamlit phản hồi các yêu cầu HTTP.
Thư mục đang hoạt động
Sử dụng Cloud Shell để tạo một thư mục làm việc có tên là helloworld-streamlit và chuyển sang thư mục đó:
mkdir ~/helloworld-streamlit && cd ~/helloworld-streamlit
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 Cloud Shell Editor:

Để 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 streamlit as st
st.title("Hello World! 👋🌎")
st.markdown(
"""
This is a demo Streamlit app.
Enter your name in the text box below and press a button to see some fun features in Streamlit.
"""
)
name = st.text_input("Enter your name:")
# Use columns to create buttons side by side
col1, col2 = st.columns(2)
with col1:
if st.button("Send balloons! 🎈"):
st.balloons()
st.write(f"Time to celebrate {name}! 🥳")
st.write("You deployed a Streamlit app! 👏")
with col2:
if st.button("Send snow! ❄️"):
st.snow()
st.write(f"Let it snow {name}! 🌨️")
st.write("You deployed a Streamlit app! 👏")
Đoạn mã này tạo 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
Mở lại cửa sổ dòng lệnh rồi thêm một tệp có tên là 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/streamlit
streamlit==1.47.0
Ứng dụng Streamlit đã sẵn sàng để triển khai, nhưng trước tiên, hãy kiểm thử ứng dụng này...
5. Kiểm thử ứng dụng
Để kiểm thử ứng dụng, hãy dùng uv (trình quản lý dự án và gói cực nhanh của Python) được cài đặt sẵn trong Cloud Shell.
Để kiểm thử ứng dụng, hãy tạo một môi trường ảo:
uv venv
Cài đặt các phần phụ thuộc:
uv pip install -r requirements.txt
Khởi động ứng dụng bằng cách sử dụng streamlit run (tắt --server.enableCORS để kiểm thử vì nó gây trở ngại cho Cloud Shell):
uv run streamlit run main.py --server.port=8080 --server.enableCORS=false
Nhật ký sẽ cho thấy ứng dụng Streamlit đang chạy:
You can now view your Streamlit app in your browser. Local URL: http://localhost:8080 Network URL: http://10.1.0.1:8080 External URL: http://34.37.7.94:8080
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ở một cửa sổ trình duyệt hiển thị tiêu đề Hello World! 👋🌎.

Hãy thử điền tên của bạn và kiểm tra 2 nút trên màn hình!
Khi bạn hoàn tất, hãy quay lại phiên Cloud Shell chính và dừng ứng dụng Streamlit bằng CTRL+C.
Ứng dụng hoạt động như mong đợi: đã đến lúc triển khai ứng dụng này...
6. Triển khai lên Cloud Run
Cloud Run là dịch vụ theo khu vực, tức là cơ sở hạ tầng chạy các dịch vụ Cloud Run của bạn nằm ở một khu vực cụ thể và do Google quản lý để có thể hoạt động dư thừa trên tất cả các vùng trong khu vực đó. Xác định khu vực bạn sẽ sử dụng cho quá trình triển khai, ví dụ:
REGION=europe-west1
Đảm bảo rằng bạn vẫn đang ở trong thư mục làm việc:
ls
Thư mục này phải liệt kê các tệp sau:
main.py requirements.txt
Trước khi triển khai, hãy tạo một tệp .gcloudignore có .venv/ trong đó. Thao tác này sẽ ngăn việc triển khai Cloud Run bao gồm môi trường ảo được tạo từ uv trong quá trình kiểm thử cục bộ.
Tạo .gcloudignore bằng lệnh sau:
echo ".venv/" > .gcloudignore
Triển khai ứng dụng lên Cloud Run:
gcloud run deploy helloworld-streamlit \
--source . \
--region $REGION \
--allow-unauthenticated
- Lựa chọn
--allow-unauthenticatedgiúp 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 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 vào 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ẽ bắt đầu tải mã nguồn của bạn lên kho lưu trữ Artifact Registry và tạo 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 một 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 của 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 của dịch vụ bằng lệnh sau:
SERVICE_URL=$( \
gcloud run services describe helloworld-streamlit \
--region $REGION \
--format "value(status.address.url)" \
)
echo $SERVICE_URL
Thao tác này sẽ hiển thị nội dung tương tự như sau:
https://helloworld-streamlit-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 một trình duyệt web:

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 quy mô theo chiều ngang cho hình ảnh vùng chứa của bạn để xử lý các yêu cầu nhận được, sau đó giảm quy mô khi nhu cầu giảm. Bạn chỉ phải trả tiền cho CPU, bộ nhớ và mạng được sử dụng trong quá trình xử lý yêu cầu cho dịch vụ chạy trên đám mây này.
7. Dọn dẹp
Mặc dù Cloud Run không tính phí khi dịch vụ không được sử dụng, nhưng bạn vẫn có thể bị tính phí khi 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 trên Cloud, hệ thống sẽ ngừng tính phí cho tất cả tài nguyên được 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-streamlit \
--region $REGION
Để xoá dự án của bạn trên Google Cloud,
- Lấy mã dự án hiện tại:
PROJECT_ID=$(gcloud config get-value core/project)
- Hãy đảm bảo rằng đây là dự án 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 "Hello World" bằng Streamlit và triển khai ứng dụng đó lên Cloud Run!
Nội dung đã đề cập
- Cách tạo ứng dụng "Hello World" bằng Streamlit.
- Kiểm thử ứng dụng bằng cách chạy ứng dụng Streamlit trước khi triển khai.
- Cloud Buildpacks và cách sự hiện diện của
streamlittrongrequirements.txtgiúp bạn không cần Dockerfile. - Triển khai ứng dụng Streamlit lên Cloud Run.
Tìm hiểu thêm
- Hãy xem tài liệu về Cloud Run
- Hoàn thành khoá học Phát triển đến sản xuất trong 3 bước đơn giản với Cloud Run để khám phá thêm các lựa chọn
- Hoàn thành Django trên Cloud Run để tạo một cơ sở dữ liệu Cloud SQL, quản lý thông tin đăng nhập bằng Secret Manager và triển khai Django
- Hãy xem thêm các lớp học lập trình về Cloud Run...