Menyebarkan slot penyebaran Azure App Service menggunakan Azure Developer CLI

Azure Developer CLI (azd) mendukung slot penyebaran Azure App Service untuk aplikasi yang dihosting di App Service. Anda dapat menentukan slot di infrastruktur Anda, menyebarkan kode ke slot tertentu, dan menukar slot saat Anda siap untuk mempromosikan rilis.

Gunakan pendekatan ini untuk penahapan, penyebaran biru-hijau, pengujian asap, dan putar kembali tanpa menambahkan skrip penyebaran kustom.

Prasyarat

  • Proyek azd yang menyebarkan layanan ke Azure App Service.
  • Infrastruktur sebagai kode yang mendefinisikan sumber daya App Service Anda di Bicep.
  • Paket App Service pada tingkat Standar (S1) atau yang lebih tinggi. Tingkat Gratis, Bersama, dan Dasar tidak mendukung slot penyebaran.

Menentukan slot penyebaran di Bicep

Tentukan situs produksi Anda seperti biasa, lalu tambahkan Microsoft.Web/sites/slots sumber daya untuk setiap slot yang ingin azd Anda targetkan.

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: {}
}

Jika Anda menggunakan Modul Terverifikasi Azure (AVM), definisikan aplikasi web dan modul slot penyebaran dalam satu penyebaran yang sama lalu teruskan nama aplikasi ke modul slot.

Menyebarkan ke slot dengan azd

Jalankan azd up atau azd provision dan azd deploy seperti biasa.

azd up

Pada penyebaran pertama, azd akan diterapkan ke situs produksi dan slot apa pun yang ditentukan dalam infrastruktur Anda. Penyebaran pertama ini menetapkan garis besar yang sama di seluruh aplikasi utama dan setiap slot.

Setelah penyebaran pertama, azd deploy mengubah cara memilih target penyebaran ketika slot ada. azd tidak terus menyebarkan langsung ke aplikasi produksi saat slot tersedia. Sebagai gantinya, Anda menyebarkan ke slot, memvalidasi rilis, lalu memindahkannya ke lingkungan produksi.

Cara azd memilih target penyebaran

Saat azd deploy dijalankan untuk App Service yang memiliki slot penyebaran, app Service memilih target dengan memeriksa riwayat penyebaran pada aplikasi utama lalu mengevaluasi slot yang tersedia.

Perilaku berfungsi sebagai berikut:

  • Jika tidak ada penyebaran sebelumnya, azd sebarkan ke aplikasi utama dan semua slot.
  • Jika penyebaran sebelumnya ada dan tidak ada slot, azd menyebarkan ke aplikasi utama saja.
  • Jika penyebaran sebelumnya sudah ada dan hanya ada tepat satu slot, azd akan diterapkan ke slot tersebut saja.
  • Jika penyebaran sebelumnya ada dan dua slot atau lebih ada, azd gunakan slot yang ditentukan oleh variabel lingkungan atau meminta Anda untuk memilihnya.

Important

Setelah penyebaran pertama, azd tidak langsung menyebar ke aplikasi App Service utama jika slot tersedia. Perilaku ini disengaja dan membantu mencegah penempatan langsung ke lingkungan produksi yang tidak disengaja. Untuk memperbarui produksi, terapkan ke slot lalu tukar slot ke produksi (@main).

Pilih slot dengan variabel lingkungan

Saat layanan Anda memiliki dua slot atau lebih setelah penyebaran pertama, Anda dapat melewati perintah interaktif dengan mengatur variabel lingkungan untuk layanan yang ingin Anda sebarkan.

Gunakan format berikut:

AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME

Buat nama variabel dari nama layanan dengan azure.yaml menggunakan huruf besar dan ganti tanda hubung dengan garis bawah.

Misalnya, jika layanan Anda bernama my-api, gunakan AZD_DEPLOY_MY_API_SLOT_NAME.

azd env set AZD_DEPLOY_MY_API_SLOT_NAME staging
azd deploy my-api

Anda dapat menyimpan nilai ini di lingkungan Anda azd dengan menggunakan azd env set, atau menentukannya langsung di sistem CI Anda sebelum menjalankan azd deploy.

Jika layanan Anda memiliki tepat satu slot, azd abaikan variabel lingkungan karena hanya ada satu kemungkinan target penyebaran.

Jika layanan Anda memiliki dua slot atau lebih dan variabel lingkungan tidak diatur, azd meminta Anda untuk memilih slot.

Lewati deteksi slot dan terapkan ke aplikasi utama

