Triển khai ứng dụng ASP.NET Core cho App Engine

1. Tổng quan

ASP.NET Core là một khung mới, nguồn mở và đa nền tảng để xây dựng các ứng dụng hiện đại dựa trên đám mây và có kết nối Internet bằng ngôn ngữ lập trình C#.

Trong phòng thí nghiệm này, bạn sẽ triển khai một ứng dụng ASP.NET Core đơn giản vào môi trường linh hoạt của App Engine. Lớp học lập trình này dựa trên lớp học lập trình Tạo và chạy ứng dụng ASP.NET Core từ Google Cloud Shell. Bạn nên thực hiện bài thực hành đó trước khi thử bài thực hành này.

Các ứng dụng Google App Engine rất dễ tạo, duy trì và mở rộng quy mô 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 quản lý máy chủ. Bạn chỉ cần tải ứng dụng lên là có thể sử dụng ngay.

Các ứng dụng App Engine tự động mở rộng quy mô dựa trên lưu lượng truy cập đến. App Engine hỗ trợ cân bằng tải, các dịch vụ vi mô, uỷ quyền, cơ sở dữ liệu SQL và NoSQL, Memcache, phân chia lưu lượng truy cập, ghi nhật ký, tìm kiếm, kiểm soát phiên bản, triển khai và khôi phục, cũng như quét bảo mật, tất cả đều có thể tuỳ chỉnh cao.

Các môi trường của App Engine (môi trường tiêu chuẩnmôi trường linh hoạt) hỗ trợ nhiều ngôn ngữ lập trình, bao gồm C#, Java, Python, PHP, Node.js, Go và nhiều ngôn ngữ khác. Hai môi trường này mang đến cho người dùng sự linh hoạt tối đa trong cách ứng dụng của họ hoạt động, vì mỗi môi trường đều có những điểm mạnh nhất định. Để biết thêm thông tin, hãy đọc bài viết Chọn môi trường App Engine.

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

  • Cách đóng gói một ứng dụng ASP.NET Core đơn giản dưới dạng một vùng chứa Docker.
  • Cách triển khai một ứng dụng ASP.NET Core đơn giản vào App Engine.

Bạn cần có

  • Một dự án trên Google Cloud Platform
  • Một trình duyệt, chẳng hạn như Chrome hoặc Firefox

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 Google Cloud Platform?

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.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.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 dùng và bạn có thể cập nhật chuỗi này bất cứ lúc nào.
  • Mã dự án phải là 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 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). Vì vậy, nếu không thích mã này, bạn có thể tạo một mã ngẫu nhiên khác hoặc thử mã của riêng mình để xem mã đó có dùng được hay không. Sau đó, mã này sẽ "đóng băng" sau khi dự án được tạo.
  • 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 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, hãy làm theo mọi hướng dẫn "dọn dẹp" ở cuối lớp học lập trình. 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 Google Cloud Shell, một môi trường dòng lệnh chạy trên Cloud.

Kích hoạt Cloud Shell

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

bce75f34b2c53987.png

Nếu chưa từng khởi động Cloud Shell, bạn sẽ thấy một màn hình trung gian (bên dưới phần hiển thị đầu tiên) mô tả về Cloud Shell. Nếu vậy, hãy nhấp vào Tiếp tục (và bạn sẽ không bao giờ thấy màn hình này nữa). Sau đây là giao diện của màn hình xuất hiện một lần:

70f315d7b402b476.png

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

fbe3a0674c982259.png

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 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 trong lớp học lập trình này chỉ bằng một trình duyệt hoặc Chromebook.

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. Tạo một ứng dụng ASP.NET Core trong Cloud Shell

Trong dấu nhắc Cloud Shell, bạn có thể xác minh rằng công cụ dòng lệnh dotnet đã được cài đặt bằng cách liệt kê các SDK .NET đã cài đặt:

dotnet --list-sdks

Tiếp theo, hãy tạo một ứng dụng web ASP.NET Core mới với khung mục tiêu là netcoreapp3.1:

