Aracılığıyla paylaş


Eğitim: Bir ASP.NET Core ve Azure SQL Veritabanı uygulamasını Azure Uygulama Hizmeti'ne dağıtın

Bu öğreticide, veri odaklı bir ASP.NET Core uygulamasını Azure App Service üzerine nasıl dağıtacağınızı ve bir Azure SQL Veritabanına nasıl bağlanacağınızı öğrenirsiniz. Ayrıca, uygulamanızdaki önbellekleme kodunu etkinleştirmek için bir Azure Cache for Redis dağıtacaksınız. Azure App Service, Windows veya Linux üzerinde kolayca uygulama dağıtabilen, yüksek ölçekte ölçeklenebilir, kendi kendine yamalayabilen bir web barındırma hizmetidir. Bu öğretici bir ASP.NET Core 8.0 uygulaması kullansa da, süreç diğer ASP.NET Core sürümleri için de aynıdır.

Bu eğitimde şunları öğreniyorsunuz:

  • Varsayılan olarak güvenli bir Uygulama Hizmeti, SQL Veritabanı ve Redis önbellek mimarisi oluşturun.
  • Yönetilen kimlik ve Key Vault referanslarını kullanarak bağlantı sırlarının güvenliğini sağlama.
  • GitHub deposundan App Service'e örnek bir ASP.NET Core uygulaması dağıtın.
  • Uygulama kodunda App Service bağlantı dizelerini ve uygulama ayarlarını erişin.
  • Güncellemeler yapın ve uygulama kodunu yeniden dağıtın.
  • Veritabanı şemasını oluşturmak için bir geçiş paketi yükleyin.
  • Azure'dan tanılama günlüklerini aktarın.
  • Azure portalında uygulamayı yönetin.
  • Aynı mimariyi sağlamak ve Azure Developer CLI kullanarak dağıtım yapmak.
  • Geliştirme iş akışınızı GitHub Codespaces ve GitHub Copilot ile optimize edin.

Önkoşullar

Sonuna geç

Bu öğreticideki örnek uygulamayı yalnızca Azure'da çalışırken görmek istiyorsanız, Azure Cloud Shell'de aşağıdaki komutları çalıştırmanız ve istemi izlemeniz gerekir:

dotnet tool install --global dotnet-ef
mkdir msdocs-app-service-sqldb-dotnetcore
cd msdocs-app-service-sqldb-dotnetcore
azd init --template msdocs-app-service-sqldb-dotnetcore
azd up

1. Örneği çalıştır

Öncelikle, başlangıç noktası olarak veri odaklı bir örnek uygulamayı kuruyorsunuz. Kolaylığınız için, örnek depo bir geliştirme konteyneri yapılandırması içerir. Geliştirme konteyneri, bir uygulama geliştirmek için gereken her şeyi içerir; buna veritabanı, önbellek ve örnek uygulamanın ihtiyaç duyduğu tüm çevre değişkenleri dahildir. Geliştirme konteyneri, bir GitHub codespace'de çalıştırılabilir, bu da örneği web tarayıcısı olan herhangi bir bilgisayarda çalıştırabileceğiniz anlamına gelir.

Adım 1: Yeni bir tarayıcı penceresinde:

  1. GitHub hesabınıza giriş yapın.
  2. https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore/fork'a gidin.
  3. "Ana dalı yalnızca kopyala seçeneğinin işaretini kaldırın." Tüm dalları istiyorsun.
  4. Çatal oluştur'u seçin.

Adım 2: GitHub fork'u içinde:

  1. main>starter-no-infra'yı starter dalı için seç. Bu dal yalnızca örnek projeyi içerir ve Azure ile ilgili dosyalar veya yapılandırma içermez.
  2. Code>Codespaces>Starter-no-infra üzerinde kod alanı oluştur'u seçin. Kod alanının kurulumu birkaç dakika sürer.

Adım 3: Codespace terminalinde:

  1. Veritabanı geçişlerini dotnet ef database update ile çalıştırın.
  2. Uygulamayı dotnet run ile çalıştır.
  3. Bildirimi gördüğünüzde Your application running on port 5093 is available., Taratıcıda Aç seçeneğini belirleyin. Örnek uygulamayı yeni bir tarayıcı sekmesinde görmeniz gerekir. Uygulamayı durdurmak için yazın Ctrl+C.

İpucu

Bu depo hakkında GitHub Copilot'a sorabilirsiniz. Örneğin:

  • @workspace Bu proje ne yapar?
  • @workspace .devcontainer klasörü ne işe yarar?

Sorun mu yaşıyorsunuz? Sorun Giderme bölümünü kontrol edin.

2. Uygulama Hizmeti, veritabanı ve önbellek oluşturun

Bu adımda, Azure kaynaklarını oluşturursunuz. Bu öğreticide kullanılan adımlar, varsayılan olarak güvenli bir dizi kaynak oluşturur ve bunlar App Service, Azure SQL Veritabanı ve Azure Cache'i içerir. Oluşturma süreci için belirteceksiniz:

  • Web uygulaması için Ad. Uygulamanızın DNS adının bir parçası olarak kullanılır.
  • Uygulamayı dünyada fiziksel olarak çalıştırmak için Bölge. Uygulamanız için DNS adının bir parçası olarak da kullanılır.
  • Uygulama için Runtime stack. Uygulamanız için kullanacağınız .NET sürümünü seçtiğiniz yerdir.
  • Uygulama için Hosting planı. Uygulamanız için özellik seti ve ölçeklenebilirlik kapasitesini içeren fiyatlandırma katmanıdır.
  • Uygulama için Kaynak Grubu. Bir kaynak grubu, uygulama için gereken tüm Azure kaynaklarını (mantıksal bir konteyner içinde) gruplamanıza olanak tanır.

Azure portalında oturum açın ve Azure Uygulaması Hizmeti kaynaklarınızı oluşturmak için bu adımları izleyin.

