1. Tổng quan
Việc triển khai một ứng dụng web lần đầu có thể khiến bạn lo lắng. Ngay cả sau lần triển khai đầu tiên, nếu quy trình này quá phức tạp, bạn có thể tránh triển khai các phiên bản mới của ứng dụng. Với tính năng triển khai liên tục, bạn có thể dễ dàng tự động triển khai các thay đổi của ứng dụng.
Trong phòng thí nghiệm này, bạn sẽ viết một ứng dụng web và định cấu hình Cloud Run để tự động triển khai ứng dụng khi có thay đổi đối với mã nguồn của ứng dụng. Sau đó, bạn sửa đổi ứng dụng rồi triển khai lại.
Kiến thức bạn sẽ học được
- Viết một ứng dụng web bằng Cloud Shell Editor
- Lưu trữ mã ứng dụng của bạn trong GitHub
- Tự động triển khai ứng dụng của bạn lên Cloud Run
- Thêm AI tạo sinh vào ứng dụng bằng Vertex AI
2. Điều kiện tiên quyết
- Nếu chưa có Tài khoản Google, bạn phải tạo một Tài khoản Google.
- Sử dụng tài khoản cá nhân thay vì tài khoản do nơi làm việc hoặc trường học cấp. Tài khoản do nơi làm việc và trường học cấp có thể có những hạn chế khiến bạn không thể bật các API cần thiết cho lớp học này.
- Nếu chưa có tài khoản GitHub, bạn phải tạo một tài khoản GitHub
- Sử dụng tài khoản GitHub hiện có (nếu có). GitHub có nhiều khả năng chặn một tài khoản mới vì cho rằng đó là tài khoản rác.
- Định cấu hình xác thực hai yếu tố trên tài khoản GitHub để giảm khả năng tài khoản của bạn bị đánh dấu là nội dung rác.
3. Thiết lập dự án
- Đăng nhập vào Google Cloud Console.
- Bật tính năng thanh toán trong Cloud Console.
- Việc hoàn thành bài thực hành này sẽ tốn ít hơn 1 USD cho các tài nguyên trên đám mây.
- Bạn có thể làm theo các bước ở cuối bài thực hành này để xoá tài nguyên nhằm tránh bị tính thêm phí.
- Người dùng mới sẽ đủ điều kiện dùng thử miễn phí 300 USD.
- Bạn sẽ tham dự một sự kiện về AI tạo sinh cho nhà phát triển chứ? Bạn có thể nhận được khoản tín dụng trị giá 1 USD.
- Tạo một dự án mới hoặc chọn sử dụng lại một dự án hiện có.
- Xác nhận rằng bạn đã bật tính năng thanh toán trong phần Dự án của tôi trong mục Thanh toán trên Cloud
- Nếu dự án mới của bạn có trạng thái
Billing is disabledtrong cộtBilling account:- Nhấp vào biểu tượng ba dấu chấm trong cột
Actions - Nhấp vào Thay đổi thông tin thanh toán
- Chọn tài khoản thanh toán mà bạn muốn sử dụng
- Nhấp vào biểu tượng ba dấu chấm trong cột
- Nếu bạn tham dự một sự kiện về AI tạo sinh cho nhà phát triển, thì tài khoản đó có thể có tên là Tài khoản thanh toán dùng thử của Google Cloud Platform
- Nếu dự án mới của bạn có trạng thái
4. Mở Trình chỉnh sửa Cloud Shell
- Chuyển đến Trình chỉnh sửa Cloud Shell
- Nếu thiết bị đầu cuối không xuất hiện ở cuối màn hình, hãy mở thiết bị đầu cuối:
- Nhấp vào trình đơn có biểu tượng ba dấu gạch ngang

- Nhấp vào Terminal (Thiết bị đầu cuối)
- Nhấp vào New Terminal (Thiết bị đầu cuối mới)

