ASP.NET Core: Triển khai ứng dụng Cơ sở dữ liệu ASP.NET Core và Azure SQL cho App Service Azure


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

Trong bài hướng dẫn này, bạn sẽ tìm hiểu cách triển khai ứng dụng ASP.NET Core dựa trên dữ liệu cho App Service Azure và kết nối với Cơ sở dữ liệu Azure SQL. Bạn cũng sẽ triển khai Azure Cache cho Redis để bật mã bộ nhớ đệm trong ứng dụng của mình. App Service Azure là một dịch vụ lưu trữ web, tự vá lỗi, có khả năng mở rộng cao, có thể dễ dàng triển khai các ứng dụng trên Windows hoặc Linux. Mặc dù hướng dẫn này sử dụng ứng dụng ASP.NET Core 7.0, nhưng quy trình này giống với các phiên bản khác của ASP.NET Core và ASP.NET Framework.

Bài hướng dẫn này yêu cầu:

Ứng dụng mẫu

Để khám phá ứng dụng mẫu được sử dụng trong hướng dẫn này, hãy tải xuống từ kho lưu trữ https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore hoặc sao chép ứng dụng đó bằng lệnh Git sau:

git clone https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.git
cd msdocs-app-service-sqldb-dotnetcore

I. Tạo App Service, database và cache

Trong bước này, bạn tạo tài nguyên Azure. Các bước được sử dụng trong hướng dẫn này tạo một tập hợp các tài nguyên bảo mật theo mặc định bao gồm App Service, Cơ sở dữ liệu Azure SQL và Bộ đệm ẩn Azure. Đối với quá trình tạo, bạn sẽ chỉ định:

  • Tên cho ứng dụng web. Đó là tên được sử dụng như một phần của tên DNS cho ứng dụng web của bạn ở dạng https://<app-name>.azurewebsites.net.
  • Khu vực để chạy ứng dụng trên thế giới.
  • Ngăn xếp Thời gian chạy cho ứng dụng. Đó là nơi bạn chọn phiên bản .NET để sử dụng cho ứng dụng của mình.
  • Kế hoạch lưu trữ cho ứng dụng. Đó là mức giá bao gồm tập hợp các tính năng và khả năng thay đổi quy mô cho ứng dụng của bạn.
  • Nhóm tài nguyên cho ứng dụng. Nhóm tài nguyên cho phép bạn nhóm (trong một vùng chứa logic) tất cả các tài nguyên Azure cần thiết cho ứng dụng.

Đăng nhập vào cổng Azure và làm theo các bước sau để tạo tài nguyên Dịch vụ ứng dụng Azure của bạn.

Bước 1. Trong cổng Azure:

  1. Nhập "web app database" vào thanh tìm kiếm ở đầu cổng Azure.
  2. Chọn mục có nhãn Web App + Database dưới tiêu đề Marketplace. Bạn cũng có thể điều hướng trực tiếp đến trình hướng dẫn tạo.

Ảnh chụp màn hình hiển thị cách sử dụng hộp tìm kiếm trong thanh công cụ trên cùng để tìm trình hướng dẫn tạo Ứng dụng web + Cơ sở dữ liệu.

Bước 2. Trong trang Create Web App + Database, hãy điền vào biểu mẫu như sau.

  1. Resource Group → Chọn Create new và sử dụng tên msdocs-core-sql-tutorial.
  2. Region → Bất kỳ vùng Azure nào gần bạn.
  3. Name → msdocs-core-sql-XYZ trong đó XYZ là ba ký tự ngẫu nhiên bất kỳ. Tên này phải là duy nhất trên Azure.
  4. Runtime stack → .NET 7 (STS).
  5. Add Azure Cache for Redis? Yes.
  6. Hosting plan → Basic. Khi bạn đã sẵn sàng, bạn có thể tăng quy mô lên mức cao hơn sau.
  7. SQLAzure được chọn theo mặc định làm công cụ cơ sở dữ liệu. Cơ sở dữ liệu Azure SQL là một nền tảng được quản lý hoàn toàn dưới dạng công cụ cơ sở dữ liệu dịch vụ (PaaS) luôn chạy trên phiên bản ổn định mới nhất của SQL Server.
  8. Chọn Review + create.
  9. Sau khi xác thực hoàn tất, hãy chọn Create.

Ảnh chụp màn hình hiển thị cách định cấu hình ứng dụng và cơ sở dữ liệu mới trong trình hướng dẫn Cơ sở dữ liệu + Ứng dụng web.