dotnet new mvc -o HelloWorldAspNetCore -f netcoreapp3.1

Thao tác này sẽ tạo một dự án và khôi phục các phần phụ thuộc của dự án. Bạn sẽ thấy một thông báo tương tự như bên dưới.

Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.

Restore succeeded.

4. Chạy ứng dụng ASP.NET Core

Chúng ta sắp chạy xong ứng dụng. Chuyển đến thư mục ứng dụng.

cd HelloWorldAspNetCore

Cuối cùng, hãy chạy ứng dụng.

dotnet run --urls=http://localhost:8080

Ứng dụng bắt đầu nghe trên cổng 8080.

Hosting environment: Production
Content root path: /home/atameldev/HelloWorldAspNetCore
Now listening on: http://[::]:8080
Application started. Press Ctrl+C to shut down.

Để xác minh rằng ứng dụng đang chạy, hãy nhấp vào nút xem trước trên web ở trên cùng bên phải rồi chọn "Xem trước trên cổng 8080".

Capture.PNG

Bạn sẽ thấy trang web ASP.NET Core mặc định:

f579a9baedc108a9.png

Sau khi bạn xác minh rằng ứng dụng đang chạy, hãy nhấn Ctrl+C để tắt ứng dụng.

5. Xuất bản ứng dụng ASP.NET Core

Giờ đây, hãy xuất bản ứng dụng để nhận một DLL độc lập bằng lệnh dotnet publish.

dotnet publish -c Release

Khi chạy publish, bạn sẽ thấy một số thông báo cho biết DLL đã được xuất bản thành công ở cuối quy trình.

...
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/HelloWorldAspNetCore.dll
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/HelloWorldAspNetCore.Views.dll
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/publish/

6. Tạo app.yaml cho App Engine linh hoạt

Tệp app.yaml mô tả cách triển khai ứng dụng vào App Engine, trong trường hợp này là môi trường linh hoạt của App Engine.

Trước tiên, hãy chuyển đến thư mục publish. Thư mục này phải nằm trong thư mục bin/Release nhưng đường dẫn chính xác sẽ tuỳ thuộc vào phiên bản .NET:

cd bin/Release/netcoreapp3.1/publish/

Tạo tệp app.yaml bên trong thư mục publish:

cat <<EOT >> app.yaml
env: flex
runtime: aspnetcore
EOT

Lưu ý cách tệp app.yaml chỉ định môi trường là flex và thời gian chạy là aspnetcore.

7. Triển khai lên môi trường linh hoạt của App Engine

Bạn đã sẵn sàng triển khai ứng dụng của mình lên App Engine linh hoạt bằng gcloud. Trong thư mục publish, hãy chạy lệnh sau:

gcloud app deploy --version v0

Trong quá trình triển khai, bạn có thể được yêu cầu chọn một khu vực cho ứng dụng của mình. Chọn khu vực mà bạn muốn ứng dụng chạy.

Please choose a region for your application. After choosing a region, 
you cannot change it. Which region would you like to choose?
 [1] europe-west   (supports standard and flexible)
 [2] us-central    (supports standard and flexible)
 [3] us-east1      (supports standard and flexible)
 [4] asia-northeast1 (supports standard and flexible)
 [5] cancel

Thao tác này sẽ tạo một hình ảnh cho ứng dụng của bạn trên đám mây, lưu hình ảnh đó vào Google Container Registry và triển khai vào App Engine. Trong quá trình triển khai, bạn có thể thấy hình ảnh vùng chứa đang được tạo:

Operation completed over 1 objects/571.8 KiB.
BUILD
Step #0: Pulling image: gcr.io/gcp-runtimes/aspnetcorebuild@sha256:d7b7975acb374fc3a9655a4e529993e6270cfa78023885684626528bc379f8eb
Step #0: sha256:d7b7975acb374fc3a9655a4e529993e6270cfa78023885684626528bc379f8eb: Pulling from gcp-runtimes/aspnetcorebuild

