Öğretici: Azure App Service'a bir ASP.NET Core ve Azure SQL Database uygulaması dağıtma

Bu öğreticide, veri odaklı bir ASP.NET Core uygulamasını Azure App Service'e dağıtmayı ve bir Azure SQL Veritabanına bağlanmayı öğreneceksiniz. Ayrıca uygulamanızda önbelleğe alma kodunu etkinleştirmek için bir Redis önbelleği dağıtacaksınız. Azure App Service, uygulamaları Windows veya Linux'ta kolayca dağıtabilen yüksek oranda ölçeklenebilir, kendi kendine düzeltme eki uygulamalı bir web barındırma hizmetidir. Bu öğreticide ASP.NET Core 8.0 uygulaması kullanılıyor olsa da, işlem diğer ASP.NET Core sürümleri için aynıdır.

Important

Azure Cache for Redis tüm SKU'lar için kullanımdan kaldırma zaman çizelgesini duyurdu. Mevcut Azure Cache for Redis örneklerinizi en kısa sürede Azure Yönetilen Redis'e taşımanızı öneririz.

Geçiş kılavuzu:

Kullanımdan kaldırma hakkında daha fazla bilgi için:

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ı kullanarak bağlantı gizli bilgilerinin 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 yayınla.
  • uygulamayı Azure portalında yönetin.
  • Aynı mimariyi sağlayın ve Azure Geliştirici CLI'sini kullanarak dağıtın.
  • GitHub Codespaces ve GitHub Copilot ile geliştirme iş akışınızı iyileştirin.

Önkoşullar

  • Etkin aboneliği olan bir Azure hesabı. Azure hesabınız yoksa ücretsiz oluşturabilirsiniz.
  • Azure Developer CLI yüklü. Azure Cloud Shell ile adımları izleyebilirsiniz çünkü zaten Azure Developer CLI yüklüdür.
  • ASP.NET Core geliştirme bilgisi.
  • (İsteğe bağlı) GitHub Copilot denemek için GitHub Copilot hesabı. 30 günlük ücretsiz deneme mevcut.

Sonuna geç

Bu öğreticideki örnek uygulamanın yalnızca Azure'da çalıştığını görmek istiyorsanız, Azure Cloud Shell içinde aşağıdaki komutları çalıştırın ve istemi izleyin:

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. Sizin için kolaylık sağlamak amacıyla, örnek deposu, geliştirme kapsayıcısı 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 kapsayıcısı GitHub codespace içinde çalıştırılabilir; bu da örneği web tarayıcısıyla herhangi bir bilgisayarda çalıştırabileceğiniz anlamına gelir.

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

  1. GitHub hesabınızda oturum açın.
  2. https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore/fork adresine 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'daki çatalda:

  1. main>starter-no-infra'yı starter dalı için seç. Bu dal yalnızca örnek projeyi içerir ve Azure ile ilgili dosya 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 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 App Service, Azure SQL Database ve Azure Cache içeren varsayılan olarak güvenli bir kaynak kümesi oluşturur. 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. Burada, uygulamanız için kullanılacak .NET sürümünü seçersiniz.
  • 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. Kaynak grubu, uygulama için gereken tüm Azure kaynaklarını gruplandırmanıza (mantıksal bir kapsayıcıda) olanak tanır.

Azure portalında oturum açın ve Azure App Service 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. oluşturma sihirbazına doğrudan da 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 önbelleği oluşturun.
  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. Organization bölümünde 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: Yalnızca özel uç noktasının arkasından erişilebilir.
  • Azure SQL Database: Sunucuda sizin için bir veritabanı ve kullanıcı oluşturulur.
  • 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.
  • Private DNS zones: Sanal ağdaki anahtar kasasının, veritabanı sunucusunun ve Redis önbelleğinin DNS çözümlemesini etkinleştirin.

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

Oluşturma sihirbazı bağlantı değişkenini sizin için zaten .NET bağlantı dizeleri ve app settings olarak oluşturdu. Ancak, güvenlikle ilgili en iyi uygulama, sırları App Service'ten tamamen uzak tutmaktır. Gizli bilgilerinizi bir Key Vault'a taşıyın ve Hizmet Bağlayıcıları yardımıyla uygulama ayarınızı Key Vault references olarak değiştirin.

İ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ı dizesini alın

  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. Add/Edit connection string içindeki Value alanında, dizenin sonundaki Password= bölümünü bulun.
  4. Password= ardından gelen parola dizgisini daha sonra kullanmak üzere kopyalayın. Bu connection string, özel uç noktanın arkasında güvenliği sağlanan 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, App ayarları sekmesindeki Redis önbellek bağlantı dizesi bir gizli dizi 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 Marketplace>Key Vault öğesini 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. Sanal ağ'da, msdocs-core-sql-XYZ_group grubunda sanal ağı seçin.
  8. Alt ağ'da kullanılabilir uyumlu alt ağı seçin. Web Uygulaması sihirbazı bunu sizin için oluşturmuştur.
  9. Tamam'ı seçin.
  10. İ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. Key Vault 'da Gizliyi Depola'yı seçin
  7. Key Vault Bağlantı altında Yeni oluştur öğesini 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ı kurun

  1. Key Vault bağlantısının Create connection iletişim kutusunda, Key Vault bölümünde daha önce oluşturduğunuz Key Vault'u seçiniz.
  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. İşlem tamamlandığında, Key Vault Connection açılan listesindeki öğe otomatik olarak seçilir.
  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 bilgilerini kullanacak şekilde yapılandırın

  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. Key Vault 'da Gizliyi Depola'yı seçin
  4. Key Vault Bağlantı altında, oluşturduğunuz key vault 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ğrulayın

  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ğerin @Microsoft.KeyVault(...) olması gerekir; bu da anahtar kasası referansı olduğu anlamına gelir, çünkü gizli anahtar artık anahtar kasasında yönetilir.
  3. Redis connection string doğrulamak için App settings sekmesini seçin. AZURE_REDIS_CONNECTIONSTRING'nin yanında Show value öğesini seçin. Değer de @Microsoft.KeyVault(...) olmalıdır.

Ö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ı yapılandıracaksı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 yapılan her git push derleme ve dağıtma işlemini başlatır.

Adım 1: Örnek çatallamanızın GitHub kod alanına geri dönün ve git pull origin starter-no-infra çalıştırı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 MyDatabaseContext sınıfı ve Program.cs'de 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, sizi Seçenek 2: GitHub Copilot olmadan bölümündeki adımlara benzer bir kod önerisinde bulunarak yönlendirebilir ve hatta Program.cs dosyasında değişiklik yapmanızı önerebilir.
  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. Codespace'imde GitHub Copilot ile neler 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. App Service oluşturma sihirbazı bu dosyayı oluşturdu.
  2. Adımı vurgulayın dotnet publish ve seçin .
  3. Ask Copilot, " Dotnet ef dosyasını yükleyin, ardından aynı output klasöründe bir geçiş paketi oluşturun."
  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. Codespace'imde GitHub Copilot ile neler yapabilirim?.

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

  1. Gezginde .github/workflows/starter-no-infra_msdocs-core-sql-XYZ'yi açın. App Service oluşturma sihirbazı bu dosyayı oluşturdu
  2. dotnet publish adımı altında, komutuyla dotnet tool install -g dotnet-ef --version 8.* yüklemek için bir adım 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'sine gerek kalmadan üretim ortamında çalıştırabileceğiniz bağımsız bir yürütülebilir dosyadır. App Service linux kapsayıcısının .NET SDK'sı değil yalnızca .NET çalışma zamanı vardır.

4. Adım:

  1. Kaynak Denetimi uzantısını seçin.
  2. Metin kutusuna Configure Azure database and cache connections gibi bir işleme iletisi yazın. İsterseniz 'ı seçip GitHub Copilot sizin için bir işleme iletisi 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: Azure portalındaki 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.

Step 6: 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ıştırmasının Başarılı 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.)

<sb0>Azure portalından uygulamanız için SSH kabuğunu nasıl açacağınızı gösteren bir ekran görüntüsü.</sb0>

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 komutuyla ç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. Tebrikler, Azure App Service üzerinde bir web uygulaması çalıştırıyorsunuz ve Azure SQL Veritabanı'na güvenli bağlantı sağlıyorsunuz.

İpucu

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

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

Azure App Service, 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şturma ve örnek uygulama dağıtma

Bu adımda, Azure kaynaklarını oluşturur ve App Service on Linux için örnek bir uygulama dağıtırsınız. Bu öğreticide kullanılan adımlar App Service, Azure SQL Veritabanı ve Redis cache gibi varsayılan olarak güvenli bir kaynak kümesi oluşturur.

Geliştirme kapsayıcısının zaten Azure Developer CLI (AZD) vardır.

  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'da (<app-name>-<hash>.azurewebsites.net) web uygulamanızın DNS adının bir parçası olarak bu adı kullanır. Alfanumerik karakterlere ve tirelere izin verilir.
  3. azd auth login komutunu çalıştırıp istemi izleyerek Azure oturum açın:

    azd auth login
    
  4. Gerekli Azure kaynaklarını oluşturun ve uygulama kodunu azd up komutuyla dağıtın. Azure kaynakları için istenen aboneliği ve konumu seçmek için istemi izleyin.

    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. komut çalışırken, Azure dağıtımına bir bağlantı da dahil olmak üzere sağlama ve dağıtım işlemi hakkında iletiler sağlar. Bittiğinde, komut ayrıca dağıtım uygulamasına bir bağlantı görüntüler.

    Bu AZD şablonu, aşağıdaki Azure kaynaklarıyla varsayılan olarak güvenli bir mimari oluşturan dosyaları (azure.yaml ve infra dizini) içerir:

    • 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: Yalnızca özel uç noktasının arkasından erişilebilir.
    • Azure SQL Database: Sunucuda sizin için bir veritabanı ve kullanıcı oluşturulur.
    • 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.
    • Private DNS zones: Sanal ağdaki anahtar kasasının, veritabanı sunucusunun ve Redis önbelleğinin DNS çözümlemesini etkinleştirin.

    Komut kaynak oluşturmayı ve uygulama kodunu ilk kez dağıtmayı tamamladıktan sonra, Azure veritabanına bağlanması için küçük değişiklikler yapmanız gerektiğinden dağıtılan örnek uygulama henüz çalışmaz.

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

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

İpucu

Varsayılan SQL veritabanı connection string SQL kimlik doğrulamasını 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ı için bağlantı dizesini ve AZURE_REDIS_CONNECTIONSTRING Azure Redis önbelleği için bağlantı dizesini 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 Chat görünümünü ve ardından +'ı seçerek yeni bir sohbet oturumu başlatın.

  2. "@workspace Uygulama veritabanına ve önbelleğe nasıl bağlanır?" Copilot MyDatabaseContext sınıfı ve Program.cs'de 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ı connection string'i ve uygulama ayarları için AZURE_REDIS_CONNECTIONSTRING*'i kullanmasını istediğinizi sorun. Copilot, aşağıdaki Seçenek 2: GitHub Copilot olmadan adımlarında yer alan kod önerisine benzer bir öneri verebilir ve hatta Program.cs dosyasında değişiklik yapmanızı 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. Codespace'imde GitHub Copilot ile neler 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. Ancak App Service Linux kapsayıcılarında .NET SDK'sı yoktur, bu nedenle veritabanı geçişlerini çalıştırmanın en kolay yolu bağımsız geçiş paketini karşıya 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ışmakta olan SQL Veritabanı'nın bulunduğu ASP.NET Core web uygulamasının ekran görüntüsü, görevler gösteriyor.

    Tebrikler, Azure App Service üzerinde bir web uygulaması çalıştırıyorsunuz ve Azure SQL Veritabanı'na güvenli bağlantı sağlıyorsunuz.

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

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

Azure App Service, uygulamanızla ilgili sorunları tanılamanıza yardımcı olmak için konsol günlüklerini yakalayabilir. Kolaylık sağlamak için, AZD şablonu yerel dosya sistemine günlüğü zaten etkinleştirdi ve günlükleri bir Log Analytics çalışma alanına gönderiyor.

Ö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, Node.js, Python ve Java uygulamaları için Azure Monitor OpenTelemetry'yi etkinleştirme dizisinde, .NET uygulamalarında günlük kaydı hakkında daha fazla bilgi edinin.

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

8. Kaynakları Temizle

Geçerli dağıtım ortamındaki tüm Azure kaynaklarını silmek için azd down çalıştırın ve istemleri izleyin.

azd down

Sorun Giderme

Azure SQL Database için portal dağıtım görünümünde Çakışma durumu gösterilir

Aboneliğinize ve seçtiğiniz bölgeye bağlı olarak, Azure SQL Database dağıtım durumunun Conflict olduğunu ve İşlem ayrıntıları bölümünde aşağıdaki iletiyi görebilirsiniz:

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ının günlük akışı kullanıcı arabirimi 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 Database, standart seri donanımda en düşük çekirdeklerle genel amaçlı, sunucusuz katmanda 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 Database pricing.
  • Azure Cache for Redis en düşük önbellek boyutuyla Basic katmanında oluşturulur. 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. Bkz. Azure Cache for Redis pricing. Daha fazla bilgi için bkz. Azure Yönetilen Redis fiyatlandırması.
  • Sanal ağ, eşleştirme gibi ekstra işlevler yapılandırmadığınız sürece bir ücret getirmez. Bkz. Azure Virtual Network pricing.
  • Özel DNS bölgesi küçük bir ücret gerektirir. Bkz. Azure DNS pricing.

Diğer araçlarla sanal ağın arkasında güvenliği sağlanan Azure SQL Database sunucusuna nasıl bağlanabilirim?

  • 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 bağlanmak için makinenizin sanal ağ içinde olması gerekir. Örneğin, alt ağlardan birine bağlı bir Azure VM veya Azure sanal ağıyla siteden siteye VPN bağlantısı olan bir şirket içi ağ makinesi 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, istenen güncelleştirmelerin GitHub göndermesini sağlarsınız. Ö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ıklarım?

Otomatik oluşturulan GitHub iş akışı dosyasında bir adım başarısız olursa, daha ayrıntılı bir çıkış oluşturmak 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

Bkz. Dağıtım Merkezi'nden GitHub Actions dağıtımı ayarlama.

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

Hizmet Bağlayıcısı, SQL veritabanı için varsayılan connection string defaultConnector adıyla yönetir 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:

  • Kullanıcınızı SQL veritabanı sunucusunun Microsoft Entra ID yöneticisi olarak ayarlar.
  • Sistemde atanmış bir yönetilen kimlik oluşturun ve ona veritabanına erişim izni verin.
  • Eğiticinin sonunda uygulamanızın zaten kullandığı AZURE_SQL_CONNECTIONGSTRING adlı parolasız bir bağlantı dizesi oluşturur.

Artık uygulamanızın SQL veritabanına bağlantısı olmalı. Daha fazla bilgi için bakınız Eğitim: Yönetilen kimlik kullanarak gizli bilgileri kullanmadan App Service'ten Azure veritabanlarına bağlanma.

İpucu

Ağ bağlantısını genel olarak etkinleştirmek istemiyor musunuz? Aboneliğinizde az sql server update --enable-public-network true rol atamanız varsa sanal ağınıza entegre edilmiş bir Azure cloud shell kullanarak komutları çalıştırıp atlayabilirsiniz.

Kimliğe sanal ağ tarafından güvenliği sağlanan veritabanına gerekli erişimi vermek için az webapp connection create sql veritabanı sunucusuna Entra ID kimlik doğrulamasıyla doğrudan bağlantı gerekir. Varsayılan olarak, Azure cloud shell'in ağ ile güvenli veritabanına bu erişimi yoktur.

Kod alanımdaki GitHub Copilot ile ne yapabilirim?

Kod alanını oluştururken GitHub Copilot sohbet görünümünün zaten sizin için 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ı (30 günlük ücretsiz deneme sürümü kullanılabilir) gerekir.

GitHub Copilot ile konuşurken size bazı ipuçları:

  • 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 deponuzdaki hiçbir dosyaya erişimi yoktur. Bir dosya hakkında soru sormak için, dosyayı önce editörde açın.
  • GitHub Copilot yanıtlarını hazırlarken depodaki tüm dosyalara erişebilmesini sağlamak için sorunuza @workspace ile başlayın. Daha fazla bilgi için bkz. Use the @workspace agent.
  • Sohbet oturumunda, GitHub Copilot değişiklikleri önerebilir ve (@workspace ile) değişikliklerin nerede yapılacağına bile karar verebilir, ancak değişiklikleri sizin için 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 App Service'de çalıştırılması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.