- Nhấp vào trình đơn có biểu tượng ba dấu gạch ngang
- Trong thiết bị đầu cuối, hãy thiết lập dự án bằng lệnh sau:
- Định dạng:
gcloud config set project [PROJECT_ID] - Ví dụ:
gcloud config set project lab-project-id-example - Nếu bạn không nhớ mã dự án của mình, hãy làm như sau:
- Bạn có thể liệt kê tất cả mã dự án bằng cách dùng:
gcloud projects list | awk '/PROJECT_ID/{print $2}'

- Bạn có thể liệt kê tất cả mã dự án bằng cách dùng:
- Định dạng:
- Nếu được nhắc uỷ quyền, hãy nhấp vào Uỷ quyền để tiếp tục.

- Bạn sẽ thấy thông báo sau:
Nếu thấy biểu tượngUpdated property [core/project].
WARNINGvà được yêu cầuDo you want to continue (Y/N)?, thì có thể bạn đã nhập sai mã dự án. NhấnN, nhấnEnterrồi thử chạy lại lệnhgcloud config set project.
5. Bật API
Trong dòng lệnh, hãy bật các API:
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
aiplatform.googleapis.com
Lệnh này có thể mất vài phút để hoàn tất, nhưng cuối cùng sẽ tạo ra một thông báo thành công tương tự như thông báo này:
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
6. Định cấu hình Git
- Đặt email người dùng git toàn cầu:
git config --global user.email "you@example.com" - Đặt tên người dùng git chung:
git config --global user.name "Your Name" - Đặt nhánh mặc định git chung thành
main:git config --global init.defaultBranch main
7. Viết mã
Cách viết một ứng dụng bằng Go:
- Chuyển đến thư mục chính:
cd ~ - Tạo thư mục
codelab-genai:mkdir codelab-genai - Chuyển đến thư mục
codelab-genai:cd codelab-genai - Khởi chạy tệp go.mod để khai báo mô-đun của chúng ta:
go mod init codelab-genai - Tạo tệp
main.go:touch main.go - Mở tệp
main.gotrong Cloud Shell Editor: Giờ đây, một tệp trống sẽ xuất hiện ở phần trên cùng của màn hình. Đây là nơi bạn có thể chỉnh sửa tệpcloudshell edit main.gomain.gonày.
- Chỉnh sửa
main.govà dán mã sau vào đó: Sau vài giây, Cloud Shell Editor sẽ tự động lưu mã của bạn. Đoạn mã này phản hồi các yêu cầu http bằng lời chào "Hello world!" của chúng ta.package main import ( "fmt" "log" "net/http" "os" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, world!") }) port := os.Getenv("PORT") if port == "" { port = "8080" } if err := http.ListenAndServe(":"+port, nil); err != nil { log.Fatal(err) } }
Mã ban đầu cho ứng dụng của bạn đã hoàn tất và sẵn sàng được lưu trữ trong hệ thống kiểm soát phiên bản.
8. Tạo kho lưu trữ
- Quay lại thiết bị đầu cuối Cloud Shell ở cuối màn hình.
- Đảm bảo rằng bạn vẫn đang ở đúng thư mục:
cd ~/codelab-genai - Khởi tạo kho lưu trữ git
git init -b main - Đăng nhập vào GitHub CLI
Nhấngh auth loginEnterđể chấp nhận các lựa chọn mặc định và làm theo hướng dẫn trong công cụ GitHub CLI, bao gồm:- Bạn muốn đăng nhập vào tài khoản nào?
GitHub.com - Bạn muốn dùng giao thức nào cho các thao tác Git trên máy chủ này?
HTTPS - Xác thực Git bằng thông tin đăng nhập GitHub của bạn?
Y(Bỏ qua nếu không thấy lựa chọn này.) - Bạn muốn xác thực GitHub CLI bằng cách nào?
Login with a web browser - Sao chép mã một lần
- Truy cập vào https://github.com/login/device
- Dán mã một lần
- Nhấp vào Uỷ quyền cho github
- Hoàn tất quá trình đăng nhập
- Bạn muốn đăng nhập vào tài khoản nào?
- Xác nhận rằng bạn đã đăng nhập:
Nếu bạn đã đăng nhập thành công, lệnh này sẽ xuất tên người dùng GitHub của bạn.gh api user -q ".login" - Tạo biến
GITHUB_USERNAMEGITHUB_USERNAME=$(gh api user -q ".login") - Xác nhận rằng bạn đã tạo biến môi trường:
Nếu bạn đã tạo thành công biến này, thì biến này sẽ xuất tên người dùng GitHub của bạn.echo ${GITHUB_USERNAME} - Tạo một kho lưu trữ trống trên GitHub có tên là
codelab-genai: Nếu bạn gặp lỗi:gh repo create codelab-genai --private Sau đó, bạn đã có một kho lưu trữ có tên làGraphQL: Name already exists on this account (createRepository)
codelab-genai. Bạn có 2 lựa chọn để tiếp tục theo dõi hướng dẫn này:- Xoá kho lưu trữ GitHub hiện có
- Tạo một kho lưu trữ có tên khác và nhớ thay đổi tên đó trong các lệnh sau.
- Thêm kho lưu trữ
codelab-genailàmorigintừ xa:git remote add origin https://github.com/${GITHUB_USERNAME}/codelab-genai
9. Chia sẻ mã của bạn
- Xác nhận rằng bạn đang ở đúng thư mục:
cd ~/codelab-genai - Thêm tất cả các tệp trong thư mục hiện tại vào cam kết này:
git add . - Tạo cam kết đầu tiên:
git commit -m "add http server" - Đẩy cam kết của bạn vào nhánh
maincủa kho lưu trữorigin:git push -u origin main
Bạn có thể chạy lệnh này và truy cập vào URL kết quả để xem mã ứng dụng của mình trên GitHub:
echo -e "\n\nTo see your code, visit this URL:\n \
https://github.com/${GITHUB_USERNAME}/codelab-genai/blob/main/main.go \n\n"
10. Thiết lập quy trình triển khai tự động
- Để thẻ Cloud Shell Editor mở. Chúng ta sẽ quay lại thẻ này sau.
- Trong một thẻ mới, hãy truy cập vào trang Cloud Run
- Chọn đúng Dự án Google Cloud trong bảng điều khiển

- Nhấp vào CONNECT REPO (KẾT NỐI KHO LƯU TRỮ)
- Nhấp vào THIẾT LẬP BẰNG CLOUD BUILD
- Chọn GitHub làm Nhà cung cấp kho lưu trữ
- Nếu bạn chưa đăng nhập vào tài khoản GitHub trong trình duyệt, hãy đăng nhập bằng thông tin đăng nhập của bạn.
- Nhấp vào Xác thực rồi nhấp vào Tiếp tục.
- Sau khi đăng nhập, bạn sẽ thấy một thông báo trên trang Cloud Run cho biết Ứng dụng GitHub chưa được cài đặt trên bất kỳ kho lưu trữ nào của bạn.
- Nhấp vào nút CÀI ĐẶT GOOGLE CLOUD BUILD.
- Trên trang Thiết lập cài đặt, hãy chọn Chỉ chọn kho lưu trữ và chọn kho lưu trữ codelab-genai mà bạn đã tạo thông qua CLI.
- Nhấp vào Cài đặt
- Lưu ý: Nếu bạn có nhiều kho lưu trữ trên GitHub, thì quá trình này có thể mất vài phút để tải.
- Chọn
your-user-name/codelab-genailàm Kho lưu trữ- Nếu không có kho lưu trữ, hãy nhấp vào đường liên kết Quản lý kho lưu trữ được kết nối.
- Rời khỏi Nhánh dưới dạng
^main$ - Nhấp vào Go, Node.js, Python, Java, .NET Core, Ruby hoặc PHP thông qua buildpack của Google Cloud
- Giữ nguyên các trường khác (
Build context directory,EntrypointvàFunction target).
- Giữ nguyên các trường khác (
- Nhấp vào Lưu
- Chọn GitHub làm Nhà cung cấp kho lưu trữ
- Di chuyển xuống phần Xác thực
- Nhấp vào Cho phép lệnh gọi chưa được xác thực
- Nhấp vào TẠO
Sau khi quá trình tạo bản dựng hoàn tất (mất vài phút), hãy chạy lệnh này và truy cập vào URL kết quả để xem ứng dụng đang chạy:
echo -e "\n\nOnce the build finishes, visit your live application:\n \
"$( \
gcloud run services list | \
grep codelab-genai | \
awk '/URL/{print $2}' | \
head -1 \
)" \n\n"
11. Thay đổi mã
- Quay lại thiết bị đầu cuối Cloud Shell ở cuối màn hình.
- Đảm bảo rằng bạn vẫn đang ở đúng thư mục:
cd ~/codelab-genai - Mở lại
main.gotrong Trình chỉnh sửa Cloud Shellcloudshell edit main.go - Cài đặt Vertex AI SDK cho Go:
go get cloud.google.com/go/vertexai/genai - Cài đặt thư viện Siêu dữ liệu cho Go để lấy mã dự án hiện tại:
go get cloud.google.com/go/compute/metadata - Thay thế mã trong tệp
main.gobằng:package main import ( "context" "fmt" "log" "net/http" "os" "cloud.google.com/go/compute/metadata" "cloud.google.com/go/vertexai/genai" ) func main() { ctx := context.Background() var projectId string var err error projectId = os.Getenv("GOOGLE_CLOUD_PROJECT") if projectId == "" { projectId, err = metadata.ProjectIDWithContext(ctx) if err != nil { return } } var client *genai.Client client, err = genai.NewClient(ctx, projectId, "us-central1") if err != nil { return } defer client.Close() model := client.GenerativeModel("gemini-1.5-flash-001") http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { animal := r.URL.Query().Get("animal") if animal == "" { animal = "dog" } resp, err := model.GenerateContent( ctx, genai.Text( fmt.Sprintf("Give me 10 fun facts about %s. Return the results as HTML without markdown backticks.", animal)), ) if err != nil { w.WriteHeader(http.StatusServiceUnavailable) return } if len(resp.Candidates) > 0 && len(resp.Candidates[0].Content.Parts) > 0 { htmlContent := resp.Candidates[0].Content.Parts[0] w.Header().Set("Content-Type", "text/html; charset=utf-8") fmt.Fprint(w, htmlContent) } }) port := os.Getenv("PORT") if port == "" { port = "8080" } if err := http.ListenAndServe(":"+port, nil); err != nil { log.Fatal(err) } }
12. Triển khai lại
- Đảm bảo rằng bạn vẫn đang ở đúng thư mục trong Cloud Shell:
cd ~/codelab-genai - Chạy các lệnh này để xác nhận một phiên bản mới của ứng dụng vào kho lưu trữ git cục bộ:
git add . git commit -m "add latest changes" - Đẩy các thay đổi lên GitHub:
git push - Sau khi quá trình tạo hoàn tất, hãy chạy lệnh này và truy cập vào ứng dụng đã triển khai của bạn:
echo -e "\n\nOnce the build finishes, visit your live application:\n \ "$( \ gcloud run services list | \ grep codelab-genai | \ awk '/URL/{print $2}' | \ head -1 \ )" \n\n"
Có thể mất vài phút để bản dựng hoàn tất trước khi bạn có thể thấy các thay đổi.
Bạn có thể xem nhật ký của tất cả các bản sửa đổi tại đây: https://console.cloud.google.com/run/detail/us-central1/codelab-genai/revisions
13. (Không bắt buộc) Kiểm tra việc sử dụng Vertex AI
Giống như các dịch vụ khác của Google Cloud, bạn có thể kiểm tra các hoạt động của Vertex AI. Nhật ký kiểm tra giúp bạn trả lời các câu hỏi "Ai đã làm gì, ở đâu và khi nào?". Nhật ký kiểm tra hành chính cho Vertex AI được bật theo mặc định. Để kiểm tra các yêu cầu tạo nội dung, bạn phải bật nhật ký kiểm tra quyền truy cập dữ liệu:
- Trong bảng điều khiển Google Cloud, hãy chuyển đến trang Nhật ký kiểm tra:
Nếu bạn dùng thanh tìm kiếm để tìm trang này, hãy chọn kết quả có tiêu đề phụ là IAM và Quản trị. - Đảm bảo rằng dự án Google Cloud hiện có là dự án mà bạn tạo ứng dụng Cloud Run.
- Trong bảng Cấu hình nhật ký kiểm tra quyền truy cập vào dữ liệu, hãy tìm và chọn
Vertex AI APItrong cột Dịch vụ. - Trong thẻ Log Types (Loại nhật ký), hãy chọn các loại nhật ký kiểm tra Quyền truy cập vào dữ liệu
Admin readvàData read. - Nhấp vào Lưu.
Sau khi bật tính năng này, bạn sẽ có thể xem nhật ký kiểm tra cho mỗi lần gọi ứng dụng. Để xem nhật ký kiểm tra có thông tin chi tiết về lệnh gọi, hãy làm như sau:
- Quay lại ứng dụng đã triển khai và làm mới trang để kích hoạt nhật ký.
- Trong Google Cloud Console, hãy chuyển đến trang Log Explorer (Trình khám phá nhật ký):
- Trong cửa sổ truy vấn, hãy nhập:
LOG_ID("cloudaudit.googleapis.com%2Fdata_access") protoPayload.serviceName="aiplatform.googleapis.com" - Nhấp vào Chạy truy vấn.
Nhật ký kiểm tra ghi lại việc sử dụng Vertex AI API nhưng không cho phép bạn quan sát dữ liệu liên quan đến khối lượng công việc, chẳng hạn như câu lệnh hoặc thông tin chi tiết về phản hồi.
14. (Không bắt buộc) Tăng khả năng quan sát khối lượng công việc AI
Nhật ký kiểm tra không ghi lại thông tin liên quan đến khối lượng công việc. Để tăng khả năng quan sát các tải công việc, bạn phải ghi nhật ký thông tin này một cách rõ ràng. Bạn có thể sử dụng khung ghi nhật ký mà mình yêu thích để thực hiện việc này. Các bước sau đây minh hoạ một cách thực hiện bằng cách sử dụng thư viện ghi nhật ký có cấu trúc của Go.
- Mở lại
main.gotrong Trình chỉnh sửa Cloud Shellcloudshell edit ~/codelab-genai/main.go - Thay đổi khối nhập để bao gồm các thư viện JSON và nhật ký có cấu trúc của Go:
import ( "context" "encoding/json" "fmt" "log" "log/slog" "net/http" "os" "cloud.google.com/go/compute/metadata" "cloud.google.com/go/vertexai/genai" ) - Sau khi khởi tạo ứng dụng Vertex (dòng 33), hãy thêm các dòng sau để khởi tạo một trình ghi nhật ký có cấu trúc sử dụng các trường phù hợp cho Google Cloud Logging:
opts := &slog.HandlerOptions{ Level: slog.LevelDebug, ReplaceAttr: func(group []string, a slog.Attr) slog.Attr { if a.Key == slog.LevelKey { return slog.Attr{Key: "severity", Value: a.Value} } if a.Key == slog.MessageKey { return slog.Attr{Key: "message", Value: a.Value} } return slog.Attr{Key: a.Key, Value: a.Value} }, } jsonHandler := slog.NewJSONHandler(os.Stdout, opts) slog.SetDefault(slog.New(jsonHandler)) - Sau khi kiểm tra phản hồi cho
GenerateContent(dòng 69), hãy thêm các dòng sau vào khối if: Đoạn mã này ghi vàojsonBytes, err := json.Marshal(resp) if err != nil { slog.Error("Failed to marshal response to JSON", "error", err) } else { jsonString := string(jsonBytes) slog.Debug("Complete response content", "json_response", jsonString) }stdoutthông tin về nội dung được tạo bằng định dạng ghi nhật ký có cấu trúc. Một tác nhân ghi nhật ký trong Cloud Run sẽ ghi lại đầu ra được in vàostdoutvà ghi định dạng này vào Cloud Logging. - Mở lại Cloud Shell và nhập lệnh sau để đảm bảo bạn đang ở đúng thư mục:
cd ~/codelab-genai - Xác nhận các thay đổi:
git commit -am "Observe generated content" - Đẩy các thay đổi lên GitHub để kích hoạt việc triển khai lại phiên bản đã sửa đổi:
git push
Sau khi triển khai phiên bản mới, bạn có thể quan sát thông tin gỡ lỗi về các lệnh gọi đến Vertex AI.
Để xem nhật ký ứng dụng, hãy làm như sau:
- Trong Google Cloud Console, hãy chuyển đến trang Log Explorer (Trình khám phá nhật ký):
- Trong cửa sổ truy vấn, hãy nhập:
LOG_ID("run.googleapis.com%2Fstdout") severity=DEBUG - Nhấp vào Chạy truy vấn.
Kết quả của truy vấn cho thấy nhật ký có câu lệnh và phản hồi của Vertex AI, bao gồm cả "mức độ an toàn" có thể dùng để giám sát các biện pháp an toàn
15. (Không bắt buộc) 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á 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 đó.
Nếu muốn, hãy xoá dự án:
gcloud projects delete $GOOGLE_CLOUD_PROJECT
Bạn cũng có thể xoá các tài nguyên không cần thiết khỏi đĩa cloudshell. Bạn có thể:
- Xoá thư mục dự án lớp học lập trình:
rm -rf ~/codelab-genai - Dọn dẹp mọi gói go mà bạn có thể không cần đến nữa:
cd ~ go clean -modcache - Cảnh báo! Bạn không thể huỷ thao tác này sau khi thực hiện! Nếu muốn xoá mọi thứ trên Cloud Shell để giải phóng dung lượng, bạn có thể xoá toàn bộ thư mục gốc. Hãy cẩn thận để đảm bảo mọi thứ bạn muốn giữ lại đều được lưu ở nơi khác.
sudo rm -rf $HOME
16. Xin chúc mừng
Trong phòng thí nghiệm này, bạn đã viết một ứng dụng web và định cấu hình Cloud Run để tự động triển khai ứng dụng khi có thay đổi đối với mã nguồn của ứng dụng. Sau đó, bạn đã sửa đổi ứng dụng và triển khai lại.
Nếu thích phòng thí nghiệm này, bạn có thể thử lại bằng một ngôn ngữ hoặc khung lập trình khác:
Nếu bạn muốn tham gia một nghiên cứu về trải nghiệm người dùng (UX) để cải thiện những sản phẩm mà bạn đã sử dụng hôm nay, hãy đăng ký tại đây.
Sau đây là một số lựa chọn để bạn tiếp tục học tập:
- Tài liệu: Sử dụng Genkit làm một lớp trừu tượng mô hình linh hoạt, giúp bạn dễ dàng tích hợp mọi API mô hình và sử dụng các mô hình do cộng đồng duy trì.
- Lớp học lập trình: Cách triển khai ứng dụng trò chuyện dựa trên Gemini trên Cloud Run
- Cách sử dụng tính năng gọi hàm của Gemini với Cloud Run
- Hội thảo theo yêu cầu: Làm quen với Google Kubernetes Engine
- Cách sử dụng Cloud Run Jobs Video Intelligence API để xử lý video theo từng cảnh