Share via


Öğretici: Azure Uygulaması Hizmetinde yüksek oranda kullanılabilir çok bölgeli uygulama oluşturma

Yüksek kullanılabilirlik ve hataya dayanıklılık, iyi tasarlanmış bir çözümün temel bileşenleridir. Kesinti süresini kısaltabilen ve bir şey başarısız olduğunda sistemlerinizi otomatik olarak çalışır durumda tutabilen bir acil durum planına sahip olarak beklenmeyen durumlara hazırlanmak en iyisidir.

Uygulamanızı buluta dağıttığınızda, bu bulutta uygulama altyapınızın temel aldığı bir bölge seçersiniz. Uygulamanız tek bir bölgeye dağıtılırsa ve bölge kullanılamaz duruma gelirse, uygulamanız da kullanılamaz duruma gelir. Bu kullanılabilirlik eksikliği, uygulamanızın SLA koşulları altında kabul edilemez olabilir. Bu durumda uygulamanızı ve hizmetlerini birden çok bölgeye dağıtmak iyi bir çözümdür.

Bu öğreticide, yüksek oranda kullanılabilir çok bölgeli bir web uygulamasını dağıtmayı öğreneceksiniz. Bu senaryo, uygulama bileşenlerini yalnızca bir web uygulaması ve Azure Front Door ile kısıtlayarak basit tutulur, ancak kavramlar genişletilebilir ve diğer altyapı desenlerine uygulanabilir. Örneğin, uygulamanız bir Azure veritabanı teklifine veya depolama hesabına bağlanıyorsa bkz . SQL veritabanları için etkin coğrafi çoğaltma ve depolama hesapları için yedeklilik seçenekleri. Daha ayrıntılı bir senaryo için başvuru mimarisi için bkz . Yüksek oranda kullanılabilir çok bölgeli web uygulaması.

Aşağıdaki mimari diyagramı, bu öğreticide oluşturduğunuz altyapıyı gösterir. Biri etkin veya birincil bölge, diğeri de bekleme veya ikincil bölge olmak üzere ayrı bölgelerdeki iki özdeş Uygulama Hizmeti'ni içerir. Azure Front Door, trafiği App Services'e yönlendirmek için kullanılır ve uygulamalara İnternet'ten doğrudan erişimin engellenmesi için erişim kısıtlamaları yapılandırılır. Noktalı çizgi, trafiğin yalnızca etkin bölge kapanırsa bekleme bölgesine gönderildiğini gösterir.

Azure, yük dengeleme ve trafik yönlendirme için çeşitli seçenekler sağlar. Azure Front Door, birden çok bölgede dağıtılan Azure Uygulaması Hizmetinde barındırılan İnternet'e yönelik web uygulamalarını içerdiği için bu kullanım örneği için seçildi. Bu öğreticiden farklıysa kullanım örneğiniz için ne kullanacağınıza karar vermenize yardımcı olmak için Bkz . Azure'da yük dengeleme için karar ağacı.

Architecture diagram of a multi-region App Service.

Bu mimariyle:

  • Aynı App Service uygulamaları iki ayrı bölgeye dağıtılır.
  • Doğrudan App Service uygulamalarına yönelik genel trafik engellenir.
  • Azure Front Door, trafiği birincil/etkin bölgeye yönlendirmek için kullanılır. İkincil bölgede çalışır durumda olan ve gerekirse trafiğe hizmet etmeye hazır bir App Service vardır.

Öğrenecekleriniz:

  • Ayrı bölgelerde aynı Uygulama Hizmetleri oluşturun.
  • Uygulama Hizmetlerine genel erişimi engelleyen erişim kısıtlamalarıyla Azure Front Door oluşturun.

Önkoşullar

Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.

Bu öğreticiyi tamamlamak için:

  • Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz . Azure Cloud Shell'de Bash için hızlı başlangıç.

  • CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yı yükleyin . Windows veya macOS üzerinde çalışıyorsanız Azure CLI’yi bir Docker kapsayıcısında çalıştırmayı değerlendirin. Daha fazla bilgi için bkz . Docker kapsayıcısında Azure CLI'yi çalıştırma.

    • Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Diğer oturum açma seçenekleri için bkz . Azure CLI ile oturum açma.

    • İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.

    • Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.

Web uygulamasının iki örneğini oluşturma

Bu öğretici için farklı Azure bölgelerinde çalışan bir web uygulamasının iki örneğine ihtiyacınız vardır. İki bölgeniz olarak Doğu ABD/Batı ABD bölge çiftini kullanır ve iki boş web uygulaması oluşturursunuz. Gerekirse kendi bölgelerinizi seçebilirsiniz.

Yönetimi ve temizlemeyi daha kolay hale getirmek için bu öğreticideki tüm kaynaklar için tek bir kaynak grubu kullanırsınız. Olağanüstü durum kurtarma durumunda kaynaklarınızı daha da yalıtmak için her bölge/kaynak için ayrı kaynak grupları kullanmayı göz önünde bulundurun.

Kaynak grubunuzu oluşturmak için aşağıdaki komutu çalıştırın.

az group create --name myresourcegroup --location eastus

App Service planları oluşturma

App Service planlarını oluşturmak için aşağıdaki komutları çalıştırın. ve <app-service-plan-west-us> yer <app-service-plan-east-us> tutucularını, bulundukları bölgeyi kolayca tanımlayabileceğiniz iki benzersiz adla değiştirin.

az appservice plan create --name <app-service-plan-east-us> --resource-group myresourcegroup --is-linux --location eastus

az appservice plan create --name <app-service-plan-west-us> --resource-group myresourcegroup --is-linux --location westus

Web uygulamaları oluşturma

App Service planları oluşturulduktan sonra aşağıdaki komutları çalıştırarak web uygulamalarını oluşturun. ve yer <web-app-east-us> tutucularını genel olarak benzersiz iki adla (geçerli karakterler a-z, 0-9ve -) değiştirin ve her plana (ve dolayısıyla her bölgeye) bir uygulama yerleştirmek için parametresine dikkat --plan<web-app-west-us> edin. parametresini <runtime> uygulamanızın dil sürümüyle değiştirin. Kullanılabilir çalışma zamanlarının listesi için komutunu çalıştırın az webapp list-runtimes . Aşağıdaki bölümlerde bu öğreticide verilen örnek Node.js uygulamasını kullanmayı planlıyorsanız çalışma zamanınız olarak kullanın NODE:18-lts .

az webapp create --name <web-app-east-us> --resource-group myresourcegroup --plan <app-service-plan-east-us> --runtime <runtime>

az webapp create --name <web-app-west-us> --resource-group myresourcegroup --plan <app-service-plan-west-us> --runtime <runtime>

Bir sonraki adımda Front Door'u dağıtırken arka uç adreslerini tanımlayabilmeniz için her web uygulamasının varsayılan ana bilgisayar adını not edin. <web-app-name>.azurewebsites.net biçiminde olmalıdır. Bu konak adları, aşağıdaki komutu çalıştırarak veya Azure portalında uygulamanın Genel Bakış sayfasına giderek bulunabilir.

az webapp show --name <web-app-name> --resource-group myresourcegroup --query "hostNames"

Azure Front Door oluşturma

Çok bölgeli dağıtım, etkin-etkin veya etkin-pasif yapılandırma kullanabilir. Etkin-etkin yapılandırma, istekleri birden çok etkin bölgeye dağıtır. Etkin-pasif yapılandırma, ikincil bölgedeki örnekleri çalıştırmaya devam eder, ancak birincil bölge başarısız olmadığı sürece oraya trafik göndermez. Azure Front Door,bu yapılandırmaları etkinleştirmenizi sağlayan yerleşik bir özelliğe sahiptir. Yüksek kullanılabilirlik ve hataya dayanıklılık için uygulama tasarlama hakkında daha fazla bilgi için bkz . Dayanıklılık ve kullanılabilirlik için Azure uygulamalarını tasarlama.

Azure Front Door profili oluşturma

Artık trafiği uygulamalarınıza yönlendirmek için bir Azure Front Door Premium oluşturacaksınız.

Azure Front Door profili oluşturmak için komutunu çalıştırın az afd profile create .

Not

Premium yerine Azure Front Door Standard'ı dağıtmak istiyorsanız parametresinin --sku değerini Standard_AzureFrontDoor ile değiştirin. Standart katmanı seçerseniz WAF İlkesi ile yönetilen kuralları dağıtamazsınız. Fiyatlandırma katmanlarının ayrıntılı karşılaştırması için bkz . Azure Front Door katmanı karşılaştırması.

az afd profile create --profile-name myfrontdoorprofile --resource-group myresourcegroup --sku Premium_AzureFrontDoor
Parametre Değer Açıklama
profile-name myfrontdoorprofile Kaynak grubu içinde benzersiz olan Azure Front Door profilinin adı.
resource-group myresourcegroup Bu öğreticideki kaynakları içeren kaynak grubu.
sku Premium_AzureFrontDoor Azure Front Door profilinin fiyatlandırma katmanı.

Bir uç nokta ekleme

Profilinizde bir uç nokta oluşturmak için komutunu çalıştırın az afd endpoint create . Oluşturma deneyimini tamamladıktan sonra profilinizde birden çok uç nokta oluşturabilirsiniz.

az afd endpoint create --resource-group myresourcegroup --endpoint-name myendpoint --profile-name myfrontdoorprofile --enabled-state Enabled
Parametre Değer Açıklama
endpoint-name myendpoint Genel olarak benzersiz olan profilin altındaki uç noktanın adı.
enabled-state Enabled Bu uç noktanın etkinleştirilip etkinleştirilmeyileceği.

Kaynak grubu oluşturma

komutunu çalıştırarak az afd origin-group create iki web uygulamanızı içeren bir kaynak grubu oluşturun.

az afd origin-group create --resource-group myresourcegroup --origin-group-name myorigingroup --profile-name myfrontdoorprofile --probe-request-type GET --probe-protocol Http --probe-interval-in-seconds 60 --probe-path / --sample-size 4 --successful-samples-required 3 --additional-latency-in-milliseconds 50
Parametre Değer Açıklama
origin-group-name myorigingroup Kaynak grubunun adı.
probe-request-type GET Yapılan sistem durumu yoklaması isteğinin türü.
probe-protocol Http Sistem durumu yoklaması için kullanılacak protokol.
probe-interval-in-seconds 60 Sistem durumu yoklamaları arasındaki saniye sayısı.
probe-path / Kaynağın durumunu belirlemek için kullanılan çıkış noktasıyla ilgili yol.
sample-size 4 Yük dengeleme kararları için dikkate alınacak örnek sayısı.
successful-samples-required 3 Örnek dönemi içinde başarılı olması gereken örnek sayısı.
additional-latency-in-milliseconds 50 Yoklamaların en düşük gecikme süresi demetine düşmesi için milisaniye cinsinden ek gecikme süresi.

Gruba kaynak ekleme

Kaynak grubunuza kaynak eklemek için komutunu çalıştırın az afd origin create . parametresi için --host-name yer tutucusunun <web-app-east-us> yerine o bölgedeki uygulama adınızı yazın. parametresinin --priority , birincil uygulamanıza tüm trafiğin gönderildiğini gösteren olarak ayarlandığına 1dikkat edin.

az afd origin create --resource-group myresourcegroup --host-name <web-app-east-us>.azurewebsites.net --profile-name myfrontdoorprofile --origin-group-name myorigingroup --origin-name primaryapp --origin-host-header <web-app-east-us>.azurewebsites.net --priority 1 --weight 1000 --enabled-state Enabled --http-port 80 --https-port 443
Parametre Değer Açıklama
host-name <web-app-east-us>.azurewebsites.net Birincil web uygulamasının ana bilgisayar adı.
origin-name primaryapp Kaynağın adı.
origin-host-header <web-app-east-us>.azurewebsites.net Bu kaynağın istekleri için gönderilecek ana bilgisayar üst bilgisi. Bu değeri boş bırakırsanız, istek ana bilgisayar adı bu değeri belirler. Web Apps, Blob Depolama ve Cloud Services gibi Azure CDN çıkış noktaları, bu ana bilgisayar üst bilgisi değerinin varsayılan olarak kaynak ana bilgisayar adıyla eşleşmesini gerektirir.
priority 1 Tüm trafiği birincil web uygulamasına yönlendirmek için bu parametreyi 1 olarak ayarlayın.
weight 1000 Yük dengeleme için verilen çıkış noktası grubundaki kaynağın ağırlığı. 1 ile 1000 arasında olmalıdır.
enabled-state Enabled Bu kaynağın etkinleştirilip etkinleştirilmeyileceği.
http-port 80 Kaynak http istekleri için kullanılan bağlantı noktası.
https-port 443 Çıkış noktasına yönelik HTTPS istekleri için kullanılan bağlantı noktası.

İkinci kaynağınızı eklemek için bu adımı yineleyin. parametresine --priority dikkat edin. Bu kaynak için olarak ayarlanır 2. Bu öncelik ayarı, birincil değer düşmediği sürece Azure Front Door'a tüm trafiği birincil çıkış noktasıyla yönlendirmesini söyler. Bu kaynağın 1önceliğini olarak ayarlarsanız Azure Front Door her iki kaynağı da etkin olarak ele alır ve trafiği her iki bölgeye de yönlendirir. yer tutucusunun <web-app-west-us> her iki örneğini de bu web uygulamasının adıyla değiştirmeyi unutmayın.

az afd origin create --resource-group myresourcegroup --host-name <web-app-west-us>.azurewebsites.net --profile-name myfrontdoorprofile --origin-group-name myorigingroup --origin-name secondaryapp --origin-host-header <web-app-west-us>.azurewebsites.net --priority 2 --weight 1000 --enabled-state Enabled --http-port 80 --https-port 443

Yol ekleme

Uç noktanızı kaynak grubuna eşlemek için komutunu çalıştırın az afd route create . Bu yol, uç noktadan gelen istekleri kaynak grubunuzla yönlendirir.

az afd route create --resource-group myresourcegroup --profile-name myfrontdoorprofile --endpoint-name myendpoint --forwarding-protocol MatchRequest --route-name route --https-redirect Enabled --origin-group myorigingroup --supported-protocols Http Https --link-to-default-domain Enabled 
Parametre Değer Açıklama
endpoint-name myendpoint Uç noktanın adı.
iletme protokolü MatchRequest Trafiği arka uçlara iletirken bu kuralın kullandığı protokol.
route-name route Yolun adı.
https-redirect Enabled HTTP trafiğinin otomatik olarak HTTPS trafiğine yönlendirilip yönlendirilmeyeceği.
supported-protocols Http Https Bu yol için desteklenen protokollerin listesi.
link-to-default-domain Enabled Bu yolun varsayılan uç nokta etki alanına bağlı olup olmadığı.

Bu değişikliğin genel olarak yayılması biraz zaman aldığından bu adımın tamamlanması için yaklaşık 15 dakika bekleyin. Bu süreden sonra Azure Front Door'unuz tamamen işlevsel hale gelir.

Web uygulamalarına erişimi Azure Front Door örneğine kısıtlama

Bu noktada, bu noktada uygulamalarınıza url'lerini kullanarak doğrudan erişebilirsiniz. Trafiğin uygulamalarınıza yalnızca Azure Front Door üzerinden ulaşmasını sağlamak için her uygulamanızda erişim kısıtlamaları ayarlarsınız. Front Door'un özellikleri, trafik yalnızca Front Door üzerinden aktığında en iyi şekilde çalışır. Başlangıç noktalarınızı henüz Front Door üzerinden gönderilmemiş trafiği engelleyecek şekilde yapılandırmanız gerekir. Aksi takdirde trafik Front Door'un web uygulaması güvenlik duvarını, DDoS korumasını ve diğer güvenlik özelliklerini atlayabilir. Azure Front Door'dan uygulamalarınıza gelen trafik, hizmet etiketinde tanımlanan iyi bilinen bir IP aralığı kümesinden AzureFrontDoor.Backend kaynaklanır. Bir hizmet etiketi kısıtlama kuralı kullanarak trafiği yalnızca Azure Front Door'dan gelenlerle kısıtlayabilirsiniz.

App Service erişim kısıtlamalarını ayarlamadan önce aşağıdaki komutu çalıştırarak Front Door Kimliğini not alın. Trafiğin yalnızca kendi Front Door örneğinizden kaynaklandığından emin olmak için bu kimlik gereklidir. Erişim kısıtlaması, Azure Front Door'unuzun gönderdiği benzersiz HTTP üst bilgisine göre gelen istekleri daha da filtreler.

az afd profile show --resource-group myresourcegroup --profile-name myfrontdoorprofile --query "frontDoorId"

Web uygulamalarınızda erişim kısıtlamalarını ayarlamak için aşağıdaki komutları çalıştırın. için <front-door-id> yer tutucusunu önceki komutun sonucuyla değiştirin. Uygulama adlarının yer tutucularını değiştirin.

az webapp config access-restriction add --resource-group myresourcegroup -n <web-app-east-us> --priority 100 --service-tag AzureFrontDoor.Backend --http-header x-azure-fdid=<front-door-id>

az webapp config access-restriction add --resource-group myresourcegroup -n <web-app-west-us> --priority 100 --service-tag AzureFrontDoor.Backend --http-header x-azure-fdid=<front-door-id>

Front Door'un testini

Azure Front Door Standard/Premium profilini oluşturduğunuzda yapılandırmanın genel olarak dağıtılması birkaç dakika sürer. İşlem tamamlandıktan sonra, oluşturduğunuz ön uç konağına erişebilirsiniz.

Front Door uç noktasının ana bilgisayar adını almak için komutunu çalıştırın az afd endpoint show .

az afd endpoint show --resource-group myresourcegroup --profile-name myfrontdoorprofile --endpoint-name myendpoint --query "hostName"

Tarayıcıda, önceki komutun döndürdüğünü uç nokta ana bilgisayar adına gidin: <myendpoint>-<hash>.z01.azurefd.net. İsteğiniz otomatik olarak Doğu ABD'deki birincil uygulamaya yönlendirilmelidir.

Anlık genel yük devretmeyi test etmek için:

  1. Bir tarayıcı açın ve uç nokta ana bilgisayar adına gidin: <myendpoint>-<hash>.z01.azurefd.net.

  2. az webapp stop komutunu çalıştırarak birincil uygulamayı durdurun.

    az webapp stop --name <web-app-east-us> --resource-group myresourcegroup
    
  3. Tarayıcınızı yenileyin. Trafik artık Batı ABD'de çalışan uygulamaya yönlendirildiğinden aynı bilgi sayfasını görmeniz gerekir.

    İpucu

    Yük devretmenin tamamlanması için sayfayı birkaç kez yenilemeniz gerekebilir.

  4. Şimdi ikincil uygulamayı durdurun.

    az webapp stop --name <web-app-west-us> --resource-group myresourcegroup
    
  5. Tarayıcınızı yenileyin. Bu kez bir hata iletisi görmeniz gerekir.

    Screenshot of the message: Both instances of the web app stopped.

  6. az webapp start komutunu çalıştırarak Web Uygulamalarından birini yeniden başlatın. Tarayıcınızı yenilediğinizde uygulamayı yeniden görmeniz gerekir.

    az webapp start --name <web-app-east-us> --resource-group myresourcegroup
    

Artık Uygulamalarınıza Azure Front Door üzerinden erişebileceğinizi ve yük devretme işlevlerinin istendiği gibi çalıştığını doğruladiniz. Yük devretme testini bitirdiyseniz diğer uygulamanızı yeniden başlatın.

Erişim kısıtlamalarınızı test etmek ve uygulamalarınıza yalnızca Azure Front Door üzerinden ulaşılabilmesini sağlamak için bir tarayıcı açın ve uygulamanızın URL'lerinin her birine gidin. URL'leri bulmak için aşağıdaki komutları çalıştırın:

az webapp show --name <web-app-east-us> --resource-group myresourcegroup --query "hostNames"

az webapp show --name <web-app-west-us> --resource-group myresourcegroup --query "hostNames"

Uygulamaların erişilebilir olmadığını belirten bir hata sayfası görmeniz gerekir.

Kaynakları temizleme

Önceki adımlarda, bir kaynak grubunda Azure kaynakları oluşturdunuz. Bu kaynakların gelecekte gerekli olacağını düşünmüyorsanız, Cloud Shell’de aşağıdaki komutu çalıştırarak kaynak grubunu silin.

az group delete --name myresourcegroup

Bu komutun çalıştırılması birkaç dakika sürebilir.

ARM/Bicep'ten dağıtma

Bu öğreticide oluşturduğunuz kaynaklar ARM/Bicep şablonu kullanılarak dağıtılabilir. Yüksek oranda kullanılabilir çok bölgeli web uygulaması Bicep şablonu, Azure Front Door'un arkasında farklı bölgelerdeki iki web uygulamasıyla güvenli, yüksek oranda kullanılabilir, çok bölgeli bir uçtan uca çözüm oluşturmanıza olanak tanır.

ARM/Bicep şablonlarını dağıtmayı öğrenmek için bkz . Bicep ve Azure CLI ile kaynakları dağıtma.

Sık sorulan sorular

Bu öğreticide, çok bölgeli bir web uygulamasını etkinleştirmek için temel altyapıyı dağıttınız. App Service, güvenlikle ilgili en iyi yöntemleri ve önerileri izleyerek uygulamaları çalıştırdığınızdan emin olmanıza yardımcı olabilecek özellikler sağlar.

Bu bölümde, en iyi yöntemleri kullanarak uygulamalarınızı daha da güvenli bir şekilde korumanıza ve kaynaklarınızı dağıtmanıza ve yönetmenize yardımcı olabilecek sık sorulan sorular yer almaktadır.

Bu öğreticide, altyapı kaynaklarınızı dağıtmak için Azure CLI'yi kullandınız. Uygulama altyapınızı yönetmek için sürekli bir dağıtım mekanizması yapılandırmayı göz önünde bulundurun. Kaynakları farklı bölgelere dağıttığınıza göre, bu kaynakları bölgeler arasında bağımsız olarak yönetmeniz gerekir. Kaynakların her bölgede aynı olduğundan emin olmak için Azure Resource Manager şablonları veya Terraform gibi kod olarak altyapı (IaC), Azure Pipelines veya GitHub Actions gibi dağıtım işlem hatlarıyla kullanılmalıdır. Bu şekilde, uygun şekilde yapılandırılırsa kaynaklarda yapılan herhangi bir değişiklik, dağıtıldığınız tüm bölgelerde güncelleştirmeleri tetikler. Daha fazla bilgi için bkz. Azure Uygulaması Hizmetine sürekli dağıtım.

Hazırlama yuvalarını üretime güvenli dağıtım yapmak için nasıl kullanabilirim?

Uygulama kodunuzu doğrudan üretim uygulamalarına/yuvalarına dağıtmanız önerilmez. Bunun nedeni, uygulamalarınızı test etmek ve üretime göndermeden önce yaptığınız değişiklikleri doğrulamak için güvenli bir yere sahip olmak istemenizdir. Kodu test ortamınızdan üretim ortamınıza taşımak için hazırlama yuvalarının ve yuva değişiminin bir bileşimini kullanın.

Bu senaryo için temel altyapıyı zaten oluşturdunuz. Şimdi, uygulamanızın her örneği için dağıtım yuvaları oluşturacak ve GitHub Actions ile bu hazırlama yuvalarına sürekli dağıtım yapılandıracaksınız. Altyapı yönetiminde olduğu gibi, bölgeler arasındaki değişikliklerin eşitlendiğinden emin olmak için uygulama kaynak kodunuz için sürekli dağıtımı yapılandırmanız da önerilir. Sürekli dağıtımı yapılandırmazsanız, her kod değişikliği olduğunda her bölgedeki her uygulamayı el ile güncelleştirmeniz gerekir.

Bu öğreticinin kalan adımları için App Services'inize dağıtmaya hazır bir uygulamanız olmalıdır. Örnek bir uygulamaya ihtiyacınız varsa Node.js Merhaba Dünya örnek uygulamasını kullanabilirsiniz. Kendi kopyanızın olması için deponun çatalını oluşturun.

Uygulamalarınız için App Service yığını ayarlarını ayarladığınızdan emin olun. Yığın ayarları, uygulamanız için kullanılan dile veya çalışma zamanına başvurur. Bu ayar, komutuyla az webapp config set Azure CLI kullanılarak veya portalda aşağıdaki adımlarla yapılandırılabilir. Node.js örneğini kullanıyorsanız yığın ayarlarını Node 18 LTS olarak ayarlayın.

  1. Uygulamanıza gidip sol taraftaki içindekiler tablosunda Yapılandırma'ya tıklayın.
  2. Genel ayarlar sekmesini seçin.
  3. Yığın ayarları'nın altında uygulamanız için uygun değeri seçin.
  4. Güncelleştirmeyi onaylamak için Kaydet'i ve ardından Devam'ı seçin.
  5. Diğer uygulamalarınız için bu adımları yineleyin.

Uygulamalarınızın her biri için "stage" adlı hazırlama yuvaları oluşturmak için aşağıdaki komutları çalıştırın. ve <web-app-west-us> yer <web-app-east-us> tutucularını uygulama adlarınızla değiştirin.

az webapp deployment slot create --resource-group myresourcegroup --name <web-app-east-us> --slot stage --configuration-source <web-app-east-us>

az webapp deployment slot create --resource-group myresourcegroup --name <web-app-west-us> --slot stage --configuration-source <web-app-west-us>

Sürekli dağıtımı ayarlamak için Azure portalını kullanmanız gerekir. GitHub Actions gibi sağlayıcılarla sürekli dağıtımı yapılandırma hakkında ayrıntılı yönergeler için bkz. Azure Uygulaması Service'e sürekli dağıtım.

GitHub Actions ile sürekli dağıtımı yapılandırmak için hazırlama yuvalarınızın her biri için aşağıdaki adımları tamamlayın.

  1. Azure portalında App Service uygulama yuvalarınızdan birinin yönetim sayfasına gidin.

  2. Sol bölmede Dağıtım Merkezi'ni seçin. Ardından Ayarlar'ı seçin.

  3. Kaynak kutusunda CI/CD seçeneklerinden "GitHub" öğesini seçin:

    Screenshot that shows how to choose the deployment source

  4. GitHub'dan ilk kez dağıtıyorsanız Yetkile'yi seçin ve yetkilendirme istemlerini izleyin. Farklı bir kullanıcının deposundan dağıtmak istiyorsanız Hesabı Değiştir'i seçin.

  5. Azure hesabınızı GitHub ile yetkilendirildikten sonra, CI/CD'yi yapılandırmak için Kuruluş, Depo ve Dal'ı seçin. Bir kuruluş veya depo bulamazsanız GitHub'da daha fazla izni etkinleştirmeniz gerekebilir. Daha fazla bilgi için bkz . Kuruluşunuzun depolarına erişimi yönetme.

    1. Node.js örnek uygulamasını kullanıyorsanız aşağıdaki ayarları kullanın.

      Ayar Value
      Organization <your-GitHub-organization>
      Depo nodejs-docs-hello-world
      Şube main
  6. Kaydet'i seçin.

    Seçilen depodaki ve daldaki yeni işlemeler artık App Service uygulama yuvanıza sürekli olarak dağıtılır. İşlemeleri ve dağıtımları Günlükler sekmesinden izleyebilirsiniz.

App Service'de kimlik doğrulaması yapmak için yayımlama profili kullanan varsayılan iş akışı dosyası GitHub deponuza eklenir. Dizine <repo-name>/.github/workflows/ giderek bu dosyayı görüntüleyebilirsiniz.

App Service'te temel kimlik doğrulamayı devre dışı Nasıl yaparım??

FTP ve SCM uç noktalarına erişimi Microsoft Entra Id tarafından yedeklenen kullanıcılarla sınırlayan temel kimlik doğrulamasını devre dışı bırakmayı göz önünde bulundurun. Uygulama kaynak kodunuzu dağıtmak için sürekli dağıtım aracı kullanıyorsanız, temel kimlik doğrulamasını devre dışı bırakmak için sürekli dağıtımı yapılandırmak için ek adımlar gerekir. Örneğin, Microsoft Entra kimlik bilgilerini kullanmadığından yayımlama profili kullanamazsınız. Bunun yerine hizmet sorumlusu veya OpenID Bağlan kullanmanız gerekir.

App Service'inizde temel kimlik doğrulamasını devre dışı bırakmak için ve yer tutucularını uygulama adlarınızla değiştirerek her uygulama ve <web-app-west-us> yuva için <web-app-east-us> aşağıdaki komutları çalıştırın. İlk komut kümesi, üretim siteleri ve hazırlama yuvaları için FTP erişimini devre dışı bırakır ve ikinci komut kümesi, üretim siteleri ve hazırlama yuvaları için WebDeploy bağlantı noktası ve SCM sitesine temel kimlik doğrulama erişimini devre dışı bırakır.

az resource update --resource-group myresourcegroup --name ftp --namespace Microsoft.Web --resource-type basicPublishingCredentialsPolicies --parent sites/<web-app-east-us> --set properties.allow=false

az resource update --resource-group myresourcegroup --name ftp --namespace Microsoft.Web --resource-type basicPublishingCredentialsPolicies --parent sites/<web-app-east-us>/slots/stage --set properties.allow=false

az resource update --resource-group myresourcegroup --name ftp --namespace Microsoft.Web --resource-type basicPublishingCredentialsPolicies --parent sites/<web-app-west-us> --set properties.allow=false

az resource update --resource-group myresourcegroup --name ftp --namespace Microsoft.Web --resource-type basicPublishingCredentialsPolicies --parent sites/<web-app-west-us>/slots/stage --set properties.allow=false
az resource update --resource-group myresourcegroup --name scm --namespace Microsoft.Web --resource-type basicPublishingCredentialsPolicies --parent sites/<web-app-east-us> --set properties.allow=false

az resource update --resource-group myresourcegroup --name scm --namespace Microsoft.Web --resource-type basicPublishingCredentialsPolicies --parent sites/<web-app-east-us>/slots/stage --set properties.allow=false

az resource update --resource-group myresourcegroup --name scm --namespace Microsoft.Web --resource-type basicPublishingCredentialsPolicies --parent sites/<web-app-west-us> --set properties.allow=false

az resource update --resource-group myresourcegroup --name scm --namespace Microsoft.Web --resource-type basicPublishingCredentialsPolicies --parent sites/<web-app-west-us>/slots/stage --set properties.allow=false

Oturum açmaları test etme ve izleme de dahil olmak üzere temel kimlik doğrulamasını devre dışı bırakma hakkında daha fazla bilgi için bkz . App Service dağıtımlarında temel kimlik doğrulamasını devre dışı bırakma.

Temel kimlik doğrulamasını devre dışı bıraksam Nasıl yaparım? sürekli dağıtım kullanarak kodumu dağıtabilir miyim?

App Service uygulamalarınızda temel kimlik doğrulamasına izin vermeyi seçerseniz, hazırlama yuvaları bölümünde yapılandırılan yayımlama profilini kullanmak da dahil olmak üzere App Service'teki kullanılabilir dağıtım yöntemlerinden herhangi birini kullanabilirsiniz.

Uygulama Hizmetleriniz için temel kimlik doğrulamasını devre dışı bırakırsanız, sürekli dağıtım için kimlik doğrulaması için bir hizmet sorumlusu veya OpenID Bağlan gerekir. Kod deponuz olarak GitHub Actions kullanıyorsanız, GitHub Actions kullanarak App Service'e dağıtmak için hizmet sorumlusu veya OpenID Bağlan kullanma veya aşağıdaki bölümdeki adımları tamamlama adım adım öğreticiye bakın.

GitHub Actions ile hizmet sorumlusu oluşturma ve kimlik bilgilerini yapılandırma

GitHub Actions ve hizmet sorumlusuyla sürekli dağıtımı yapılandırmak için aşağıdaki adımları kullanın.

  1. Hizmet sorumlusunu oluşturmak için aşağıdaki komutu çalıştırın. Yer tutucuları ve uygulama adlarınızla <subscription-id> değiştirin. Çıkış, App Service uygulamalarınıza erişim sağlayan rol ataması kimlik bilgilerine sahip bir JSON nesnesidir. Sonraki adım için bu JSON nesnesini kopyalayın. Bu, şu anda yalnızca görünür olan istemci gizli dizinizi içerir. Minimum erişim vermek her zaman iyi bir uygulamadır. Bu örnekteki kapsam, kaynak grubunun tamamıyla değil yalnızca uygulamalarla sınırlıdır.

    az ad sp create-for-rbac --name "myApp" --role contributor --scopes /subscriptions/<subscription-id>/resourceGroups/myresourcegroup/providers/Microsoft.Web/sites/<web-app-east-us> /subscriptions/<subscription-id>/resourceGroups/myresourcegroup/providers/Microsoft.Web/sites/<web-app-west-us> --sdk-auth
    
  2. Hizmet sorumlunuzun kimlik bilgilerini, kullandığınız GitHub Action iş akışının bir parçası olarak Azure/oturum açma eylemine sağlamanız gerekir. Bu değerler doğrudan iş akışında sağlanabilir veya GitHub gizli dizilerinde depolanabilir ve iş akışınızda başvurulabilir. Değerleri GitHub gizli dizileri olarak kaydetmek daha güvenli bir seçenektir.

    1. GitHub deponuzu açın ve Ayarlar> Güvenlik>Gizli Dizileri ve değişkenleri>Eylemleri'ne gidin

    2. Yeni depo gizli dizisi'ni seçin ve aşağıdaki değerlerin her biri için bir gizli dizi oluşturun. Değerler, daha önce kopyaladığınız json çıkışında bulunabilir.

      Veri Akışı Adı Değer
      AZURE_APP_ID <application/client-id>
      AZURE_PASSWORD <client-secret>
      AZURE_TENANT_ID <tenant-id>
      AZURE_SUBSCRIPTION_ID <subscription-id>

GitHub Actions iş akışını oluşturma

Artık App Service uygulamalarınıza erişebilen bir hizmet sorumlunuz olduğuna göre, sürekli dağıtım yapılandırdığınızda uygulamalarınız için oluşturulan varsayılan iş akışlarını düzenleyin. Kimlik doğrulaması, yayımlama profili yerine hizmet sorumlunuz kullanılarak yapılmalıdır. Örnek iş akışları için İş akışı dosyasını GitHub deponuza ekleme'deki "Hizmet sorumlusu" sekmesine bakın. Aşağıdaki örnek iş akışı, sağlanan Node.js örnek uygulaması için kullanılabilir.

  1. Uygulamanızın GitHub deposunu açın ve dizinine <repo-name>/.github/workflows/ gidin. Otomatik olarak oluşturulan iş akışlarını görmeniz gerekir.

  2. Her iş akışı dosyası için sağ üstteki "kalem" düğmesini seçerek dosyayı düzenleyin. İçeriği, daha önce kimlik bilgileriniz için GitHub gizli dizilerini oluşturduğunuzu varsayan aşağıdaki metinle değiştirin. "env" bölümünün altındaki için yer tutucuyu <web-app-name> güncelleştirin ve ardından doğrudan ana dala işleyin. Bu işleme, github eyleminin yeniden çalıştırılmasını ve kodunuzun dağıtılması için tetikler ve bu kez kimlik doğrulaması için hizmet sorumlusunu kullanır.

    
    name: Build and deploy Node.js app to Azure Web App
    
    on:
      push:
        branches:
          - main
      workflow_dispatch:
    
    env:
      AZURE_WEBAPP_NAME: <web-app-name>   # set this to your application's name
      NODE_VERSION: '18.x'                # set this to the node version to use
      AZURE_WEBAPP_PACKAGE_PATH: '.'      # set this to the path to your web app project, defaults to the repository root
      AZURE_WEBAPP_SLOT_NAME: stage       # set this to your application's slot name
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
          - uses: actions/checkout@v2
    
          - name: Set up Node.js version
            uses: actions/setup-node@v1
            with:
              node-version: ${{ env.NODE_VERSION }}
    
          - name: npm install, build
            run: |
              npm install
              npm run build --if-present
    
          - name: Upload artifact for deployment job
            uses: actions/upload-artifact@v2
            with:
              name: node-app
              path: .
    
      deploy:
        runs-on: ubuntu-latest
        needs: build
        environment:
          name: 'stage'
          url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
    
        steps:
          - name: Download artifact from build job
            uses: actions/download-artifact@v2
            with:
              name: node-app
    
          - uses: azure/login@v1
            with:
              creds: |
                {
                  "clientId": "${{ secrets.AZURE_APP_ID }}",
                  "clientSecret":  "${{ secrets.AZURE_PASSWORD }}",
                  "subscriptionId": "${{ secrets.AZURE_SUBSCRIPTION_ID }}",
                  "tenantId": "${{ secrets.AZURE_TENANT_ID }}"
                }
    
          - name: 'Deploy to Azure Web App'
            id: deploy-to-webapp
            uses: azure/webapps-deploy@v2
            with:
              app-name: ${{ env.AZURE_WEBAPP_NAME }}
              slot-name: ${{ env.AZURE_WEBAPP_SLOT_NAME }}
              package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
    
          - name: logout
            run: |
              az logout
    

Yuva trafiği yönlendirmesi uygulamalarımda yaptığım güncelleştirmeleri test etmemi nasıl sağlar?

Yuvalarla trafik yönlendirme, kullanıcı trafiğinizin önceden tanımlanmış bir bölümünü her yuvaya yönlendirmenizi sağlar. Başlangıçta trafiğin %100'ünün üretim alanına yönlendirilmesi gerekir. Ancak, örneğin trafiğinizin %10'unu hazırlama yuvanıza gönderebilirsiniz. Yuva trafiği yönlendirmeyi bu şekilde yapılandırırsanız, kullanıcılar uygulamanıza erişmeye çalıştığında, bunların %10'unu Front Door örneğinizde hiçbir değişiklik yapılmadan otomatik olarak hazırlama yuvasına yönlendirilir. App Service'teki yuva değiştirme işlemleri ve hazırlama ortamları hakkında daha fazla bilgi edinmek için bkz. Azure Uygulaması Service'te hazırlama ortamlarını ayarlama.

Kodumu hazırlama yuvamdan üretim yuvama taşıma Nasıl yaparım??

Hazırlama yuvalarınızda test ve doğrulamayı tamamladıktan sonra hazırlama yuvanızdan üretim sitenize yuva değişimi gerçekleştirebilirsiniz. Her bölgedeki uygulamanızın tüm örnekleri için bu değişimi yapmanız gerekir. Yuva değiştirme sırasında App Service platformu hedef yuvanın kapalı kalma süresi yaşamamasını sağlar.

Değiştirme işlemini gerçekleştirmek için her uygulama için aşağıdaki komutu çalıştırın. için <web-app-name>yer tutucuyu değiştirin.

az webapp deployment slot swap --resource-group MyResourceGroup -name <web-app-name> --slot stage --target-slot production

Birkaç dakika sonra yuva değiştirme işleminin başarılı olduğunu doğrulamak için Front Door uç noktanıza gidebilirsiniz.

Bu noktada, uygulamalarınız çalışır durumdadır ve uygulama kaynak kodunuzda yaptığınız tüm değişiklikler her iki hazırlama yuvanızda da otomatik olarak bir güncelleştirme tetikler. Daha sonra bu kodu üretime taşımaya hazır olduğunuzda yuva değiştirme işlemini yineleyebilirsiniz.

Çok bölgeli dağıtımlarımda Azure Front Door'ı başka nasıl kullanabilirim?

Bazı müşteriler uygulamanızın bir sürümünü görürken diğerleri başka bir sürümü görürken bazı müşterilerde olduğu gibi bölgeler arasında olası kesintiler veya süreklilikle ilgili sorunlar hakkında endişeleriniz varsa veya uygulamalarınızda önemli değişiklikler yapıyorsanız, Front Door'unuzun kaynak grubundan yuva değişiminden geçen siteyi geçici olarak kaldırabilirsiniz. Ardından tüm trafik diğer çıkış noktalarına yönlendirilir. Kaynak grubunu güncelleştir bölmesine gidin ve Değişiklik yapılan kaynağı silin. Tüm değişikliklerinizi yaptıktan ve orada yeniden trafiğe hizmet etmeye hazır olduğunuzda, aynı bölmeye dönebilir ve kaynağı okumak için + Kaynak ekle'yi seçebilirsiniz.

Screenshot showing how to remove an Azure Front Door origin.

Çıkış noktalarını silip sonra da okumamak isterseniz Front Door örneğiniz için ek çıkış noktası grupları oluşturabilirsiniz. Ardından rotayı hedeflenen kaynağı işaret eden kaynak grubuyla ilişkilendirebilirsiniz. Örneğin, biri birincil bölgeniz, diğeri de ikincil bölgeniz için iki yeni kaynak grubu oluşturabilirsiniz. Birincil bölgenizde bir değişiklik olduğunda, yolu ikincil bölgenizle ilişkilendirin ve ikincil bölgenizde bir değişiklik olduğunda bunun tersi de geçerlidir. Tüm değişiklikler tamamlandığında, yolu her iki bölgeyi de içeren özgün kaynak grubunuzla ilişkilendirebilirsiniz. Bir yol aynı anda yalnızca bir kaynak grubuyla ilişkilendirilebildiği için bu yöntem çalışır.

Birden çok kaynakla çalışmayı göstermek için aşağıdaki ekran görüntüsünde üç kaynak grubu vardır. "MyOriginGroup", her iki web uygulamasından ve diğer iki kaynak grubundan oluşur ve her biri kendi bölgesindeki web uygulamasından oluşur. Örnekte, birincil bölgedeki uygulamada bir değişiklik yapılıyor. Bu değişiklik başlatılmadan önce, yol "MySecondaryRegion" ile ilişkilendirildi, bu nedenle tüm trafik değişiklik dönemi boyunca ikincil bölgedeki uygulamaya gönderilecekti. İlişkilendirilmemiş'i seçerek yolu güncelleştirebilirsiniz; bu da Yolları ilişkilendir bölmesini getirir.

Screenshot showing how to associate routes with Azure Front Door.

Gelişmiş araçlar sitesine erişimi kısıtlamak Nasıl yaparım??

Azure Uygulaması hizmetiyle, uygulamalarınızı yönetmek ve uygulama kaynak kodunu dağıtmak için SCM/gelişmiş araçlar sitesi kullanılır. Bu siteye büyük olasılıkla Front Door üzerinden ulaşılması gerekmediğinden SCM/gelişmiş araçlar sitesini kilitlemeyi göz önünde bulundurun. Örneğin, yalnızca testlerinizi gerçekleştirmenize ve tercih ettiğiniz araçtan sürekli dağıtımı etkinleştirmenize olanak tanıyan erişim kısıtlamaları ayarlayabilirsiniz. Özellikle üretim yuvaları için dağıtım yuvaları kullanıyorsanız, test ve doğrulama aşama yuvalarınızla yapıldığından SCM sitesine neredeyse tüm erişimi reddedebilirsiniz.

Sonraki adımlar