Bước 3. Việc triển khai mất vài phút để hoàn thành. Sau khi triển khai hoàn tất, hãy chọn nút Go to resource. Bạn được đưa trực tiếp đến ứng dụng App Service nhưng các tài nguyên sau được tạo:

  • Resource group → Vùng chứa tất cả các tài nguyên đã tạo.
  • App Service plan → Xác định tài nguyên điện toán cho App Service. Gói Linux trong tầng Basic được tạo.
  • App Service → Đại diện cho ứng dụng của bạn và chạy trong gói App Service.
  • Virtual network → Được tích hợp với ứng dụng App Service và cách ly lưu lượng mạng phía sau.
  • Private endpoints → Truy cập điểm cuối cho máy chủ cơ sở dữ liệu và bộ đệm Redis trong mạng ảo.
  • Network interfaces → Đại diện cho các địa chỉ IP riêng, một địa chỉ cho mỗi điểm cuối riêng.
  • Azure SQL Database server → Chỉ có thể truy cập từ phía sau điểm cuối riêng tư của nó.
  • Azure SQL Database → Cơ sở dữ liệu và người dùng được tạo cho bạn trên máy chủ.
  • Azure Cache for Redis → Chỉ có thể truy cập từ phía sau điểm cuối riêng tư của nó.
  • Private DNS zones → Bật độ phân giải DNS của máy chủ cơ sở dữ liệu và bộ đệm Redis trong mạng ảo.

Ảnh chụp màn hình hiển thị quá trình triển khai đã hoàn tất.

II. Xác minh chuỗi kết nối

Trình hướng dẫn tạo đã tạo các chuỗi kết nối cho cơ sở dữ liệu SQL và bộ đệm Redis. Trong bước này, hãy tìm các chuỗi kết nối đã tạo để sử dụng sau này.

Bước 1. Trong trang App Service, ở menu bên trái, chọn Configuration.

Ảnh chụp màn hình hiển thị cách mở trang cấu hình trong Dịch vụ ứng dụng.

Bước 2.

  1. Cuộn xuống cuối trang và tìm AZURE_SQL_CONNECTIONSTRING trong phần Connection strings. Chuỗi này được tạo từ cơ sở dữ liệu SQL mới bằng trình hướng dẫn tạo. Để thiết lập ứng dụng của bạn thì tên này là tất cả những gì bạn cần.
  2. Ngoài ra, hãy tìm AZURE_REDIS_CONNECTIONSTRING trong phần Application settings. Chuỗi này được tạo từ bộ đệm Redis mới bằng trình hướng dẫn tạo. Để thiết lập ứng dụng của bạn thì tên này là tất cả những gì bạn cần.
  3. Nếu muốn, bạn có thể chọn nút Edit ở bên phải mỗi cài đặt và xem hoặc sao chép giá trị của nó. Sau đó, bạn sẽ thay đổi ứng dụng của mình để sử dụng AZURE_SQL_CONNECTIONSTRING và   AZURE_REDIS_CONNECTIONSTRING.

Ảnh chụp màn hình cho biết cách tạo cài đặt ứng dụng.

III. Triển khai code mẫu

Trong bước này, bạn sẽ định cấu hình triển khai GitHub bằng GitHub Actions. Đây chỉ là một trong nhiều cách để triển khai App Service, nhưng cũng là một cách tuyệt vời để tích hợp liên tục trong quy trình triển khai của bạn. Theo mặc định, mọi git push tới kho lưu trữ GitHub của bạn sẽ bắt đầu hành động xây dựng và triển khai.

Bước 1. Trong cửa sổ trình duyệt mới:

  1. Đăng nhập vào tài khoản GitHub của bạn.
  2. Điều hướng đến https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.
  3. Chọn Fork.
  4. Chọn Create fork.

Ảnh chụp màn hình cho biết cách tạo một nhánh của kho lưu trữ GitHub mẫu.

Bước 2. Trong trang App Service, ở menu bên trái, chọn Deployment Center.

Ảnh chụp màn hình hiển thị cách mở trung tâm triển khai trong Dịch vụ ứng dụng.