Dalam beberapa skenario, Anda perlu azd menyebarkan langsung ke aplikasi App Service utama meskipun slot tersedia. Contohnya:

  • Alur CI Anda perlu me-refresh aplikasi utama sambil membiarkan slot yang ada tidak tersentuh.
  • Anda sedang memulihkan slot yang berada dalam kondisi buruk dan ingin mendeploy ulang situs produksi secara langsung.
  • Anda sedang mengatur ulang baseline aplikasi utama sebelum mengonfigurasi slot baru.

Untuk melewati deteksi slot, atur variabel lingkungan berikut untuk layanan:

AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS

Buat nama variabel dari nama layanan dengan azure.yaml menggunakan huruf besar dan ganti tanda hubung dengan garis bawah. Atur nilai ke true untuk melewati deteksi slot dan menyebarkan ke aplikasi utama.

Misalnya, jika layanan Anda bernama my-api, gunakan AZD_DEPLOY_MY_API_IGNORE_SLOTS.

azd env set AZD_DEPLOY_MY_API_IGNORE_SLOTS true
azd deploy my-api

Ketika AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS diatur ke true, azd disebarkan ke aplikasi utama dan mengabaikan nilai apa pun AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME untuk layanan yang sama. Hapus setelan variabel atau atur ke false untuk kembali ke perilaku default yang mengenali slot.

Perilaku CI dan noninteraktif

Saat Anda menjalankan azd deploy --no-prompt atau menyebarkan dari CI, pemilihan slot berperilaku berbeda tergantung pada berapa banyak slot yang tersedia:

Slot Perilaku variabel lingkungan Result
0 Tidak dapat diterapkan. azd menyebarkan ke aplikasi utama.
1 Diabaikan kecuali AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS adalah true. azd menerapkan ke satu-satunya slot, atau ke aplikasi utama jika slot diabaikan.
2+ AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME diperlukan untuk menghindari permintaan, kecuali AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS adalah true. azd menyebarkan ke slot yang ditentukan, menyebarkan ke aplikasi utama saat slot diabaikan, atau gagal jika tidak ada target yang dapat dipilih.

Jika Anda mengotomatiskan penyebaran untuk App Service yang memiliki dua slot atau lebih, atur AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME di lingkungan alur sebelum menjalankan azd deploy. Untuk memaksa penyebaran langsung ke utama dari CI saat slot ada, atur AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS ke true sebagai gantinya.

Tukar slot penyebaran di Azure App Service

azure.appservice Gunakan ekstensi untuk menukar slot setelah validasi. Jika ekstensi belum diinstal, azd meminta Anda untuk menginstalnya saat pertama kali Menjalankan perintah.

Jalankan pengalaman interaktif:

azd appservice swap

Jika hanya ada satu slot nonproduksi, azd melewatkan petunjuk dan langsung bertukar dengan slot produksi.

Untuk otomatisasi, tentukan slot sumber dan tujuan secara eksplisit. Gunakan @main untuk mereferensikan slot produksi.

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

Gunakan pola ini untuk mendukung alur rilis umum:

  • Promosikan penyebaran penahapan yang divalidasi ke produksi dengan --src staging --dst @main.
  • Gulung balik dengan menukar produksi kembali ke slot penahapan dengan --src @main --dst staging.
  • Targetkan layanan tertentu yang didukung App Service dalam proyek multiservice azd dengan --service.

Pertukaran adalah jalur yang dimaksudkan untuk memperbarui produksi setelah slot dikonfigurasi. Gunakan azd deploy untuk memperbarui slot, lalu gunakan azd appservice swap untuk mempromosikan slot tersebut ke dalam produksi.

  1. Tentukan satu atau beberapa slot penyebaran App Service di templat Bicep Anda.
  2. Provisikan sumber daya App Service dengan menggunakan azd provision atau azd up.
  3. Biarkan penerapan pertama menetapkan garis dasar pada aplikasi utama dan setiap slot.
  4. Sebarkan pembaruan aplikasi nanti ke slot penahapan dengan mengatur AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME saat Anda memiliki dua slot atau lebih, atau dengan memilih slot saat diminta. Untuk memaksa penyebaran langsung ke utama dari CI saat slot ada, atur AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS ke true sebagai gantinya.
  5. Validasi penyebaran bertahap.
  6. Jalankan azd appservice swap --src <slot> --dst @main untuk mempromosikan rilis.
  7. Jika diperlukan, jalankan pertukaran terbalik untuk menggulung balik.