Cuối cùng, bạn sẽ thấy ứng dụng được triển khai.

...
Deployed service [default] to [https://<project-id>.appspot.com]

Sau khi triển khai ứng dụng,hãy truy cập ứng dụng bằng cách mở URL http://<project-id>.appspot.com trong trình duyệt web.

Bạn sẽ thấy trang web ASP.NET Core mặc định trong một thẻ mới.

f579a9baedc108a9.png

Bạn cũng có thể xem hình ảnh vùng chứa được tạo cho bạn trên đám mây. Trong Cloud Console, hãy chuyển đến Container Registry > Images (Container Registry > Hình ảnh), sau đó trong thư mục appengine, bạn sẽ thấy hình ảnh cho ứng dụng của mình.

de788f4949d0c5a.png

8. Triển khai phiên bản mới của dịch vụ

Đến một thời điểm nào đó, ứng dụng mà bạn đã triển khai cho kênh phát hành công khai sẽ cần được sửa lỗi hoặc bổ sung tính năng. App Engine sẽ giúp bạn triển khai một phiên bản mới cho bản phát hành công khai mà không ảnh hưởng đến người dùng.

Trước tiên, hãy sửa đổi ứng dụng. Mở trình soạn thảo mã trong Cloud Shell.

868c4f615e2331fe.png

Chuyển đến Index.cshtml trong thư mục Views/Home của HelloWorldAspNetCore rồi cập nhật thông báo mặc định thành thông báo sau:

Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core on Google Cloud Platform!

Lưu các thay đổi rồi quay lại Cloud Shell. Trong HelloWorldAspNetCore,, hãy xuất bản ứng dụng để nhận một DLL độc lập.

dotnet publish -c Release

Chuyển đến thư mục xuất bản.

cd bin/Release/netcoreapp3.1/publish/

Giờ đây, bạn có thể triển khai một phiên bản mới của ứng dụng (trong trường hợp này là v1).

gcloud app deploy --version v1

Sau khi triển khai, bạn có thể chuyển đến phần phiên bản App Engine của Google Cloud Console để xem phiên bản mới của ứng dụng đang phân phát tất cả lưu lượng truy cập bằng thông báo mới.

8cc0cc992b4e07ed.png

9. Trang tổng quan và tính năng phân tách lưu lượng truy cập

Trong App Engine, trong phần Trang tổng quan, bạn có thể thấy một số trang tổng quan cho ứng dụng của mình về độ trễ, CPU, v.v. Hãy tự mình khám phá các trang tổng quan này.

5c879431935b080d.png

Trong phần Phiên bản, bạn có thể xem các phiên bản đã triển khai của ứng dụng và có thể phân chia lưu lượng truy cập giữa các phiên bản trong phần Phân chia lưu lượng truy cập. Hãy chia lưu lượng truy cập thành 2 phiên bản:

176a2e22e755b6d3.png

10. Xin chúc mừng!

Cleanup

Đã đến lúc tắt ứng dụng để tiết kiệm chi phí và trở thành một công dân đám mây gương mẫu.

Chuyển đến phần phiên bản của App Engine.

7e9b3b4406e785b9.png

Chọn phiên bản và dừng phiên bản đó.

7f80d9ff2c959e0.png

Sau khi phiên bản bị dừng, các phiên bản hỗ trợ sẽ bị xoá và bạn sẽ thấy số lượng phiên bản giảm xuống bằng 0.

29f3cb5c71225b2d.png

Nội dung đã đề cập

Đây rồi! Bạn đã tạo một ứng dụng ASP.NET Core, đóng gói ứng dụng đó dưới dạng một vùng chứa Docker và triển khai ứng dụng đó vào Google App Engine linh hoạt.

  • Cách đóng gói một ứng dụng ASP.NET Core đơn giản dưới dạng một vùng chứa Docker.
  • Cách triển khai một ứng dụng ASP.NET Core đơn giản vào App Engine.

Các bước tiếp theo

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.