Bước 3. Trong trang Deployment Center:

  1. Trong Source bạn chọn GitHub. Theo mặc định thì GitHub Actions được chọn làm nhà cung cấp bản dựng.
  2. Đăng nhập vào tài khoản GitHub của bạn và làm theo lời nhắc để cấp quyền cho Azure.
  3. Trong Organization, hãy chọn tài khoản của bạn.
  4. Trong Repository, chọn msdocs-app-service-sqldb-dotnetcore.
  5. Trong Branch bạn chọn main.
  6. Trong menu trên cùng, chọn Save. App Service sẽ commit tệp quy trình công việc vào kho lưu trữ GitHub đã chọn ở trong thư mục .github/workflows.

Ảnh chụp màn hình hiển thị cách định cấu hình CI/CD bằng Tác vụ GitHub.

Bước 4. Quay lại trang GitHub của mẫu rẽ nhánh, mở Visual Studio Code trong trình duyệt bằng cách nhấn phím ..

Ảnh chụp màn hình hiển thị cách mở trải nghiệm trình duyệt Visual Studio Code trong GitHub.

Bước 5. Trong Visual Studio Code trên trình duyệt:

  1. Mở DotNetCoreSqlDb/appsettings.json trong Explorer.
  2. Thay đổi tên chuỗi kết nối MyDbConnection thành AZURE_SQL_CONNECTIONSTRING, khớp với chuỗi kết nối được tạo trong App Service trước đó.

Ảnh chụp màn hình hiển thị tên chuỗi kết nối đã thay đổi trong appsettings.json.

Bước 6.

  1. Mở DotNetCoreSqlDb/Program.cs trong Explorer.
  2. Trong phương thức options.UseSqlServer, hãy thay đổi tên chuỗi kết nối MyDbConnection thành AZURE_SQL_CONNECTIONSTRING. Đây là nơi chuỗi kết nối được sử dụng bởi ứng dụng mẫu.
  3. Xóa phương thức builder.Services.AddDistributedMemoryCache(); và thay thế nó bằng đoạn mã sau. Nó thay đổi mã của bạn từ việc sử dụng bộ đệm trong bộ nhớ sang bộ đệm Redis trong Azure và nó làm như vậy bằng cách sử dụng AZURE_REDIS_CONNECTIONSTRING từ trước đó.
builder.Services.AddStackExchangeRedisCache(options =>
{
options.Configuration = builder.Configuration["AZURE_REDIS_CONNECTIONSTRING"];
options.InstanceName = "SampleInstance";
});

Bước 7.

  1. Mở .github/workflows/main_msdocs-core-sql-XYZ trong Explorer. Tệp này được tạo bởi trình hướng dẫn tạo App Service.
  2. Dưới bước dotnet publish, bạn thêm bước cài đặt công cụ Entity Framework Core bằng lệnh dotnet tool install -g dotnet-ef.
  3. Trong bước mới, hãy thêm một bước nữa để tạo gói migration bundle trong gói triển khai: dotnet ef migrations bundle --runtime linux-x64 -p DotNetCoreSqlDb/DotNetCoreSqlDb.csproj -o ${{env.DOTNET_ROOT}}/myapp/migrate. Gói migration là một tệp thực thi độc lập mà bạn có thể chạy trong môi trường production mà không cần .NET SDK. Bộ chứa linux của App Service chỉ có thời gian chạy .NET chứ không phải .NET SDK.

Ảnh chụp màn hình hiển thị các bước được thêm vào tệp quy trình công việc GitHub cho gói di chuyển cơ sở dữ liệu.

Bước 8.

  1. Chọn phần mở rộng Source Control.
  2. Trong hộp văn bản, nhập thông báo commit dạng: Configure DB & Redis & add migration bundle.
  3. Chọn Commit and Push.

Ảnh chụp màn hình hiển thị các thay đổi đang được cam kết và đẩy lên GitHub.

Bước 9. Quay lại trang Deployment Center trong cổng Azure:

  1. Chọn Logs. Một lần chạy triển khai mới đã được bắt đầu từ những thay đổi đã commit của bạn.
  2. Trong mục nhật ký cho quá trình triển khai, hãy chọn mục Build/Deploy Logs với dấu thời gian mới nhất.

Ảnh chụp màn hình hiển thị cách mở nhật ký triển khai trong trung tâm triển khai.

Bước 10. Bạn được đưa đến kho lưu trữ GitHub của mình và thấy rằng hành động GitHub đang chạy. Tệp quy trình công việc xác định hai giai đoạn riêng biệt, xây dựng và triển khai. Đợi cho GitHub chạy hiển thị trạng thái Complete; có thể bạn phải mất một vài phút.

