ASP.NET Core: Triển khai ứng dụng Cơ sở dữ liệu ASP.NET Core và Azure SQL cho App Service Azure
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:
- Tài khoản Azure có đăng ký đang hoạt động. Nếu chưa có tài khoản Azure, bạn có thể tạo một tài khoản miễn phí.
- Một tài khoản GitHub. bạn cũng có thể có được một tài khoản miễn phí.
Ứ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:
- Nhập "web app database" vào thanh tìm kiếm ở đầu cổng Azure.
- 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.
Bước 2. Trong trang Create Web App + Database, hãy điền vào biểu mẫu như sau.
- Resource Group → Chọn Create new và sử dụng tên msdocs-core-sql-tutorial.
- Region → Bất kỳ vùng Azure nào gần bạn.
- 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.
- Runtime stack → .NET 7 (STS).
- Add Azure Cache for Redis? → Yes.
- 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.
- 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.
- Chọn Review + create.
- Sau khi xác thực hoàn tất, hãy chọn Create.
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.
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.
Bước 2.
- 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.
- 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.
- 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
.
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:
- Đăng nhập vào tài khoản GitHub của bạn.
- Điều hướng đến https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.
- Chọn Fork.
- Chọn Create fork.
Bước 2. Trong trang App Service, ở menu bên trái, chọn Deployment Center.
Bước 3. Trong trang Deployment Center:
- 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.
- Đă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.
- Trong Organization, hãy chọn tài khoản của bạn.
- Trong Repository, chọn msdocs-app-service-sqldb-dotnetcore.
- Trong Branch bạn chọn main.
- 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
.
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 .
.
Bước 5. Trong Visual Studio Code trên trình duyệt:
- Mở DotNetCoreSqlDb/appsettings.json trong Explorer.
- Thay đổi tên chuỗi kết nối
MyDbConnection
thànhAZURE_SQL_CONNECTIONSTRING
, khớp với chuỗi kết nối được tạo trong App Service trước đó.
Bước 6.
- Mở DotNetCoreSqlDb/Program.cs trong Explorer.
- Trong phương thức
options.UseSqlServer
, hãy thay đổi tên chuỗi kết nốiMyDbConnection
thànhAZURE_SQL_CONNECTIONSTRING
. Đây là nơi chuỗi kết nối được sử dụng bởi ứng dụng mẫu. - 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ụngAZURE_REDIS_CONNECTIONSTRING
từ trước đó.
builder.Services.AddStackExchangeRedisCache(options => { options.Configuration = builder.Configuration["AZURE_REDIS_CONNECTIONSTRING"]; options.InstanceName = "SampleInstance"; });
Bước 7.
- 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.
- Dưới bước
dotnet publish
, bạn thêm bước cài đặt công cụ Entity Framework Core bằng lệnhdotnet tool install -g dotnet-ef
. - 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.
Bước 8.
- Chọn phần mở rộng Source Control.
- Trong hộp văn bản, nhập thông báo commit dạng:
Configure DB & Redis & add migration bundle
. - Chọn Commit and Push.
Bước 9. Quay lại trang Deployment Center trong cổng Azure:
- 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.
- 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.
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.
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.
Bước 2. Trong teriminal SSH:
- Chạy
cd /home/site/wwwroot
. Đây là tất cả các tệp đã triển khai của bạn. - 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ì.
V. Duyệt đến ứng dụng
Bước 1. Trong trang App Service:
- Từ menu bên trái, chọn Overview.
- 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
.
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.
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:
- Từ menu bên trái, chọn App Service logs.
- Trong Application logging bạn chọn File System.
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.
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:
- Nhập tên nhóm tài nguyên.
- Chọn nhóm tài nguyên.
Bước 2. Trong trang nhóm tài nguyên, chọn Delete resource group.
Bước 3.
- Nhập tên nhóm tài nguyên để xác nhận việc xóa của bạn.
- Chọn Delete.
Các câu hỏi thường gặp
- Chi phí thiết lập này là bao nhiêu?
- 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?
- Phát triển ứng dụng cục bộ hoạt động như thế nào với GitHub Actions?
- Làm cách nào để gỡ lỗi trong quá trình triển khai GitHub Actions?
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èmsqlcmd
, 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:
Đị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