Adım 1: Azure portalında:

  1. Üstteki arama çubuğuna app service yazın.
  2. Hizmetler başlığı altında App Service etiketli öğeyi seçin.
  3. Web Uygulaması Oluştur'u> seçin. Ayrıca oluşturma sihirbazına doğrudan gidebilirsiniz.

2. Adım:Web Uygulaması Oluştur sayfasında formu aşağıdaki gibi doldurun.

  1. Ad: msdocs-core-sql-XYZ. Sizin için msdocs-core-sql-XYZ_group adlı bir kaynak grubu oluşturulur.
  2. Çalışma zamanı yığını: .NET 8 (LTS).
  3. İşletim Sistemi: Linux.
  4. Bölge: tercih ettiğiniz bölge.
  5. Linux Planı: Yeni oluşturun ve msdocs-core-sql-XYZ adını kullanın.
  6. Fiyatlandırma planı: Temel B1. Hazır olduğunuzda ölçeği farklı bir fiyatlandırma katmanına artırabilirsiniz.

Adım 3:

  1. Veritabanı sekmesini seçin.
  2. Veritabanı Oluştur'u seçin.
  3. Altyapı'daSQLAzure'ı seçin.
  4. Redis için Azure Cache oluştur'u seçin.
  5. Ad alanına (Önbellek'in altında), önbellek için bir ad girin.
  6. SKU'daTemel'i seçin.

4. Adım:

  1. Dağıtım sekmesini seçin.
  2. Sürekli dağıtımı etkinleştirin.
  3. Kuruluş'ta GitHub diğer adınızı seçin.
  4. Depo'damsdocs-app-service-sqldb-dotnetcore öğesini seçin.
  5. Branch'testarter-no-infra'yı seçin.
  6. Temel kimlik doğrulamasının devre dışı olduğundan emin olun.
  7. Seçin, gözden geçir ve oluştur.
  8. Doğrulama tamamlandıktan sonra Oluştur'u seçin.

5. Adım: Dağıtımın tamamlanması birkaç dakika sürer. Dağıtım tamamlandığında, Kaynağa git butonunu seçin. Doğrudan App Service uygulamasına yönlendirilirsiniz, ancak aşağıdaki kaynaklar oluşturulur:

  • Kaynak grubu: Oluşturulan tüm kaynaklar için bir kap.
  • App Service plan: App Hizmetleri için hesaplama kaynaklarını tanımlar. Temel seviyede bir Linux planı oluşturuldu.
  • Uygulama Hizmeti: Uygulamanızı temsil eder ve Uygulama Hizmeti planında çalışır.
  • Sanal ağ: Uygulama Hizmeti uygulaması ile entegre edilir ve arka uç ağ trafiğini izole eder.
  • Özel uç noktalar: Sanal ağdaki anahtar kasası, veritabanı sunucusu ve Redis önbelleği için erişim uç noktaları.
  • Ağ arabirimleri: Özel uç noktaların her biri için bir tane olan özel IP adreslerini temsil eder.
  • Azure SQL Database sunucusu: Sadece kendi özel uç noktası üzerinden erişilebilir.
  • Azure SQL Veritabanı: Sunucuda sizin için bir veritabanı ve bir kullanıcı oluşturulur.
  • Azure Cache for Redis: Yalnızca özel uç noktasının arkasından erişilebilir.
  • Anahtar kasası: Yalnızca özel uç noktasının arkasından erişilebilir. App Servis uygulaması için sırları yönetmek amacıyla kullanılır.
  • Özel DNS bölgeleri: Sanal ağda anahtar kasası, veritabanı sunucusu ve Redis önbelleğinin DNS çözümlemesini etkinleştirin.

3. Güvenli bağlantı sırları

Oluşturma sihirbazı, sizin için bağlantı değişkenini zaten .NET bağlantı dizileri ve uygulama ayarları olarak oluşturdu. Ancak, güvenlikle ilgili en iyi uygulama, sırları App Service'ten tamamen uzak tutmaktır. Sırlarınızı bir anahtar kasasına taşıyacak ve uygulama ayarlarınızı Anahtar Kasası referansları ile değiştireceksiniz, tüm bunlar Servis Bağlayıcıları'nın yardımıyla gerçekleşecek.

İpucu

Parolasız kimlik doğrulama kullanmak için, SQL Veritabanı bağlantısını yönetilen bir kimlik kullanacak şekilde nasıl değiştiririm? konusuna bakın.

1. Adım: Mevcut bağlantı dizesi alma

  1. App Service sayfasının sol menüsünde Ayarlar > Çevresel değişkenler > Bağlantı dizeleri'ni seçin.
  2. Seç AZURE_SQL_CONNECTIONSTRING.
  3. Bağlantı dizesini Ekle/Düzenle kısmında, Değer alanında, dize sonunda bulunan Password= kısmını bulun.
  4. Password= ardından gelen parola dizgisini daha sonra kullanmak üzere kopyalayın. Bu bağlantı dizesi, özel bir ağ noktası arkasında güvence altına alınmış SQL veritabanına bağlanmanızı sağlar. Ancak gizli bilgiler doğrudan App Service uygulamasına kaydedilir ve bu en uygun olanı değildir. Benzer şekilde, Uygulama ayarları sekmesindeki Redis önbellek bağlantı dizesi bir sır içerir. Bunu değiştireceksin.

2. Adım: Gizli bilgilerin güvenli yönetimi için anahtar kasası oluşturun

  1. Üst arama çubuğuna "key vault" yazın, ardından Pazaryeri>Key Vault'u seçin.
  2. Kaynak Grubu'ndamsdocs-core-sql-XYZ_group öğesini seçin.
  3. Anahtar kasası adı bölümüne yalnızca harflerden ve rakamlardan oluşan bir ad yazın.
  4. "Bölge'yi, kaynak grubuyla aynı konuma ayarlayın."

3. Adım: Anahtar kasasını özel uç nokta ile güvence altına alma

  1. Bağlantı sekmesini seçin.
  2. Genel erişimi etkinleştir'in seçimini kaldırın.
  3. Özel uç nokta oluştur'u seçin.
  4. Kaynak grubundamsdocs-core-sql-XYZ_group öğesini seçin.
  5. İletişim kutusundaki Konum'da App Service uygulamanızla aynı konumu seçin.
  6. Ad alanına msdocs-core-sql-XYZVvaultEndpoint yazın.
  7. Konum bölümünde App Service uygulamanızla aynı konumu seçin.
  8. Sanal ağ'da, msdocs-core-sql-XYZ_group grubunda sanal ağı seçin.
  9. Alt ağ'da kullanılabilir uyumlu alt ağı seçin. Web Uygulaması sihirbazı bunu sizin için oluşturmuştur.
  10. Tamam'ı seçin.
  11. İnceleme + oluşturma öğesini seçin, ardından Oluştur öğesini seçin. Anahtar kasası dağıtımının tamamlanmasını bekleyin. "Dağıtımınız tamamlandı." yazısını görmelisiniz.

4. Adım:

  1. Üst arama çubuğuna msdocs-core-sql yazın ve ardından msdocs-core-sql-XYZ adlı App Service kaynağını yazın.
  2. Uygulama Hizmeti sayfasında, sol menüden Ayarlar > Servis Bağlayıcısı'nı seçin. Uygulama oluşturma sihirbazı sizin için zaten iki bağlayıcı oluşturdu.
  3. SQL Veritabanı bağlayıcısının yanındaki onay kutusunu seçin, ardından Düzenle'yi seçin.
  4. Kimlik Doğrulaması sekmesini seçin.
  5. Şifre bölümüne, daha önce kopyaladığınız şifreyi yapıştırın.
  6. Sırları Anahtar Kasasında Sakla seçeneğini seçin.
  7. Key Vault Bağlantısı altında, Yenisi oluştur'u seçin. Bir Bağlantı oluştur diyalog kutusu, düzenleme diyalog kutusunun üzerine açılır.

5. Adım: Key Vault bağlantısını kurma

  1. Key Vault bağlantısı için bağlantı oluştur iletişim kutusunda, Key Vault'ta daha önce oluşturduğunuz anahtar kasasını seçin.
  2. Gözden geçir + Oluştur’u seçin.
  3. Doğrulama tamamlandığında, Oluştur'u seçin.

Adım 6: SQL Veritabanı bağlayıcı ayarlarını sonlandırın

  1. defaultConnector için düzenleme iletişim kutusuna geri dönüldü. Kimlik Doğrulama sekmesinde, anahtar kasası bağlayıcısının oluşturulmasını bekleyin. Tamamlandığında, Anahtar Kasası Bağlantısı açılır menüsü otomatik olarak bunu seçer.
  2. Seç Next: Networking.
  3. Seçin Hedef hizmete erişimi etkinleştirmek için güvenlik duvarı kurallarını yapılandırın. Uygulama oluşturma sihirbazı, SQL veritabanını özel bir uç nokta ile zaten güvence altına aldı.
  4. Kaydetseçeneğini seçin. "Güncelleme başarılı" bildirimi görünene kadar bekleyin.

7. Adım: Redis bağlayıcısını Key Vault gizli dizilerini kullanacak şekilde yapılandırma

  1. Hizmet Bağlayıcısı sayfasında, Redis için Cache bağlayıcısının yanındaki onay kutusunu ve ardından Düzenle'yi seçin.
  2. Kimlik Doğrulaması sekmesini seçin.
  3. Sırları Anahtar Kasasında Sakla seçeneğini seçin.
  4. Anahtar Kasası Bağlantısı altında, oluşturduğunuz anahtar kasasını seçin.
  5. Seç Next: Networking.
  6. Seçin Hedef hizmete erişimi etkinleştirmek için güvenlik duvarı kurallarını yapılandırın.
  7. Kaydetseçeneğini seçin. "Güncelleme başarılı" bildirimi görünene kadar bekleyin.

8. Adım: Key Vault tümleştirmesini doğrulama

  1. Sol menüden Ayarlar > Ortam değişkenleri > Bağlantı dizeleri yeniden seçin.
  2. AZURE_SQL_CONNECTIONSTRING'in yanındaki Değeri göster seçeneğini seçin. Değer @Microsoft.KeyVault(...) olmalıdır, bu da anahtar kasası referansı olduğu anlamına gelir çünkü gizli bilgi artık anahtar kasasında yönetilmektedir.
  3. Redis bağlantı dizesini doğrulamak için Uygulama ayarı sekmesini seçin. AZURE_REDIS_CONNECTIONSTRING'nin yanında Değeri göster'i seçin. Değer @Microsoft.KeyVault(...) olmalı.

Özetlemek gerekirse, bağlantı sırlarınızın güvenliğini koruma işlemi şunları içerir:

  • App Service uygulamasının ortam değişkenlerinden bağlantı gizli bilgilerini alma.
  • Anahtar kasası oluşturma.
  • Sistem tarafından atanan yönetilen kimlikle Key Vault bağlantısı oluşturma.
  • Gizli bilgileri anahtar kasasında depolamak için hizmet bağlayıcılarını güncelleme.

4. Örnek kodu dağıtma

Bu adımda, GitHub Actions kullanarak GitHub dağıtımını yapılandırırsınız. App Service'e dağıtım yapmanın birçok yolundan sadece biri olup, dağıtım sürecinizde sürekli entegrasyonu sağlamak için harika bir yol. Varsayılan olarak, GitHub deponuza her git push eklendiğinde derleme ve dağıtma işlemi başlatılır.

1. Adım: Örnek çatalınızın GitHub kod alanında git pull origin starter-no-infra çalıştırmak için geri dönün. Bu, yeni yüklenen iş akışı dosyasını kod alanınıza çeker.

2. Adım (Seçenek 1: GitHub Copilot ile):

  1. Yeni bir sohbet oturumu başlatmak için Sohbet görünümünü seçin, ardından + öğesine tıklayın.
  2. "@workspace Uygulama veritabanına ve önbelleğe nasıl bağlanır? " Copilot, sınıfı ve MyDatabaseContext nasıl yapılandırıldığı hakkında size bazı açıklamalar verebilir.
  3. "Üretim modunda, uygulamanın veritabanı için AZURE_SQL_CONNECTIONSTRING adlı bağlantı dizesini ve AZURE_REDIS_CONNECTIONSTRING adlı uygulama ayarını kullanmasını istiyorum. Copilot, aşağıdaki 2. Seçenek: GitHub Copilot olmadan adımlarına benzer bir kod önerisi verebilir ve hatta Program.cs dosyasında değişiklik yapmanızı bile söyleyebilir.
  4. Gezginde Program.cs'yi açın ve kod önerisini ekleyin. GitHub Copilot her seferinde aynı yanıtı vermez ve her zaman doğru değildir. Yanıtını hassaslaştırmak için daha fazla soru sormanız gerekebilir. İpuçları için bkz. Kod alanımda GitHub Copilot ile ne yapabilirim?.

2. Adım (Seçenek 2: GitHub Copilot olmadan):

  1. Gezginde Program.cs dosyasını aç.
  2. Yorum satırına alınmış kodu (satırlar 12-21) bulun ve yorum satırından çıkarın. Bu kod, AZURE_SQL_CONNECTIONSTRING kullanarak veritabanına ve uygulama ayarı AZURE_REDIS_CONNECTIONSTRING kullanarak Redis önbelleğine bağlanır.

3. Adım (Seçenek 1: GitHub Copilot ile):

  1. Gezginde .github/workflows/starter-no-infra_msdocs-core-sql-XYZ'yi açın. Bu dosya, Uygulama Hizmeti oluşturma sihirbazı tarafından oluşturuldu.
  2. Adımı vurgulayın dotnet publish ve seçin .
  3. Ask Copilot, "Öncelikle dotnet ef'i yükle, ardından aynı çıktı klasöründe bir göç paketini oluştur."
  4. Öneri kabul edilebilirse Kabul Et'i seçin. GitHub Copilot her seferinde aynı yanıtı vermez ve her zaman doğru değildir. Yanıtını hassaslaştırmak için daha fazla soru sormanız gerekebilir. İpuçları için bkz. Kod alanımda GitHub Copilot ile ne yapabilirim?.

3. Adım (Seçenek 2: GitHub Copilot olmadan):

  1. Gezginde .github/workflows/starter-no-infra_msdocs-core-sql-XYZ'yi açın. Bu dosya, Uygulama Hizmeti oluşturma sihirbazı tarafından oluşturuldu.
  2. dotnet publish adımının altında, Entity Framework Core aracı'nı yüklemek için bir adım dotnet tool install -g dotnet-ef --version 8.* komutuyla ekleyin.
  3. Yeni adımın altında, dağıtım paketinde bir veritabanı göç paketi oluşturmak için başka bir adım ekleyin: dotnet ef migrations bundle --runtime linux-x64 -o ${{env.DOTNET_ROOT}}/myapp/migrationsbundle. Geçiş paketi, .NET SDK'sı gerekmeden üretim ortamında çalıştırabileceğiniz bağımsız bir yürütülebilir dosyadır. App Service Linux konteyneri yalnızca .NET çalışma zamanı içeriyor, .NET SDK'yi içermiyor.

4. Adım:

  1. Kaynak Denetimi uzantısını seçin.
  2. Metin kutusuna, Configure Azure database and cache connections gibi bir taahhüt mesajı yazın. Veya öğesini seçin ve GitHub Copilot'un sizin için bir taahhüt mesajı oluşturmasına izin verin.
  3. İşle'yi seçin, ardından Evet ile onaylayın.
  4. "Değişiklikleri Senkronize Et 1'i seçin, ardından TAMAM ile onaylayın."

5. Adım: Azure portalında Dağıtım Merkezi sayfasına geri dönün:

  1. Günlükler sekmesini seçin, ardından yeni dağıtım çalışmasını görmek için Yenile butonuna tıklayın.
  2. Dağıtım çalıştırması için günlük öğesinde, en son zaman damgasına sahip Build/Deploy Logs girişini seçin.

6. Adım: GitHub deponuza yönlendirilirsiniz ve GitHub eyleminin çalıştığını görürsünüz. İş akışı dosyası, yapı ve dağıtım olmak üzere iki ayrı aşamayı tanımlar. GitHub çalışmasının Başarı durumunu göstermesini bekleyin. Yaklaşık 5 dakika sürer.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümünü kontrol edin.

5. Veritabanı şeması oluştur

SQL veritabanı sanal ağ tarafından korunduğunda, dotnet database migrations çalıştırmanın en kolay yolu, App Service içindeki Linux konteyner ile bir SSH oturumu yapmaktır.

1. Adım: App Service sayfasına geri dönün, soldaki menüden

  1. Geliştirme Araçları
  2. Git'i seçin. (Başlatma işlemi birkaç dakika sürer.)

Adım 2: SSH oturumunda:

  1. Çalıştır cd /home/site/wwwroot. İşte tüm dağıtılmış dosyalarınız.
  2. GitHub iş akışının oluşturduğu geçiş paketini, ./migrationsbundle -- --environment Production komutunu kullanarak çalıştırın. Eğer başarılı olursa, App Service SQL Veritabanı'na başarılı bir şekilde bağlanıyor. Unutmayın, --environment ProductionProgram.cs dosyasında yaptığınız kod değişikliklerine karşılık geliyor.

SSH oturumu sırasında, yalnızca /home içindeki dosyalardaki değişiklikler uygulama yeniden başlatıldıktan sonra kalıcı olabilir. /home dışındaki değişiklikler saklanmaz.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümünü kontrol edin.

6. Uygulamaya göz atın

1. Adım: App Service sayfasında:

  1. Sol menüden Genel Bakış'ı seçin.
  2. Uygulamanızın URL'sini seçin.

2. Adım: Listeye birkaç görev ekleyin. Azure App Service ile Azure SQL Veritabanı'na güvenli bağlantı sağlayarak bir web uygulaması çalıştırıyorsunuz, tebrikler.

İpucu

Örnek uygulama, cache-aside desenini gerçekleştirir. Bir veri görünümünü ikinci kez ziyaret ettiğinizde veya veri değişiklikleri yaptıktan sonra aynı sayfayı yeniden yüklediğinizde, web sayfasındaki İşleme süresi çok daha hızlı görünür çünkü veriler veritabanı yerine önbellekten yüklenmektedir.

7. Tanı günlüklerini akışla aktar

Azure Uygulaması Hizmeti, uygulamanızla ilgili sorunları tanılamanıza yardımcı olmak için tüm konsol günlüklerini yakalar. Örnek uygulama, bu yeteneği göstermek için her bir uç noktasında günlükleme kodu içerir.

1. Adım: App Service sayfasında:

  1. Sol menüden Monitoring>App Service logs'u seçin.
  2. Uygulama günlüğü altında, Dosya Sistemi seçin.
  3. Üst menüden Kaydet'i seçin.

Adım 2: Sol menüden Günlük akışı seçin. Uygulamanızın günlüklerini, platform günlükleri ve kapsayıcının içindeki günlükler de dahil olmak üzere görürsünüz.

8. Kaynakları Temizle

İşiniz bittiğinde, kaynak grubunu silerek Azure aboneliğinizdeki tüm kaynakları silebilirsiniz.

Adım 1: Azure portalının üst kısmındaki arama çubuğunda:

  1. Kaynak grup adını girin.
  2. Kaynak grubunu seçin.

Adım 2: Kaynak grubu sayfasında, Kaynak grubunu sil seçeneğini seçin.

Adım 3:

  1. Silme işleminizi onaylamak için kaynak grubu adını girin.
  2. 'ı seçin,'i silin.

2. Azure kaynakları oluşturun ve örnek bir uygulama dağıtın

Bu adımda, Azure kaynaklarını oluşturur ve örnek bir uygulamayı Linux üzerinde App Service’e dağıtırsınız. Bu eğiticide kullanılan adımlar, App Service, Azure SQL Database ve Azure Cache for Redis'i içeren ve varsayılan olarak güvenli kaynaklar oluşturur.

Geliştirme konteyneri zaten Azure Developer CLI (AZD)'ye sahiptir.

  1. Depo kök dizininden azd init çalıştır.

    azd init --template dotnet-app-service-sqldb-infra
    
  2. İstendiğinde aşağıdaki yanıtları verin:

    Soru Cevap
    Geçerli dizin boş değil. Burada '<your-directory>' konumunda bir proje başlatmak ister misiniz? Y
    Bu dosyalarla ne yapmak istersiniz? Mevcut dosyalarımı değiştirmeden tut
    Yeni bir ortam adı girin Eşsiz bir ad yazın. AZD şablonu, Azure'daki web uygulamanızın DNS adının bir parçası olarak bu adı kullanır (<app-name>-<hash>.azurewebsites.net). Alfanumerik karakterlere ve tirelere izin verilir.
  3. Azure'a azd auth login komutunu çalıştırarak ve istemi takip ederek giriş yapın.

    azd auth login
    
  4. Gerekli Azure kaynaklarını oluşturun ve azd up komutuyla uygulama kodunu dağıtın. İstenilen abonelik ve Azure kaynakları için konumu seçmek üzere istemi takip edin.

    azd up
    

    azd up komutu tamamlanması yaklaşık 15 dakika sürer (Redis önbelleği en fazla zamanı alır). Uygulama kodunuzu derler ve dağıtır, ancak daha sonra kodunuzu App Service ile çalışacak şekilde değiştireceksiniz. Çalışırken, komut, Azure'daki dağıtım bağlantısı dahil olmak üzere, sağlama ve dağıtım süreci hakkında mesajlar sağlar. Bittiğinde, komut ayrıca dağıtım uygulamasına bir bağlantı görüntüler.

    Bu AZD şablonu, varsayılan olarak güvenli bir mimari oluşturmak için gerekli dosyaları (azure.yaml ve infra dizini) içermektedir ve aşağıdaki Azure kaynaklarını içermektedir.

    • Kaynak grubu: Oluşturulan tüm kaynaklar için bir kap.
    • App Service plan: App Hizmetleri için hesaplama kaynaklarını tanımlar. Temel seviyede bir Linux planı oluşturuldu.
    • Uygulama Hizmeti: Uygulamanızı temsil eder ve Uygulama Hizmeti planında çalışır.
    • Sanal ağ: Uygulama Hizmeti uygulaması ile entegre edilir ve arka uç ağ trafiğini izole eder.
    • Özel uç noktalar: Sanal ağdaki anahtar kasası, veritabanı sunucusu ve Redis önbelleği için erişim uç noktaları.
    • Ağ arabirimleri: Özel uç noktaların her biri için bir tane olan özel IP adreslerini temsil eder.
    • Azure SQL Database sunucusu: Sadece kendi özel uç noktası üzerinden erişilebilir.
    • Azure SQL Veritabanı: Sunucuda sizin için bir veritabanı ve bir kullanıcı oluşturulur.
    • Azure Cache for Redis: Yalnızca özel uç noktasının arkasından erişilebilir.
    • Anahtar kasası: Yalnızca özel uç noktasının arkasından erişilebilir. App Servis uygulaması için sırları yönetmek amacıyla kullanılır.
    • Özel DNS bölgeleri: Sanal ağda anahtar kasası, veritabanı sunucusu ve Redis önbelleğinin DNS çözümlemesini etkinleştirin.

    Komut, kaynakları oluşturup uygulama kodunu ilk kez dağıtmayı bitirdiğinde, dağıtılan örnek uygulama henüz çalışmaz çünkü Azure'daki veritabanına bağlanması için küçük değişiklikler yapmanız gerekir.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümünü kontrol edin.

3. Bağlantı dizilerini doğrulayın

İpucu

Varsayılan SQL veritabanı bağlantı dizesi, SQL kimlik doğrulaması kullanır. Daha güvenli, parolasız kimlik doğrulama için, SQL Veritabanı bağlantısını yönetilen bir kimlik kullanacak şekilde nasıl değiştiririm? kısmına bakın.

Kullandığınız AZD şablonu, bağlantı değişkenlerini sizin için zaten uygulama ayarları olarak oluşturdu ve bunları kolaylığınız için terminale çıktı olarak verdi. Uygulama ayarları, bağlantı sırlarını kod havuzunuzdan uzak tutmanın bir yoludur.

  1. AZD çıkışında, ayarları AZURE_SQL_CONNECTIONSTRING ve AZURE_REDIS_CONNECTIONSTRING bulun. Yalnızca ayar adları gösterilir. Bunlar AZD çıktısında şöyle görünür:

     App Service app has the following connection strings:
         - AZURE_SQL_CONNECTIONSTRING
         - AZURE_REDIS_CONNECTIONSTRING
         - AZURE_KEYVAULT_RESOURCEENDPOINT
         - AZURE_KEYVAULT_SCOPE
     

    AZURE_SQL_CONNECTIONSTRING, Azure'daki SQL Veritabanına olan bağlantı dizgesini içerir ve AZURE_REDIS_CONNECTIONSTRING, Azure Redis önbelleğine olan bağlantı dizgesini içerir. Kodu yazarken bunları kullanmanız gerekiyor.

  2. Kolaylığınız için, AZD şablonu uygulamanın ayarları sayfasına doğrudan bağlantıyı gösterir. Bağlantıyı bulun ve yeni bir tarayıcı sekmesinde açın.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümünü kontrol edin.

4. Örnek kodu değiştirin ve yeniden dağıtın

  1. GitHub kod alanında yeni bir sohbet oturumu başlatmak için Chat görünümünü seçin, ardından +'i seçin.

  2. "@workspace Uygulama veritabanına ve önbelleğe nasıl bağlanır? " Copilot, sınıfı ve MyDatabaseContext nasıl yapılandırıldığı hakkında size bazı açıklamalar verebilir.

  3. "Üretim modunda, uygulamanın veritabanı için AZURE_SQL_CONNECTIONSTRING adlı bağlantı dizesini ve AZURE_REDIS_CONNECTIONSTRING* adlı uygulama ayarını kullanmasını istiyorum. Copilot, aşağıdaki 2. Seçenek: GitHub Copilot olmadan adımlarına benzer bir kod önerisi verebilir ve hatta Program.cs dosyasında değişiklik yapmanızı bile söyleyebilir.

  4. Gezginde Program.cs'yi açın ve kod önerisini ekleyin.

    GitHub Copilot her seferinde aynı yanıtı vermez ve her zaman doğru değildir. Yanıtını hassaslaştırmak için daha fazla soru sormanız gerekebilir. İpuçları için bkz. Kod alanımda GitHub Copilot ile ne yapabilirim?.

Bu değişiklikleri dağıtmadan önce, bir geçiş paketi oluşturmanız gerekiyor.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümünü kontrol edin.

5. Veritabanı şeması oluştur

Sanal ağ tarafından korunan SQL Veritabanı ile, veritabanı geçişlerini çalıştırmanın en kolay yolu, App Service konteyneri ile bir SSH oturumunda olmaktır. .NET SDK, App Service Linux kapsayıcılarında mevcut olmadığından, veritabanı geçişlerini çalıştırmanın en kolay yolu, kendi başına yeterli bir geçiş paketi yüklemektir.

  1. Projeniz için bir göç paketi oluşturmak üzere aşağıdaki komutu kullanın:

    dotnet ef migrations bundle --runtime linux-x64 -o migrationsbundle
    

    İpucu

    Örnek uygulama (bkz. DotNetCoreSqlDb.csproj), bu migrationsbundle dosyasını içerecek şekilde yapılandırılmıştır. Aşama azd package sırasında, migrationsbundle deploy paketine eklenecek.

  2. Tüm değişiklikleri azd up ile dağıt.

    azd up
    
  3. AZD çıkışında SSH oturumunun URL'sini bulun ve tarayıcıda açın. Çıkışta bu şekilde görünüyor:

     Open SSH session to App Service container at: <URL>
     
  4. SSH oturumunda, aşağıdaki komutları çalıştırın:

    cd /home/site/wwwroot
    ./migrationsbundle -- --environment Production
    

    Başarılı olursa, App Service veritabanına başarılı bir şekilde bağlanıyor demektir. Unutmayın, --environment ProductionProgram.cs dosyasında yaptığınız kod değişikliklerine karşılık geliyor.

    Uyarı

    Yalnızca /home içindeki dosyalarda yapılan değişiklikler uygulama yeniden başlatmalarının ötesinde kalıcılık gösterebilir. /home dışındaki değişiklikler saklanmaz.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümünü kontrol edin.

6. Uygulamaya göz atın

  1. AZD çıktısında, uygulamanızın URL'ini bulun ve tarayıcıda bu URL'ye gidin. AZD çıktısındaki URL şöyle görünür:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: <URL>
     
  2. Listeye birkaç görev ekleyin.

    Azure'da çalışan, görevleri gösteren bir SQL Veritabanına sahip ASP.NET Core web uygulamasının ekran görüntüsü.

    Azure App Service ile Azure SQL Veritabanı'na güvenli bağlantı sağlayarak bir web uygulaması çalıştırıyorsunuz, tebrikler.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümünü kontrol edin.

7. Tanı günlüklerini akışla aktar

Azure App Service, uygulamanızdaki sorunları teşhis etmenize yardımcı olmak için konsol günlüklerini yakalayabilir. Kolaylık olması için AZD şablonu yerel dosya sistemine günlük kaydetmeyi zaten etkinleştirdi ve günlükleri Log Analytics çalışma alanına iletiyor.

Örnek uygulama, bu özelliği göstermek için standart günlük kaydı ifadelerini içerir, aşağıdaki parçacıkta gösterildiği gibi:

public async Task<IActionResult> Index()
{
    var todoItems = await _cache.GetAsync(_TodoItemsCacheKey);
    if (todoItems != null)
    {
        _logger.LogInformation("Data from cache.");
        var todoList = JsonConvert.DeserializeObject<List<Todo>>(Encoding.UTF8.GetString(todoItems));
        return View(todoList);
    }
    else
    {
        _logger.LogInformation("Data from database.");
        var todoList = await _context.Todo.ToListAsync();
        var serializedTodoList = JsonConvert.SerializeObject(todoList);
        await _cache.SetAsync(_TodoItemsCacheKey, Encoding.UTF8.GetBytes(serializedTodoList));
        return View(todoList);
    }
}

AZD çıktısında, App Service günlüklerini yayınlamak için bağlantıyı bulun ve tarayıcıda o bağlantıya gidin. Bağlantı AZD çıktısında bu şekilde görünüyor:

Stream App Service logs at: <URL>

.NET uygulamalarında günlük kaydını öğrenmek için Azure İzleyici'yi .NET, Node.js, Python ve Java uygulamaları için OpenTelemetry'yi etkinleştirme serisine göz atın.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümünü kontrol edin.

8. Kaynakları Temizle

Mevcut dağıtım ortamındaki tüm Azure kaynaklarını silmek için azd down komutunu çalıştırın ve yönlendirmeleri takip edin.

azd down

Sorun Giderme

Azure SQL Veritabanı için portal dağıtım görünümü, bir Çakışma durumu gösteriyor.

Aboneliğiniz ve seçtiğiniz bölgeye bağlı olarak, Azure SQL Veritabanı'nın dağıtım durumunu Conflict olarak görebilir ve İşlem detaylarında şu mesajı alabilirsiniz:

Location '<region>' is not accepting creation of new Windows Azure SQL Database servers at this time.

Seçtiğiniz bölge için aboneliğinizdeki bir limit nedeniyle bu hata büyük olasılıkla oluşuyor. Dağıtımınız için farklı bir bölge seçmeyi deneyin.

Azure portalında, web uygulaması için günlük akış arayüzü ağ hatalarını gösteriyor.

Şu hatayı görebilirsiniz:

Unable to open a connection to your app. This may be due to any network security groups or IP restriction rules that you have placed on your app. To use log streaming, please make sure you are able to access your app directly from your current network.

Bu genellikle uygulama ilk başlatıldığında geçici bir hatadır. Birkaç dakika bekleyin ve tekrar kontrol edin.

Tarayıcıdaki SSH oturumu gösteriyor SSH CONN CLOSED

Linux konteynerinin başlatılması birkaç dakika sürer. Birkaç dakika bekleyin ve tekrar kontrol edin.

Portal log akışı sayfası Connected! gösteriyor ama günlük yok

Tanılama günlüklerini yapılandırdıktan sonra uygulama yeniden başlatılır. Değişikliklerin tarayıcıda etkili olması için sayfayı yenilemeniz gerekebilir.

Sıkça Sorulan Sorular

Bu kurulumun maliyeti ne kadar?

Oluşturulan kaynakların fiyatlandırması aşağıdaki gibidir:

  • App Service planı Basic katmanında oluşturulur ve yukarı veya aşağı ölçeklenebilir. App Service fiyatlandırmasına bakın.
  • Azure SQL Veritabanı, genel amaçlı, sunucusuz katmanda, Standart serisi donanım üzerinde minimum çekirdek ile oluşturulur. Küçük bir maliyeti vardır ve diğer bölgelere dağıtılabilir. Maliyeti daha da azaltmak için maksimum boyutunu küçültebilir veya hizmet katmanı, hesaplama katmanı, donanım yapılandırması, çekirdek sayısı, veritabanı boyutu ve bölge yedekliliğini ayarlayarak ölçeğini genişletebilirsiniz. Bkz. Azure SQL Veritabanı fiyatlandırması.
  • Azure Cache for Redis Temel kademesinde minimum önbellek boyutuyla oluşturulmuştur. Bu seviyeye küçük bir maliyet eşlik eder. Daha yüksek erişilebilirlik, kümelenme ve diğer özellikler için performans seviyelerini daha yüksek seviyelere yükseltebilirsiniz. Azure Cache for Redis fiyatlandırmasını gör.
  • Sanal ağ, eşleştirme gibi ekstra işlevler yapılandırmadığınız sürece bir ücret getirmez. Bkz. Azure Sanal Ağ fiyatlandırması.
  • Özel DNS bölgesi küçük bir ücret gerektirir. Bkz. Azure DNS fiyatlandırması.

Azure SQL Veritabanı sunucusuna diğer araçlarla, sanal ağın arkasında güvende olan bir şekilde nasıl bağlanırım?

  • Komut satırı aracılığıyla temel erişim sağlamak için uygulamanın SSH terminalinden sqlcmd çalıştırabilirsiniz. Uygulamanın kapsayıcısı sqlcmd ile gelmez, bu yüzden onu manuel olarak kurmalısınız. Yüklenmiş istemcinin uygulama yeniden başlatıldığında kalıcı olmadığını unutmayın.
  • SQL Server Management Studio istemcisinden veya Visual Studio'dan bağlantı kurmak için makinenizin sanal ağ içerisinde olması gerekmektedir. Örneğin, alt ağlardan birine bağlı bir Azure Sanal Makinesi veya Azure sanal ağı ile site-to-site VPN bağlantısına sahip yerinde bir ağdaki bir makine olabilir.

Yerel uygulama geliştirme GitHub Actions ile nasıl çalışır?

Örnek olarak, App Service'den otomatik oluşturulan iş akışı dosyasını alın. Her git push yeni bir yapı ve dağıtım çalıştırmasını başlatır. GitHub deposunun yerel bir kopyasından, istediğiniz güncellemeleri yaparak bunları GitHub'a gönderirsiniz. Örneğin:

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

GitHub Actions dağıtımı sırasında hataları nasıl ayıklayabilirim?

Otomatik olarak oluşturulmuş GitHub iş akışı dosyasında bir adım başarısız olursa, daha ayrıntılı çıktı üretmek için başarısız olan komutu değiştirmeyi deneyin. Örneğin, herhangi bir dotnet komutundan daha fazla çıktı alabilirsiniz lâkin -v seçeneğini ekleyerek. Değişikliklerinizi kaydedin ve gönderin, böylece App Service'e bir başka dağıtımı tetikleyin.

Kullanıcı tarafından atanan kimlik oluşturma iznim yok

Dağıtım Merkezinden GitHub Actions dağıtımını ayarlayın.

SQL Veritabanı bağlantısını bir yönetilen kimlik kullanacak şekilde nasıl değiştiririm?

SQL veritabanına varsayılan bağlantı dizesi, defaultConnector adlı bir Service Connector tarafından yönetilir ve SQL kimlik doğrulaması kullanır. Yönlendirilmiş bir kimlik kullanan bir bağlantı ile değiştirmek için, yer tutucuları değiştirdikten sonra bulut kabuğunda aşağıdaki komutları çalıştırın:

az extension add --name serviceconnector-passwordless --upgrade
az sql server update --enable-public-network true
az webapp connection delete sql --connection defaultConnector --resource-group <group-name> --name <app-name>
az webapp connection create sql --connection defaultConnector --resource-group <group-name> --name <app-name> --target-resource-group <group-name> --server <database-server-name> --database <database-name> --client-type dotnet --system-identity --config-connstr true
az sql server update --enable-public-network false

Varsayılan olarak, az webapp connection create sql --client-type dotnet --system-identity --config-connstr komutu şu işlemleri yapar:

  • SQL veritabanı sunucusunda kullanıcıyı Microsoft Entra ID yöneticisi olarak ayarlar.
  • Sistemde atanmış bir yönetilen kimlik oluşturun ve ona veritabanına erişim izni verin.
  • Parolasız bağlantı dizesi olarak adlandırılan AZURE_SQL_CONNECTIONGSTRING oluşturur; bu, uygulamanızın öğreticinin sonunda zaten kullandığı bir özelliktir.

Artık uygulamanızın SQL veritabanına bağlantısı olmalı. Daha fazla bilgi için, Uygulama Hizmeti'nden Azure veritabanlarına yönetilen kimlik kullanarak sırlar olmadan bağlanma eğitimi bölümünü inceleyin.

İpucu

Ağ bağlantısını genel olarak etkinleştirmek istemiyor musunuz? Aboneliğinizde Sahip rol atamanız varsa, sanal ağınızla entegre edilmiş bir Azure bulut kabuğundan komutları çalıştırarak az sql server update --enable-public-network true 'yi atlayabilirsiniz.

Kimliğe, sanal ağ tarafından güvenli bir şekilde korunan veritabanına gerekli erişimi sağlamak için, az webapp connection create sql'nin veritabanı sunucusuna Entra ID kimlik doğrulaması ile doğrudan bağlantıya ihtiyacı vardır. Varsayılan olarak, Azure bulut kabuğu, ağ ile güvenli hale getirilmiş veritabanına bu erişime sahip değildir.

GitHub Copilot ile kod alanımda ne yapabilirim?

GitHub Copilot sohbet görünümünün, kod alanını oluşturduğunuzda sizin için zaten orada olduğunu fark etmiş olabilirsiniz. Kolaylık sağlamak için kapsayıcı tanımına GitHub Copilot sohbet uzantısını dahil ediyoruz (bkz . .devcontainer/devcontainer.json). Ancak, bir GitHub Copilot hesabına ihtiyacınız vardır (30 günlük ücretsiz deneme sürümü kullanılabilir).

GitHub Copilot ile konuşurken size birkaç ipucu:

  • Tek bir sohbet oturumunda, sorular ve cevaplar birbirine dayanır ve alacağınız cevabı hassaslaştırmak için sorularınızı ayarlayabilirsiniz.
  • Varsayılan olarak, GitHub Copilot'un deponuzdaki herhangi bir dosyaya erişimi yoktur. Bir dosya hakkında soru sormak için, dosyayı önce editörde açın.
  • GitHub Copilot'ın yanıtlarını hazırlarken depodaki tüm dosyalara erişim sağlaması için, sorunuzu @workspace ile başlayarak başlatın. Daha fazla bilgi için bkz. Use the @workspace agent.
  • Sohbet oturumunda, GitHub Copilot değişiklikler önerebilir ve değişikliklerin nerede yapılacağını da (c0 ile) gösterebilir, ancak bu değişiklikleri sizin yerinize yapmasına izin verilmez. Önerilen değişiklikleri eklemek ve test etmek sizin elinizde.

Elde ettiğiniz yanıta ince ayar yapmak için söyleyebileceğiniz diğer bazı şeyler şunlardır:

  • Bu kodun yalnızca üretim modunda çalışmasını istiyorum.
  • Bu kodun yerel olarak değil yalnızca Azure Uygulaması Hizmetinde çalışmasını istiyorum.
  • "--output-path" parametresinin desteklenmediği görünüyor.

Bir sonraki eğitici derse geçerek uygulamanızı özel bir alan adı ve sertifika ile nasıl güvence altına alacağınızı öğrenin.

Ya da diğer kaynaklara göz atın.