Ảnh chụp màn hình hiển thị quá trình chạy GitHub đang diễn ra.

IV. Tạo lược đồ cơ sở dữ liệu

Với Cơ sở dữ liệu SQL được bảo vệ bởi mạng ảo, cách dễ nhất để chạy Run dotnet database migration là trong phiên SSH với bộ chứa App Service.

Bước 1. Quay lại trang App Service, ở menu bên trái, chọn SSH.

Ảnh chụp màn hình hiển thị cách mở trình bao SSH cho ứng dụng của bạn từ cổng Azure.

Bước 2. Trong teriminal SSH:

  1. Chạy cd /home/site/wwwroot. Đây là tất cả các tệp đã triển khai của bạn.
  2. Chạy migration bundle do quy trình công việc GitHub tạo ra với ./migrate. Nếu thành công thì tức là App Service đang kết nối thành công với Cơ sở dữ liệu SQL. Chỉ những thay đổi đối với các file trong /home mới có thể tồn tại sau khi khởi động lại ứng dụng. Những thay đổi bên ngoài /home không được duy trì.

Ảnh chụp màn hình hiển thị các lệnh chạy trong trình bao SSH và đầu ra của chúng.

V. Duyệt đến ứng dụng

Bước 1. Trong trang App Service:

  1. Từ menu bên trái, chọn Overview.
  2. Chọn URL của ứng dụng của bạn. Bạn cũng có thể điều hướng trực tiếp đến https://<app-name>.azurewebsites.net.

Ảnh chụp màn hình hiển thị cách khởi chạy Dịch vụ ứng dụng từ cổng Azure.

Bước 2. Bạn thêm thử một vài nhiệm vụ vào danh sách để thử nghiệm. Đến đây thì xin chúc mừng, bạn đang chạy một ứng dụng ASP.NET Core dựa trên dữ liệu an toàn trong App Service Azure.

Ảnh chụp màn hình của ứng dụng .NET Core đang chạy trong Dịch vụ ứng dụng.

Mẹo

Ứng dụng mẫu triển khai mẫu cache-aside. Khi bạn truy cập data view lần thứ hai hoặc tải lại cùng một trang sau khi thực hiện thay đổi dữ liệu, thì Processing time trong trang web hiển thị thời gian nhanh hơn nhiều vì nó đang tải dữ liệu từ bộ nhớ cache thay vì cơ sở dữ liệu.

VI. Truyền phát nhật ký chẩn đoán

Dịch vụ ứng dụng Azure ghi lại tất cả các thông báo được ghi vào bảng điều khiển để hỗ trợ bạn chẩn đoán sự cố với ứng dụng của mình. Ứng dụng mẫu xuất thông báo nhật ký bảng điều khiển ở mỗi điểm cuối của ứng dụng để thể hiện khả năng này.

Bước 1. Trong trang App Service:

  1. Từ menu bên trái, chọn App Service logs.
  2. Trong Application logging bạn chọn File System.

Ảnh chụp màn hình hiển thị cách bật nhật ký gốc trong Dịch vụ ứng dụng trong cổng Azure.

Bước 2. Từ menu bên trái, chọn Log stream. Bạn thấy nhật ký cho ứng dụng của mình, bao gồm nhật ký nền tảng và nhật ký từ bên trong vùng chứa.

Ảnh chụp màn hình hiển thị cách xem luồng nhật ký trong cổng Azure.

VII. Dọn dẹp tài nguyên

Khi hoàn tất, bạn có thể xóa tất cả tài nguyên khỏi đăng ký Azure của mình bằng cách xóa nhóm tài nguyên.

Bước 1. Trong thanh tìm kiếm ở đầu cổng Azure:

  1. Nhập tên nhóm tài nguyên.
  2. Chọn nhóm tài nguyên.

Ảnh chụp màn hình hiển thị cách tìm kiếm và điều hướng đến một nhóm tài nguyên trong cổng Azure.

Bước 2. Trong trang nhóm tài nguyên, chọn Delete resource group.

Ảnh chụp màn hình hiển thị vị trí của nút Xóa nhóm tài nguyên trong cổng Azure.

Bước 3.

  1. Nhập tên nhóm tài nguyên để xác nhận việc xóa của bạn.
  2. Chọn Delete.

Ảnh chụp màn hình hộp thoại xác nhận xóa nhóm tài nguyên trong cổng Azure.

Các câu hỏi thường gặp

Chi phí thiết lập này là bao nhiêu?

Giá cho các tài nguyên tạo như sau:

  • Gói dịch vụ ứng dụng được tạo ở bậc Basic và có thể tăng hoặc giảm quy mô. Xem giá App Service.
  • Cơ sở dữ liệu Azure SQL được tạo ở tầng không có máy chủ, mục đích chung trên phần cứng Standard-series với số lõi tối thiểu. Có một chi phí nhỏ và có thể được phân phối cho các khu vực khác. Bạn có thể giảm thiểu chi phí hơn nữa bằng cách giảm kích thước tối đa của nó hoặc bạn có thể mở rộng quy mô bằng cách điều chỉnh bậc phục vụ, bậc điện toán, cấu hình phần cứng, số lõi, kích thước cơ sở dữ liệu và dự phòng vùng. Xem giá Cơ sở dữ liệu Azure SQL.
  • Bộ đệm Azure cho Redis được tạo ở bậc Basic với kích thước bộ đệm tối thiểu. Có một chi phí nhỏ liên quan đến tầng này. Bạn có thể mở rộng nó lên các bậc hiệu suất cao hơn để có được tính khả dụng, phân cụm và các tính năng khác cao hơn. Xem Azure Cache để biết giá Redis.
  • Mạng ảo không tính phí trừ khi bạn định cấu hình chức năng bổ sung, chẳng hạn như ngang hàng. Xem giá Mạng ảo Azure.
  • Vùng DNS riêng phải chịu một khoản phí nhỏ. Xem giá DNS Azure.

Làm cách nào để tôi kết nối với máy chủ Cơ sở dữ liệu Azure SQL được bảo mật phía sau mạng ảo bằng các công cụ khác?

  • Để có quyền truy cập cơ bản từ công cụ dòng lệnh, bạn có thể chạy sqlcmd từ thiết terminal SSH của ứng dụng. Bộ chứa của ứng dụng không đi kèm sqlcmd, vì vậy bạn phải cài đặt thủ công. Hãy nhớ rằng ứng dụng khách đã cài đặt không tồn tại khi khởi động lại ứng dụng.
  • Để kết nối từ máy khách SQL Server Management Studio hoặc từ Visual Studio, máy của bạn phải nằm trong mạng ảo. Ví dụ: đó có thể là máy ảo Azure được kết nối với một trong các mạng con hoặc máy trong mạng tại chỗ có kết nối VPN site-to-site với mạng ảo Azure.

Phát triển ứng dụng cục bộ hoạt động như thế nào với GitHub Actions?

Lấy tệp quy trình công việc được tạo tự động từ App Service làm ví dụ, mỗi tệp git push bắt đầu một quá trình xây dựng và triển khai mới. Từ một bản sao cục bộ của kho lưu trữ GitHub, bạn thực hiện các bản cập nhật mong muốn đẩy nó lên GitHub. Ví dụ:

git add .
git commit -m "<some-message>"
git push origin main

Làm cách nào để gỡ lỗi trong quá trình triển khai GitHub Actions?

Nếu một bước không thành công trong tệp quy trình công việc GitHub được tạo tự động, hãy thử sửa đổi lệnh không thành công để tạo đầu ra chi tiết hơn. Ví dụ: bạn có thể nhận được nhiều đầu ra hơn từ bất kỳ lệnh dotnet nào bằng cách thêm tùy chọn -v. Commit và push các thay đổi của bạn để kích hoạt một triển khai khác cho App Service.

Bước tiếp theo

Chuyển sang hướng dẫn tiếp theo để tìm hiểu cách bảo mật ứng dụng của bạn bằng miền và chứng chỉ tùy chỉnh.

 Bảo mật với tên miền và chứng chỉ tùy chỉnh

Hoặc, xem các tài nguyên khác:

Hướng dẫn: Kết nối với Cơ sở dữ liệu SQL từ Dịch vụ ứng dụng mà không cần bảo mật bằng cách sử dụng danh tính được quản lý

Định cấu hình ứng dụng ASP.NET Core đối với hosting platform là Windows

Định cấu hình ứng dụng ASP.NET Core đối với hosting platform là Linux

Nguồn: learn.microsoft.com
» Tiếp: Định cấu hình ứng dụng ASP.NET Core cho App Service Azure đối với hosting platform là Windows
« Trước: Triển khai ứng dụng web ASP.NET
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!