Xin chào Cloud Run bằng C#

1. Giới thiệu

89eb4723767d4525.png

Cloud Run là một nền tảng đượ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 thông qua các yêu cầu HTTP. 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.

Dịch vụ này được xây dựng dựa trên Knative, cho phép bạn chọn chạy các vùng chứa được quản lý hoàn toàn bằng Cloud Run hoặc trong cụm Google Kubernetes Engine bằng Cloud Run trên GKE.

Mục tiêu của lớp học lập trình này là giúp bạn tạo một hình ảnh vùng chứa và triển khai hình ảnh đó vào 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

  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.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.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.

Google 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, chúng ta sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trên Cloud.

Cloud Shell là một môi trường phát triển và vận hành trực tuyến mà bạn có thể truy cập ở bất cứ đâu bằng trình duyệt. Bạn có thể quản lý tài nguyên bằng thiết bị đầu cuối trực tuyến được tải sẵn các tiện ích như công cụ dòng lệnh gcloud, kubectl và nhiều tiện ích khác. Bạn cũng có thể phát triển, tạo, gỡ lỗi và triển khai các ứng dụng dựa trên đám mây bằng Cloud Shell Editor trực tuyến.

Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. 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ực tiếp 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. Điều này có nghĩa là bạn chỉ cần một trình duyệt (có, trình duyệt này hoạt động trên Chromebook) cho lớp học lập trình này.

  • Để kích hoạt Cloud Shell từ Cloud Console, bạn chỉ cần nhấp vào Kích hoạt Cloud Shell :

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

bfde7b083abc9544.png

Quá trình cung cấp môi trường chỉ mất vài giây :

cbb597d2be277a14.png

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

gcloud auth list

Đầu ra của lệnh

Credentialed Accounts

ACTIVE: *
ACCOUNT: <my-account>@<mydomain>

Dự án cũng phải được đặt thành PROJECT_ID (giả sử bạn đã chọn một dự án trong bảng điều khiển web) :

gcloud config list project

Đầu ra của lệnh

[core]
project = <PROJECT_ID>

Nếu vì lý do nào đó mà dự án chưa được thiết lập, bạn chỉ cần đưa ra lệnh sau:

gcloud config set project <PROJECT_ID>

Bạn đang tìm PROJECT_ID? Hãy xem trình đơn thả xuống ở đầu Cloud Console :

2c7a57249d954735.png

Bạn cũng có thể xem thông tin chi tiết về dự án trong phần "Cài đặt và tiện ích":

791f101797cfef39.png

Cloud Shell cũng đặt một số biến môi trường theo mặc định, có thể hữu ích khi bạn chạy các lệnh trong tương lai.

echo $GOOGLE_CLOUD_PROJECT

Đầu ra của lệnh

<PROJECT_ID>
  • Cuối cùng, bạn có thể đặt vùng mặc định :
gcloud config set compute/zone us-central1-f

Bạn có thể chọn các khu vực khác nhau. Để biết thêm thông tin, hãy xem phần Khu vực và vùng.

Bật Cloud Run API

Trong Cloud Shell, hãy bật Cloud Run API :

gcloud services enable 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/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

3. Viết ứng dụng mẫu

Chúng ta sẽ tạo một ứng dụng ASP.NET C# đơn giản để phản hồi các yêu cầu HTTP.

Để tạo ứng dụng, hãy sử dụng công cụ dòng lệnh dotnet trong Cloud Shell:

dotnet new web -o helloworld-csharp

Thay đổi thành thư mục helloworld-csharp:

cd helloworld-csharp

Tiếp theo, hãy cập nhật Program.cs để khớp với nội dung sau:

var builder = WebApplication.CreateBuilder(args);

var port = Environment.GetEnvironmentVariable("PORT") ?? "8080";
var url = $"http://0.0.0.0:{port}";
builder.WebHost.UseUrls(url);

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Đoạn mã này tạo một máy chủ web cơ bản, lắng nghe trên cổng do biến môi trường PORT xác định và trả lời bằng Hello World.

Bạn có thể kiểm thử ứng dụng bằng cách chạy ứng dụng đó trên Cloud Shell. Bạn sẽ thấy nó đang xử lý trên cổng 8080:

$ dotnet run
Using launch settings from /home/atameldev/helloworld-csharp/Properties/launchSettings.json...
Hosting environment: Development
Content root path: /home/atameldev/helloworld-csharp
Now listening on: http://0.0.0.0:8080
Application started. Press Ctrl+C to shut down.

4. Triển khai lên Cloud Run

Triển khai ứng dụng của bạn lên Cloud Run bằng lệnh sau:

gcloud run deploy hello-world \
    --allow-unauthenticated \
    --region us-central1 \
    --source .
  • hello-world là tên dịch vụ.
  • Cờ allow-unauthenticated triển khai dịch vụ dưới dạng một dịch vụ được cung cấp công khai mà không có yêu cầu xác thực.
  • us-central1 là khu vực mà ứng dụng sẽ được triển khai.
  • Cờ source xác định vị trí của nguồn cần tạo. Cloud Run sử dụng buildpack để tự động tạo một vùng chứa từ mã nguồn.

Đợi vài phú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ụ :

Service [hello-world] revision [hello-world-00001-yos] has been deployed and is serving 100 percent of traffic.
Service URL: https://helloworld-wdl7fdwaaa-uc.a.run.app

Giờ đây, bạn có thể truy cập vào vùng chứa đã triển khai bằng cách mở URL dịch vụ trong trình duyệt web :

85e7fbbd264444c9.png

Xin chúc mừng! Bạn vừa triển khai một ứng dụng được đóng gói trong một hình ảnh vùng chứa 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.

5. Đã đến lúc dọn dẹp

Bạn có thể quyết định xoá dự án GCP để không bị tính phí. Thao tác này sẽ dừng tính phí cho tất cả tài nguyên được dùng trong dự án đó, hoặc chỉ cần xoá dịch vụ Cloud Run:

gcloud run services delete helloworld

6. Tiếp theo là gì?

Bước tiếp theo nên làm là Triển khai cho Cloud Run trên GKE.

Để biết thêm thông tin về cách tạo một vùng chứa HTTP không trạng thái phù hợp với Cloud Run từ nguồn mã và đẩy vùng chứa đó vào Container Registry, hãy xem: