Azure Geliştirici CLI ile Azure App Service dağıtım yuvalarına dağıtım yapma

Azure Geliştirici CLI'sı (azd), App Service'te barındırılan uygulamalar için Azure App Service dağıtım yuvalarını destekler. Bir sürümü yükseltmeye hazır olduğunuzda altyapınızda yuvalar tanımlayabilir, kodu belirli bir yuvaya dağıtabilir ve yuvaları değiştirebilirsiniz.

Özel dağıtım betikleri eklemeden, hazırlık, mavi-yeşil dağıtımlar, duman testleri ve geri alma işlemleri için bu yaklaşımı kullanın.

Önkoşullar

  • Azure App Service'e azd hizmet dağıtan bir proje.
  • Bicep'teki App Service kaynaklarınızı tanımlayan kod olarak altyapı.
  • Standart (S1) katman veya üzeri bir App Service planı. Ücretsiz, Paylaşılan ve Temel katmanlar dağıtım yuvalarını desteklemez.

Bicep'te dağıtım yuvası tanımlama

Üretim sitenizi her zamanki gibi tanımlayın, ardından hedeflemek istediğiniz Microsoft.Web/sites/slots her yuva için bir azd kaynak ekleyin.

resource appServicePlan 'Microsoft.Web/serverfarms@2021-03-01' = {
  name: 'my-appservice-plan'
  location: resourceGroup().location
  sku: {
    name: 'S1'
    tier: 'Standard'
  }
}

resource webApp 'Microsoft.Web/sites@2021-03-01' = {
  name: 'my-appservice'
  location: resourceGroup().location
  kind: 'app'
  properties: {
    serverFarmId: appServicePlan.id
  }
}

resource stagingSlot 'Microsoft.Web/sites/slots@2021-03-01' = {
  name: '${webApp.name}/staging'
  location: webApp.location
  properties: {}
}

Azure Doğrulanmış Modülleri (AVM) kullanıyorsanız, aynı dağıtımda web uygulaması ve dağıtım yuvası modüllerini tanımlayın ve uygulama adını yuva modülüne geçirin.

azd ile slot'a dağıtma

azd up veya azd provision ve azd deploy her zamanki gibi çalıştırın.

azd up

İlk dağıtımda, azd üretim sitesine ve altyapınızda tanımlanan slotlara dağıtılır. Bu ilk dağıtım, ana uygulama ve her slota için aynı temeli oluşturur.

İlk dağıtımdan sonra yuvalar azd deploy mevcut olduğunda dağıtım hedefini seçme şeklini değiştirir. azd slotlar mevcut olduğunda doğrudan üretim uygulamasına dağıtıma devam etmez. Bunun yerine bir yuvaya dağıtıp yayını doğrular ve ardından üretim ortamına değiştirirsiniz.

azd dağıtım hedefini nasıl seçer?

Dağıtım yuvaları olan bir App Service için çalıştırıldığında azd deploy , ana uygulamadaki dağıtım geçmişini denetleyerek ve ardından kullanılabilir yuvaları değerlendirerek hedefi seçer.

Davranış aşağıdaki gibi çalışır:

  • Önceki dağıtımlar yoksa, azd ana uygulamaya ve tüm alanlara dağıtım yapar.
  • Önceki dağıtımlar varsa ve slot yoksa, azd yalnızca ana uygulamaya dağıtılır.
  • Önceki dağıtımlar varsa ve tam olarak bir yuva varsa, azd yalnızca bu yuvaya dağıtır.
  • Önceki dağıtımlar varsa ve iki veya daha fazla yuva varsa, azd bir ortam değişkeni tarafından belirtilen yuvayı kullanır veya birini seçmenizi ister.

Important

İlk dağıtımdan sonra, yuvalar mevcut olduğunda azd, doğrudan ana App Service uygulamasına dağıtılmaz. Bu davranış kasıtlıdır ve yanlışlıkla doğrudan üretime dağıtımların önlenmesine yardımcı olur. Üretimi güncellemek için bir slot'a dağıtın ve ardından slot'u üretime aktarın (@main ).

Ortam değişkeni ile bir yuva seçin

Hizmetinizde ilk dağıtımdan sonra iki veya daha fazla yuva olduğunda, dağıtmak istediğiniz hizmet için bir çevresel değişken ayarlayarak etkileşimli komut istemini atlayabilirsiniz.

Aşağıdaki biçimi kullanın:

AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME

büyük harf kullanarak ve kısa çizgileri alt çizgilerle değiştirerek içindeki azure.yaml hizmet adından değişken adını oluşturun.

Örneğin, hizmetinizin adı my-apiise kullanın AZD_DEPLOY_MY_API_SLOT_NAME.

azd env set AZD_DEPLOY_MY_API_SLOT_NAME staging
azd deploy my-api

Bu değeri, azd kullanarak ortamınızda azd env set depolayabilir veya azd deploy çalıştırmadan önce doğrudan CI sisteminizde tanımlayabilirsiniz.

Hizmetinizde tam olarak bir slot varsa, azd yalnızca tek bir olası dağıtım hedefi olduğundan ortam değişkenini tamamen yoksayar.

Hizmetinizde iki veya daha fazla yuva varsa ve ortam değişkeni ayarlanmadıysa, azd bir yuva seçmenizi ister.

Yuva algılamasını atla ve ana uygulamaya dağıt

Bazı senaryolarda yuvalar mevcut olsa bile doğrudan ana App Service uygulamasına dağıtmanız gerekir azd . Örneğin:

  • CI işlem hattınızın ana uygulamayı yenilemesi ve mevcut yuvalara dokunmaması gerekir.
  • Bozuk bir yuva durumundan kurtulmak ve üretim sitesini doğrudan yeniden dağıtmak istiyorsunuz.
  • Yeni yuvaları yapılandırmadan önce ana uygulamayı yeniden temel alıyorsunuz.

Yuva algılamasını atlamak için hizmet için aşağıdaki ortam değişkenini ayarlayın:

AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS

büyük harf kullanarak ve kısa çizgileri alt çizgilerle değiştirerek içindeki azure.yaml hizmet adından değişken adını oluşturun. Yuva algılamayı atlamak ve ana uygulamaya dağıtmak için değeri true olarak ayarlayın.

Örneğin, hizmetinizin adı my-apiise kullanın AZD_DEPLOY_MY_API_IGNORE_SLOTS.

azd env set AZD_DEPLOY_MY_API_IGNORE_SLOTS true
azd deploy my-api

AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS, true olarak ayarlandığında, azd ana uygulamaya dağıtılır ve aynı hizmet için herhangi bir AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME değerini yok sayar. Değişkenin ayarını kaldırın veya varsayılan, yuva farkındalığı olan davranışa dönmek için false olarak ayarlayın.

CI ve etkileşimsiz davranış

CI'den çalıştırdığınızda azd deploy --no-prompt veya dağıtım yaptığınızda, yuva seçimi mevcut yuva sayısına bağlı olarak farklılık gösterir:

Slotlar Ortam değişkeni davranışı Result
0 Uygulanamaz. azd ana uygulamaya dağıtım yapar.
1 AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS, true olmadıkça yok sayılır. azd yuvalar yoksayıldığında tek yuvaya veya ana uygulamaya dağıtılır.
2+ AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME istem gösterilmesini önlemek için gereklidir; ancak AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS, true ise gerekmez. azd belirtilen slota dağıtır, slotlar yok sayıldığında ana uygulamaya dağıtır veya hiçbir hedef seçilemiyorsa başarısız olur.

İki veya daha fazla slot'a sahip bir App Service için dağıtımları otomatikleştiriyorsanız, AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME işlem hattı ortamında ayarlayın ve çalıştırmadan önce azd deploy belirleyin. Slotlar varsa, CI'den doğrudan ana dala dağıtımı zorlamak için bunun yerine AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS öğesini true olarak ayarlayın.

Azure App Service dağıtım yuvalarını değiştirme

Doğrulamadan sonra yuvaları değiştirmek için uzantıyı azure.appservice kullanın. Uzantı henüz yüklü değilse, azd komutu ilk kez çalıştırdığınızda bu uzantıyı yüklemenizi ister.

Etkileşimli deneyimi çalıştırın:

azd appservice swap

Sadece bir tane üretim dışı yuva varsa, azd istemleri atlar ve doğrudan üretimle yer değiştirir.

Otomasyon için kaynak ve hedef yuvaları açıkça belirtin. Üretim yuvasına referans vermek için @main kullanın.

azd appservice swap --src staging --dst @main
azd appservice swap --src @main --dst staging
azd appservice swap --service myapi --src staging --dst @main

Yaygın yayın akışlarını desteklemek için şu desenleri kullanın:

  • İle --src staging --dst @main doğrulanmış bir hazırlama dağıtımını üretime yükseltin.
  • Üretimi --src @main --dst staging ile hazırlık yuvasına geri alarak değiştirin.
  • Çok hizmetli bir azd projede Uygulama Hizmeti destekli belirli bir hizmeti --service ile hedefleyin.

Değiştirme, yuvalar yapılandırıldıktan sonra üretimi güncelleştirmek için hedeflenen yoldur. Bir yuvayı güncelleştirmek için kullanın azd deploy , ardından bu yuvayı üretime yükseltmek için kullanın azd appservice swap .

  1. Bicep şablonlarınızda bir veya daha fazla App Service dağıtım yuvası tanımlayın.
  2. "azd provision veya azd up kullanarak App Service kaynaklarını hazırlayın."
  3. İlk dağıtımı, ana uygulamada ve her yuvada bir temel oluşturacak şekilde gerçekleştirin.
  4. İki veya daha fazla yuvalarınız varsa, daha sonraki uygulama güncellemelerini hazırlık yuvasına AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME ayarlayarak veya istendiğinde yuvalardan birini seçerek dağıtın. Yuvalar mevcut olduğunda, CI'den doğrudan ana ortama dağıtımı zorlamak için bunun yerine AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS değerini true olarak ayarlayın.
  5. Aşamalı dağıtımı doğrulayın.
  6. Yayını yükseltmek için azd appservice swap --src <slot> --dst @main komutunu çalıştırın.
  7. Gerekirse geri almak için ters swap işlemini çalıştırın.