Tutorial: Membuat aplikasi multi-wilayah yang sangat tersedia di Azure App Service
Ketersediaan tinggi dan toleransi kesalahan adalah komponen utama dari solusi yang dirancang dengan baik. Yang terbaik adalah mempersiapkan diri untuk hal yang tidak terduga dengan memiliki rencana darurat yang dapat mempersingkat waktu henti dan menjaga sistem Anda tetap aktif dan berjalan secara otomatis ketika sesuatu gagal.
Saat menyebarkan aplikasi ke cloud, Anda memilih wilayah di cloud tempat infrastruktur aplikasi Anda berada. Jika aplikasi Anda disebarkan ke satu wilayah dan wilayah menjadi tidak tersedia, aplikasi Anda juga tidak akan tersedia. Kurangnya ketersediaan ini mungkin tidak dapat diterima berdasarkan ketentuan SLA aplikasi Anda. Jika demikian, menyebarkan aplikasi Anda dan layanannya di beberapa wilayah adalah solusi yang baik.
Dalam tutorial ini, Anda mempelajari cara menyebarkan aplikasi web multi-wilayah yang sangat tersedia. Skenario ini tetap sederhana dengan membatasi komponen aplikasi hanya untuk aplikasi web dan Azure Front Door, tetapi konsepnya dapat diperluas dan diterapkan ke pola infrastruktur lainnya. Misalnya, jika aplikasi Anda tersambung ke penawaran database Azure atau akun penyimpanan, lihat replikasi geografis aktif untuk database SQL dan opsi redundansi untuk akun penyimpanan. Untuk arsitektur referensi untuk skenario yang lebih rinci, lihat Aplikasi web multi-wilayah yang sangat tersedia.
Diagram arsitektur berikut menunjukkan infrastruktur yang Anda buat dalam tutorial ini. Ini terdiri dari dua App Services yang identik di wilayah terpisah, satu menjadi wilayah aktif atau utama, dan yang lainnya adalah wilayah siaga atau sekunder. Azure Front Door digunakan untuk merutekan lalu lintas ke App Services dan pembatasan akses dikonfigurasi sehingga akses langsung ke aplikasi dari internet diblokir. Garis putus-putus menunjukkan bahwa lalu lintas dikirim ke wilayah siaga hanya jika wilayah aktif turun.
Azure menyediakan berbagai opsi untuk penyeimbangan beban dan perutean lalu lintas. Azure Front Door dipilih untuk kasus penggunaan ini karena melibatkan aplikasi web yang menghadap internet yang dihosting di Azure App Service yang disebarkan di beberapa wilayah. Untuk membantu Anda memutuskan apa yang akan digunakan untuk kasus penggunaan Anda jika berbeda dari tutorial ini, lihat pohon keputusan untuk penyeimbangan beban di Azure.
Dengan arsitektur ini:
- Aplikasi App Service yang identik disebarkan di dua wilayah terpisah.
- Lalu lintas publik langsung ke aplikasi App Service diblokir.
- Azure Front Door digunakan merutekan lalu lintas ke wilayah utama/aktif. Wilayah sekunder memiliki App Service yang aktif dan berjalan dan siap melayani lalu lintas jika diperlukan.
Yang akan Anda pelajari:
- Buat App Services yang identik di wilayah terpisah.
- Buat Azure Front Door dengan pembatasan akses yang memblokir akses publik ke App Services.
Prasyarat
Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.
Untuk menyelesaikan tutorial ini:
Gunakan lingkungan Bash di Azure Cloud Shell. Untuk informasi selengkapnya, lihat Mulai Cepat untuk Bash di Azure Cloud Shell.
Jika Anda lebih suka menjalankan perintah referensi CLI secara lokal, instal Azure CLI. Jika Anda menjalankan Windows atau macOS, pertimbangkan untuk menjalankan Azure CLI dalam kontainer Docker. Untuk informasi lebih lanjut, lihat Cara menjalankan Azure CLI di kontainer Docker.
Jika Anda menggunakan instalasi lokal, masuk ke Azure CLI dengan menggunakan perintah login az. Untuk menyelesaikan proses autentikasi, ikuti langkah-langkah yang ditampilkan di terminal Anda. Untuk opsi masuk lainnya, lihat Masuk dengan Azure CLI.
Saat Anda diminta, instal ekstensi Azure CLI pada penggunaan pertama. Untuk informasi selengkapnya tentang ekstensi, lihat Menggunakan ekstensi dengan Azure CLI.
Jalankan versi az untuk menemukan versi dan pustaka dependen yang diinstal. Untuk meningkatkan ke versi terbaru, jalankan peningkatan az.
Membuat dua instans aplikasi web
Anda memerlukan dua instans aplikasi web yang berjalan di wilayah Azure yang berbeda untuk tutorial ini. Anda menggunakan pasangan wilayah US Timur/US Barat sebagai dua wilayah Anda dan membuat dua aplikasi web kosong. Jangan ragu untuk memilih wilayah Anda sendiri jika diperlukan.
Untuk membuat manajemen dan pembersihan lebih sederhana, Anda menggunakan satu grup sumber daya untuk semua sumber daya dalam tutorial ini. Pertimbangkan untuk menggunakan grup sumber daya terpisah untuk setiap wilayah/sumber daya untuk mengisolasi sumber daya Anda lebih lanjut dalam situasi pemulihan bencana.
Jalankan perintah berikut untuk membuat grup sumber daya Anda.
az group create --name myresourcegroup --location eastus
Buat perencanaan App Service
Jalankan perintah berikut untuk membuat paket App Service. Ganti tempat penampung untuk <app-service-plan-east-us>
dan <app-service-plan-west-us>
dengan dua nama unik tempat Anda dapat dengan mudah mengidentifikasi wilayah tempat mereka berada.
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
Membuat aplikasi web
Setelah paket App Service dibuat, jalankan perintah berikut untuk membuat aplikasi web. Ganti tempat penampung untuk <web-app-east-us>
dan <web-app-west-us>
dengan dua nama unik global (karakter yang valid adalah a-z
, , 0-9
dan -
) dan pastikan untuk memperhatikan --plan
parameter sehingga Anda menempatkan satu aplikasi di setiap paket (dan oleh karena itu di setiap wilayah).
<runtime>
Ganti parameter dengan versi bahasa aplikasi Anda. Jalankan az webapp list-runtimes
untuk daftar runtime yang tersedia. Jika Anda berencana menggunakan contoh aplikasi Node.js yang diberikan dalam tutorial ini di bagian berikut, gunakan NODE:18-lts
sebagai runtime Anda.
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>
Catat nama host default setiap aplikasi web sehingga Anda dapat menentukan alamat backend saat Anda menyebarkan Front Door di langkah berikutnya. Ini harus dalam format <web-app-name>.azurewebsites.net
. Nama host ini dapat ditemukan dengan menjalankan perintah berikut atau dengan menavigasi ke halaman Gambaran Umum aplikasi di portal Azure.
az webapp show --name <web-app-name> --resource-group myresourcegroup --query "hostNames"
Membuat profil Azure Front Door
Penyebaran multi-wilayah dapat menggunakan konfigurasi aktif-aktif atau pasif aktif. Konfigurasi aktif-aktif mendistribusikan permintaan di beberapa wilayah yang aktif. Konfigurasi aktif-pasif terus menjalankan instans di wilayah sekunder, tetapi tidak mengirim lalu lintas ke sana kecuali wilayah utama gagal. Azure Front Door memiliki fitur bawaan yang memungkinkan Anda mengaktifkan konfigurasi ini. Untuk informasi selengkapnya tentang merancang aplikasi untuk ketersediaan tinggi dan toleransi kesalahan, lihat Merancang aplikasi Azure untuk ketahanan dan ketersediaan.
Membuat profil Azure Front Door
Anda sekarang membuat Azure Front Door Premium untuk merutekan lalu lintas ke aplikasi Anda.
Jalankan az afd profile create
untuk membuat profil Azure Front Door.
Catatan
Jika Anda ingin menyebarkan Azure Front Door Standard alih-alih Premium, ganti nilai --sku
parameter dengan Standard_AzureFrontDoor. Anda tidak dapat menyebarkan aturan terkelola dengan Kebijakan WAF jika Anda memilih tingkat Standar. Untuk perbandingan terperinci tentang tingkat harga, lihat Perbandingan tingkat Azure Front Door.
az afd profile create --profile-name myfrontdoorprofile --resource-group myresourcegroup --sku Premium_AzureFrontDoor
Parameter | Nilai | Deskripsi |
---|---|---|
profile-name |
myfrontdoorprofile |
Nama untuk profil Azure Front Door, yang unik dalam grup sumber daya. |
resource-group |
myresourcegroup |
Grup sumber daya yang berisi sumber daya dari tutorial ini. |
sku |
Premium_AzureFrontDoor |
Tingkat harga profil Azure Front Door. |
Tambahkan titik akhir
Jalankan az afd endpoint create
untuk membuat titik akhir di profil Anda. Anda dapat membuat beberapa titik akhir di profil Anda setelah menyelesaikan pengalaman membuat.
az afd endpoint create --resource-group myresourcegroup --endpoint-name myendpoint --profile-name myfrontdoorprofile --enabled-state Enabled
Parameter | Nilai | Deskripsi |
---|---|---|
endpoint-name |
myendpoint |
Nama titik akhir di bawah profil, yang unik secara global. |
enabled-state |
Enabled |
Apakah akan mengaktifkan titik akhir ini. |
Membuat grup asal
Jalankan az afd origin-group create
untuk membuat grup asal yang berisi dua aplikasi web Anda.
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
Parameter | Nilai | Deskripsi |
---|---|---|
origin-group-name |
myorigingroup |
Nama grup asal. |
probe-request-type |
GET |
Jenis permintaan pemeriksaan kesehatan yang dibuat. |
probe-protocol |
Http |
Protokol yang digunakan untuk pemeriksaan kesehatan. |
probe-interval-in-seconds |
60 |
Jumlah detik antara pemeriksaan kesehatan. |
probe-path |
/ |
Jalur relatif terhadap asal yang digunakan untuk menentukan kesehatan asal. |
sample-size |
4 |
Jumlah sampel yang perlu dipertimbangkan untuk keputusan penyeimbangan beban. |
successful-samples-required |
3 |
Jumlah sampel dalam periode sampel yang harus berhasil. |
additional-latency-in-milliseconds |
50 |
Latensi ekstra dalam milidetik untuk pemeriksaan jatuh ke dalam wadah latensi terendah. |
Menambahkan asal ke grup
Jalankan az afd origin create
untuk menambahkan asal ke grup asal Anda. Untuk parameter , ganti tempat penampung untuk <web-app-east-us>
dengan nama aplikasi Anda di wilayah tersebut--host-name
.
--priority
Perhatikan bahwa parameter diatur ke 1
, yang menunjukkan semua lalu lintas dikirim ke aplikasi utama Anda.
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
Parameter | Nilai | Deskripsi |
---|---|---|
host-name |
<web-app-east-us>.azurewebsites.net |
Nama host aplikasi web utama. |
origin-name |
primaryapp |
Nama asal. |
origin-host-header |
<web-app-east-us>.azurewebsites.net |
Header host yang akan dikirim untuk permintaan ke asal ini. Jika Anda membiarkan ini kosong, nama host permintaan menentukan nilai ini. Asal-usul Azure CDN, seperti Web Apps, Blob Storage, dan Cloud Services memerlukan nilai header host ini agar sesuai dengan nama host asal secara default. |
priority |
1 |
Atur parameter ini ke 1 untuk mengarahkan semua lalu lintas ke aplikasi web utama. |
weight |
1000 |
Berat asal dalam grup asal yang diberikan untuk penyeimbangan beban. Harus antara 1 dan 1000. |
enabled-state |
Enabled |
Apakah akan mengaktifkan asal ini. |
http-port |
80 |
Port yang digunakan untuk permintaan HTTP ke asal. |
https-port |
443 |
Port yang digunakan untuk permintaan HTTPS ke asal. |
Ulangi langkah ini untuk menambahkan asal kedua Anda. Perhatikan --priority
parameter . Untuk asal ini, diatur ke 2
. Pengaturan prioritas ini memberi tahu Azure Front Door untuk mengarahkan semua lalu lintas ke asal utama kecuali jika primer tidak berfungsi. Jika Anda mengatur prioritas untuk asal ini ke 1
, Azure Front Door memperlakukan asal sebagai lalu lintas aktif dan langsung ke kedua wilayah. Pastikan untuk mengganti kedua instans tempat penampung <web-app-west-us>
dengan nama aplikasi web tersebut.
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
Menambahkan rute
Jalankan az afd route create
untuk memetakan titik akhir Anda ke grup asal. Rute ini meneruskan permintaan dari titik akhir ke myOriginGroup.
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
Parameter | Nilai | Deskripsi |
---|---|---|
endpoint-name |
myendpoint |
Nama titik akhir. |
protokol penerusan | MatchRequest | Protokol yang digunakan aturan ini saat meneruskan lalu lintas ke backend. |
route-name |
route |
Nama rute. |
https-redirect | Enabled |
Apakah akan mengalihkan lalu lintas HTTP secara otomatis ke lalu lintas HTTPS. |
supported-protocols |
Http Https |
Daftar protokol yang didukung untuk rute ini. |
link-to-default-domain |
Enabled |
Apakah rute ini ditautkan ke domain titik akhir default. |
Izinkan sekitar 15 menit agar langkah ini selesai karena perlu beberapa waktu agar perubahan ini menyebar secara global. Setelah periode ini, Azure Front Door Anda berfungsi penuh.
Membatasi akses ke aplikasi web ke instans Azure Front Door
Pada titik ini, Anda masih dapat mengakses aplikasi secara langsung menggunakan URL mereka pada saat ini. Untuk memastikan lalu lintas hanya dapat menjangkau aplikasi Anda melalui Azure Front Door, Anda menetapkan pembatasan akses pada setiap aplikasi Anda. Fitur Front Door berfungsi paling baik ketika lalu lintas hanya mengalir melalui Front Door. Anda harus mengonfigurasi asal Anda untuk memblokir lalu lintas yang belum dikirim melalui Front Door. Jika tidak, lalu lintas mungkin melewati firewall aplikasi web Front Door, perlindungan DDoS, dan fitur keamanan lainnya. Lalu lintas dari Azure Front Door ke aplikasi Anda berasal dari serangkaian rentang IP terkenal yang ditentukan dalam AzureFrontDoor.Backend
tag layanan. Dengan menggunakan aturan pembatasan tag layanan, Anda dapat membatasi lalu lintas hanya berasal dari Azure Front Door.
Sebelum menyiapkan pembatasan akses App Service, perhatikan ID Front Door dengan menjalankan perintah berikut. ID ini diperlukan untuk memastikan lalu lintas hanya berasal dari instans Front Door spesifik Anda. Pembatasan akses selanjutnya memfilter permintaan masuk berdasarkan header HTTP unik yang dikirim Azure Front Door Anda.
az afd profile show --resource-group myresourcegroup --profile-name myfrontdoorprofile --query "frontDoorId"
Jalankan perintah berikut untuk mengatur pembatasan akses di aplikasi web Anda. Ganti tempat penampung untuk <front-door-id>
dengan hasil dari perintah sebelumnya. Ganti tempat penampung untuk nama aplikasi.
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>
Uji Front Door
Saat Anda membuat profil Azure Front Door Standar/Premium, diperlukan beberapa menit agar konfigurasi diterapkan secara global. Setelah selesai, Anda dapat mengakses host frontend yang Anda buat.
Jalankan az afd endpoint show
untuk mendapatkan nama host titik akhir Front Door.
az afd endpoint show --resource-group myresourcegroup --profile-name myfrontdoorprofile --endpoint-name myendpoint --query "hostName"
Di browser, buka nama host titik akhir yang dikembalikan perintah sebelumnya: <myendpoint>-<hash>.z01.azurefd.net
. Permintaan Anda akan secara otomatis dirutekan ke aplikasi utama di US Timur.
Untuk menguji failover global instan:
Buka browser dan buka nama host titik akhir:
<myendpoint>-<hash>.z01.azurefd.net
.Hentikan aplikasi utama dengan menjalankan az webapp stop.
az webapp stop --name <web-app-east-us> --resource-group myresourcegroup
Refresh browser Anda. Anda akan melihat halaman informasi yang sama karena lalu lintas sekarang diarahkan ke aplikasi yang sedang berjalan di US Barat.
Tip
Anda mungkin perlu me-refresh halaman beberapa kali agar failover selesai.
Sekarang hentikan aplikasi sekunder.
az webapp stop --name <web-app-west-us> --resource-group myresourcegroup
Refresh browser Anda. Kali ini, Anda akan melihat pesan kesalahan.
Hidupkan ulang salah satu Web Apps dengan cara menjalankan az webapp start. Refresh browser Anda dan Anda akan melihat aplikasi lagi.
az webapp start --name <web-app-east-us> --resource-group myresourcegroup
Anda sekarang telah memvalidasi bahwa Anda dapat mengakses aplikasi melalui Azure Front Door dan failover tersebut berfungsi seperti yang dimaksudkan. Mulai ulang aplikasi lain jika Anda sudah selesai dengan pengujian failover.
Untuk menguji pembatasan akses dan memastikan aplikasi Anda hanya dapat dijangkau melalui Azure Front Door, buka browser dan navigasikan ke setiap URL aplikasi Anda. Untuk menemukan URL, jalankan perintah berikut:
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"
Anda akan melihat halaman kesalahan yang menunjukkan bahwa aplikasi tidak dapat diakses.
Membersihkan sumber daya
Di langkah-langkah sebelumnya, Anda membuat sumber daya Azure dalam grup sumber daya. Jika Anda tidak ingin membutuhkan sumber daya ini di masa mendatang, hapus grup sumber daya dengan menjalankan perintah berikut ini di Cloud Shell.
az group delete --name myresourcegroup
Perintah ini mungkin perlu waktu beberapa menit untuk dijalankan.
Menyebarkan dari ARM/Bicep
Sumber daya yang Anda buat dalam tutorial ini dapat disebarkan menggunakan templat ARM/Bicep. Templat Bicep aplikasi web multi-wilayah yang sangat tersedia memungkinkan Anda membuat solusi ujung ke ujung multi-wilayah yang aman, sangat tersedia dengan dua aplikasi web di berbagai wilayah di belakang Azure Front Door.
Untuk mempelajari cara menyebarkan templat ARM/Bicep, lihat Cara menyebarkan sumber daya dengan Bicep dan Azure CLI.
Tanya jawab umum
Dalam tutorial ini sejauh ini, Anda telah menyebarkan infrastruktur dasar untuk mengaktifkan aplikasi web multi-wilayah. App Service menyediakan fitur yang dapat membantu Anda memastikan Anda menjalankan aplikasi mengikuti praktik dan rekomendasi terbaik keamanan.
Bagian ini berisi pertanyaan yang sering diajukan yang dapat membantu Anda mengamankan aplikasi lebih lanjut dan menyebarkan dan mengelola sumber daya Anda menggunakan praktik terbaik.
Apa metode yang direkomendasikan untuk mengelola dan menyebarkan infrastruktur aplikasi dan sumber daya Azure?
Untuk tutorial ini, Anda menggunakan Azure CLI untuk menyebarkan sumber daya infrastruktur Anda. Pertimbangkan untuk mengonfigurasi mekanisme penyebaran berkelanjutan untuk mengelola infrastruktur aplikasi Anda. Karena Anda menyebarkan sumber daya di berbagai wilayah, Anda perlu mengelola sumber daya tersebut secara independen di seluruh wilayah. Untuk memastikan sumber daya identik di setiap wilayah, infrastruktur sebagai kode (IaC) seperti templat Azure Resource Manager atau Terraform harus digunakan dengan alur penyebaran seperti Azure Pipelines atau GitHub Actions. Dengan cara ini, jika dikonfigurasi dengan tepat, setiap perubahan pada sumber daya akan memicu pembaruan di semua wilayah tempat Anda disebarkan. Untuk informasi selengkapnya, lihat Penyebaran berkelanjutan ke Azure App Service.
Bagaimana cara menggunakan slot penahapan untuk mempraktikkan penyebaran yang aman ke produksi?
Menyebarkan kode aplikasi Anda langsung ke aplikasi/slot produksi tidak disarankan. Ini karena Anda ingin memiliki tempat yang aman untuk menguji aplikasi dan memvalidasi perubahan yang Anda buat sebelum mendorong ke produksi. Gunakan kombinasi slot penahapan dan pertukaran slot untuk memindahkan kode dari lingkungan pengujian Anda ke produksi.
Anda sudah membuat infrastruktur garis besar untuk skenario ini. Sekarang, Anda membuat slot penyebaran untuk setiap instans aplikasi Anda dan mengonfigurasi penyebaran berkelanjutan ke slot penahapan ini dengan GitHub Actions. Seperti halnya manajemen infrastruktur, mengonfigurasi penyebaran berkelanjutan untuk kode sumber aplikasi Anda juga disarankan untuk memastikan perubahan di seluruh wilayah sinkron. Jika tidak mengonfigurasi penyebaran berkelanjutan, Anda harus memperbarui setiap aplikasi secara manual di setiap wilayah setiap kali ada perubahan kode.
Untuk langkah-langkah yang tersisa dalam tutorial ini, Anda harus memiliki aplikasi yang siap disebarkan ke App Services Anda. Jika memerlukan aplikasi sampel, Anda dapat menggunakan aplikasi sampel Node.js Halo Dunia. Fork repositori itu sehingga Anda memiliki salinan Anda sendiri.
Pastikan untuk mengatur pengaturan tumpukan App Service untuk aplikasi Anda. Pengaturan tumpukan mengacu pada bahasa atau runtime yang digunakan untuk aplikasi Anda. Pengaturan ini dapat dikonfigurasi menggunakan Azure CLI dengan az webapp config set
perintah atau di portal dengan langkah-langkah berikut. Jika Anda menggunakan sampel Node.js, atur pengaturan tumpukan ke Node 18 LTS.
- Buka aplikasi Anda dan pilih Konfigurasi di daftar isi sebelah kiri.
- Pilih tab Pengaturan umum.
- Di bawah Pengaturan tumpukan, pilih nilai yang sesuai untuk aplikasi Anda.
- Pilih Simpan lalu Lanjutkan untuk mengonfirmasi pembaruan.
- Ulangi langkah-langkah ini untuk aplikasi Anda yang lain.
Jalankan perintah berikut untuk membuat slot penahapan yang disebut "tahap" untuk setiap aplikasi Anda. Ganti tempat penampung untuk <web-app-east-us>
dan <web-app-west-us>
dengan nama aplikasi Anda.
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>
Untuk menyiapkan penyebaran berkelanjutan, Anda harus menggunakan portal Azure. Untuk panduan terperinci tentang cara mengonfigurasi penyebaran berkelanjutan dengan penyedia seperti GitHub Actions, lihat Penyebaran berkelanjutan ke Azure App Service.
Untuk mengonfigurasi penyebaran berkelanjutan dengan GitHub Actions, selesaikan langkah-langkah berikut untuk setiap slot penahapan Anda.
Di portal Azure, buka halaman manajemen untuk salah satu slot aplikasi App Service Anda.
Di kiri panel, pilih Pusat Penyebaran. Lalu pilih Pengaturan.
Dalam kotak Sumber , pilih "GitHub" dari opsi CI/CD:
Jika Anda menyebarkan dari GitHub untuk pertama kalinya, pilih Otorisasi dan ikuti permintaan otoritasi. Jika Anda ingin menyebar dari repositori pengguna yang berbeda, pilih Ubah Akun.
Setelah Anda mengotorisasi akun Azure Anda dengan GitHub, pilih Organisasi, Repositori, danCabang untuk mengonfigurasi CI/CD. Jika Anda tidak dapat menemukan organisasi atau repositori, Anda mungkin perlu mengaktifkan lebih banyak izin pada GitHub. Untuk informasi selengkapnya, lihat Mengelola akses ke repositori organisasi Anda.
Jika Anda menggunakan aplikasi sampel Node.js, gunakan pengaturan berikut.
Pengaturan Nilai Organization <your-GitHub-organization>
Repositori nodejs-docs-hello-world Cabang utama
Pilih Simpan.
Penerapan baru di repositori dan cabang yang dipilih sekarang disebarkan terus-menerus ke slot aplikasi App Service Anda. Anda dapat melacak penerapan dan penyebaran pada tab Log.
File alur kerja default yang menggunakan profil penerbitan untuk mengautentikasi ke App Service ditambahkan ke repositori GitHub Anda. Anda dapat melihat file ini dengan masuk ke <repo-name>/.github/workflows/
direktori.
Bagaimana cara menonaktifkan autentikasi dasar di App Service?
Pertimbangkan untuk menonaktifkan autentikasi dasar, yang membatasi akses ke titik akhir FTP dan SCM kepada pengguna yang didukung oleh ID Microsoft Entra. Jika menggunakan alat penyebaran berkelanjutan untuk menyebarkan kode sumber aplikasi Anda, menonaktifkan autentikasi dasar memerlukan langkah tambahan untuk mengonfigurasi penyebaran berkelanjutan. Misalnya, Anda tidak dapat menggunakan profil penerbitan karena tidak menggunakan kredensial Microsoft Entra. Sebagai gantinya, Anda perlu menggunakan perwakilan layanan atau OpenID Connect.
Untuk menonaktifkan autentikasi dasar untuk App Service Anda, jalankan perintah berikut untuk setiap aplikasi dan slot dengan mengganti tempat penampung untuk <web-app-east-us>
dan <web-app-west-us>
dengan nama aplikasi Anda. Kumpulan perintah pertama menonaktifkan akses FTP untuk situs produksi dan slot penahapan, dan kumpulan perintah kedua menonaktifkan akses autentikasi dasar ke port WebDeploy dan situs SCM untuk situs produksi dan slot penahapan.
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
Untuk informasi selengkapnya tentang menonaktifkan autentikasi dasar termasuk cara menguji dan memantau rincian masuk, lihat Menonaktifkan autentikasi dasar dalam penyebaran App Service.
Bagaimana cara menyebarkan kode saya menggunakan penyebaran berkelanjutan jika saya menonaktifkan autentikasi dasar?
Jika Anda memilih untuk mengizinkan autentikasi dasar di aplikasi App Service, Anda dapat menggunakan salah satu metode penyebaran yang tersedia di App Service, termasuk menggunakan profil penerbitan yang dikonfigurasi di bagian slot penahapan.
Jika Anda menonaktifkan autentikasi dasar untuk App Services, penyebaran berkelanjutan memerlukan perwakilan layanan atau OpenID Connect untuk autentikasi. Jika Anda menggunakan GitHub Actions sebagai repositori kode Anda, lihat tutorial langkah demi langkah untuk menggunakan perwakilan layanan atau OpenID Connect untuk menyebarkan ke App Service menggunakan GitHub Actions atau menyelesaikan langkah-langkah di bagian berikut.
Membuat perwakilan layanan dan mengonfigurasi kredensial dengan GitHub Actions
Untuk mengonfigurasi penyebaran berkelanjutan dengan GitHub Actions dan perwakilan layanan, gunakan langkah-langkah berikut.
Jalankan perintah berikut untuk membuat perwakilan layanan. Ganti tempat penampung dengan nama aplikasi dan Anda
<subscription-id>
. Output adalah objek JSON dengan kredensial penetapan peran yang menyediakan akses ke aplikasi App Service Anda. Salin objek JSON ini untuk langkah berikutnya. Ini termasuk rahasia klien Anda, yang hanya terlihat saat ini. Ada baiknya untuk memberikan akses minimum. Cakupan dalam contoh ini terbatas hanya pada aplikasi, bukan seluruh grup sumber daya.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
Anda perlu memberikan kredensial perwakilan layanan Anda ke tindakan Azure/login sebagai bagian dari alur kerja GitHub Action yang Anda gunakan. Nilai ini bisa disediakan secara langsung di alur kerja atau bisa disimpan di rahasia GitHub dan direferensikan dalam alur kerja Anda. Menyimpan nilai sebagai GitHub rahasia adalah opsi yang lebih aman.
Buka repositori GitHub Anda dan buka Pengaturan>Rahasia Keamanan>dan Tindakan variabel>
Pilih Rahasia repositori baru dan buat rahasia untuk setiap nilai berikut. Nilai dapat ditemukan di output json yang Anda salin sebelumnya.
Nama Nilai AZURE_APP_ID <application/client-id>
AZURE_PASSWORD <client-secret>
AZURE_TENANT_ID <tenant-id>
AZURE_SUBSCRIPTION_ID <subscription-id>
Membuat alur kerja Tindakan GitHub
Sekarang setelah Anda memiliki perwakilan layanan yang dapat mengakses aplikasi App Service Anda, edit alur kerja default yang dibuat untuk aplikasi Anda saat Anda mengonfigurasi penyebaran berkelanjutan. Autentikasi harus dilakukan menggunakan perwakilan layanan Anda alih-alih profil penerbitan. Untuk contoh alur kerja, lihat tab "Perwakilan layanan" di Menambahkan file alur kerja ke repositori GitHub Anda. Contoh alur kerja berikut dapat digunakan untuk aplikasi sampel Node.js yang disediakan.
Buka repositori GitHub aplikasi Anda dan buka
<repo-name>/.github/workflows/
direktori. Anda akan melihat alur kerja yang dibuat secara otomatis.Untuk setiap file alur kerja, pilih tombol "pensil" di kanan atas untuk mengedit file. Ganti konten dengan teks berikut, yang mengasumsikan Anda membuat rahasia GitHub sebelumnya untuk kredensial Anda. Perbarui tempat penampung untuk
<web-app-name>
di bawah bagian "env", lalu terapkan langsung ke cabang utama. Penerapan ini memicu GitHub Action untuk berjalan lagi dan menyebarkan kode Anda, kali ini menggunakan perwakilan layanan untuk mengautentikasi.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
Bagaimana perutean lalu lintas slot memungkinkan saya menguji pembaruan yang saya buat ke aplikasi saya?
Perutean lalu lintas dengan slot memungkinkan Anda mengarahkan sebagian lalu lintas pengguna yang telah ditentukan sebelumnya ke setiap slot. Awalnya, 100% lalu lintas diarahkan ke situs produksi. Namun, Anda memiliki kemampuan, misalnya, untuk mengirim 10% lalu lintas Anda ke slot penahapan Anda. Jika Anda mengonfigurasi perutean lalu lintas slot dengan cara ini, ketika pengguna mencoba mengakses aplikasi Anda, 10% dari mereka secara otomatis dirutekan ke slot penahapan tanpa perubahan pada instans Front Door Anda. Untuk mempelajari selengkapnya tentang pertukaran slot dan lingkungan penahapan di App Service, lihat Menyiapkan lingkungan penahapan di Azure App Service.
Bagaimana cara memindahkan kode saya dari slot penahapan ke slot produksi saya?
Setelah selesai menguji dan memvalidasi di slot penahapan, Anda dapat melakukan pertukaran slot dari slot penahapan ke situs produksi Anda. Anda perlu melakukan pertukaran ini untuk semua instans aplikasi Anda di setiap wilayah. Selama pertukaran slot, platform App Service memastikan slot target tidak mengalami waktu henti.
Untuk melakukan pertukaran, jalankan perintah berikut untuk setiap aplikasi. Ganti tempat penampung untuk <web-app-name>
.
az webapp deployment slot swap --resource-group MyResourceGroup -name <web-app-name> --slot stage --target-slot production
Setelah beberapa menit, Anda dapat menavigasi ke titik akhir Front Door Anda untuk memvalidasi pertukaran slot berhasil.
Pada titik ini, aplikasi Anda aktif dan berjalan dan perubahan apa pun yang Anda buat pada kode sumber aplikasi Anda secara otomatis memicu pembaruan ke kedua slot penahapan Anda. Anda kemudian dapat mengulangi proses pertukaran slot ketika Anda siap untuk memindahkan kode tersebut ke dalam produksi.
Bagaimana lagi cara menggunakan Azure Front Door di penyebaran multi-wilayah saya?
Jika Anda khawatir tentang potensi gangguan atau masalah dengan kelangsungan di seluruh wilayah, seperti di beberapa pelanggan yang melihat satu versi aplikasi Anda sementara yang lain melihat versi lain, atau jika Anda membuat perubahan signifikan pada aplikasi Anda, Anda dapat menghapus situs yang sedang menjalani pertukaran slot dari grup asal Front Door Anda untuk sementara waktu. Semua lalu lintas kemudian diarahkan ke asal lainnya. Navigasi ke panel Perbarui grup asal dan Hapus asal yang sedang mengalami perubahan. Setelah membuat semua perubahan dan siap untuk melayani lalu lintas di sana lagi, Anda dapat kembali ke panel yang sama dan memilih + Tambahkan asal untuk membaca asal.
Jika Anda lebih suka tidak menghapus dan kemudian membaca asal, Anda dapat membuat grup asal tambahan untuk instans Front Door Anda. Anda kemudian dapat mengaitkan rute ke grup asal yang menunjuk ke asal yang dimaksudkan. Misalnya, Anda dapat membuat dua grup asal baru, satu untuk wilayah utama Anda, dan satu untuk wilayah sekunder Anda. Saat wilayah utama Anda mengalami perubahan, kaitkan rute dengan wilayah sekunder Anda dan sebaliknya saat wilayah sekunder Anda mengalami perubahan. Setelah semua perubahan selesai, Anda dapat mengaitkan rute dengan grup asal asli Anda yang berisi kedua wilayah. Metode ini berfungsi karena rute hanya dapat dikaitkan dengan satu grup asal pada satu waktu.
Untuk menunjukkan bekerja dengan beberapa asal, dalam cuplikan layar berikut, ada tiga grup asal. "MyOriginGroup" terdiri dari kedua aplikasi web, dan dua grup asal lainnya masing-masing terdiri dari aplikasi web di wilayah masing-masing. Dalam contoh, aplikasi di wilayah utama mengalami perubahan. Sebelum perubahan itu dimulai, rute dikaitkan dengan "MySecondaryRegion" sehingga semua lalu lintas akan dikirim ke aplikasi di wilayah sekunder selama periode perubahan. Anda dapat memperbarui rute dengan memilih Tidak Terkait, yang memunculkan panel Kaitkan rute.
Bagaimana cara membatasi akses ke situs alat tingkat lanjut?
Dengan layanan Azure App, situs SCM/advanced tools digunakan untuk mengelola aplikasi Anda dan menyebarkan kode sumber aplikasi. Pertimbangkan untuk mengunci situs SCM/alat tingkat lanjut karena situs ini kemungkinan besar tidak perlu dijangkau melalui Front Door. Misalnya, Anda dapat menyiapkan pembatasan akses yang hanya memungkinkan Anda melakukan pengujian dan mengaktifkan penyebaran berkelanjutan dari alat pilihan Anda. Jika Anda menggunakan slot penyebaran, untuk slot produksi secara khusus, Anda dapat menolak hampir semua akses ke situs SCM karena pengujian dan validasi Anda dilakukan dengan slot penahapan Anda.