Autorius: Kristijan Sekereš
Azure Cloud Services (Extended Support) nutraukiama 2027 m. kovo 31 d.: kaip perkelti žiniatinklio ir darbinius vaidmenis

Microsoft paskelbė Azure Cloud Services (extended support) pasenusia 2025 m. kovo 31 d., o visiškai ją nutraukia 2027 m. kovo 31 d. Jei kuri nors jūsų verslo programa veikia kaip žiniatinklio vaidmenys (web roles) ir darbiniai vaidmenys (worker roles), iki tos datos ji turi veikti kitur Azure aplinkoje. Nutraukimo DUK tiesiai atsako į du klausimus, kuriuos visi užduoda pirmiausia: Microsoft „negali patenkinti prašymų pratęsti terminą“, ir „perkėlimo vienu spustelėjimu įrankio nėra“.
Nuo šiandien, 2026 m. spalio 3 d., lieka šeši mėnesiai.
Kam tai aktualu
Tipinis atvejis: ASP.NET programa .NET Framework pagrindu, priekyje žiniatinklio vaidmuo, už jo vienas ar du darbiniai vaidmenys, apdorojantys eiles, sukurta agentūros prieš aštuonerius ar dešimt metų. Agentūra dažnai jau užsiima kuo kitu, programa vis dar tvarko užsakymus ar klientų portalą, o .csdef failo niekas neatidarė nuo paskutinės migracijos.
Norėdami patikrinti, ar tai liečia jus, atsidarykite Azure portalą ir išvardykite „Cloud services (extended support)“ tipo išteklius. Microsoft pranešime apie nutraukimą yra nuoroda tiesiai į šį vaizdą. Jei jis tuščias, galite nebesirūpinti.
Šis straipsnis nėra apie Cloud Services (classic), kuri nutraukta 2024 m. Jei produktą jums talpina tiekėjas, migracija yra jo darbas: paprašykite jo datos raštu. Visa tai, kas toliau, skirta komandoms, kurioms kodas priklauso, arba priklauso popieriuje ir kurios turi rasti, kas jį supranta.
Kodėl tai sunkiau nei 2024 m. perkėlimas
Daug įmonių perėjo prie extended support 2024 m., kai buvo nutraukta classic versija. Tas perkėlimas sąmoningai buvo pigus. Microsoft extended support apžvalgoje teigiama, kad .csdef, .cscfg ir .cspkg failai „perkeliami, o jų formatai nesikeičia“ ir kad „vykdymo kodo keisti nereikia“. Buvo net migracija vietoje. Tame pačiame puslapyje extended support siūlyta programoms, kurios nebevystomos, nes „tai greitas migracijos kelias“.
Šį kartą lygiaverčio tikslo nėra. Microsoft žodžiais, Cloud Services „skirta programoms diegti kaip VM. Jūsų rašomas kodas glaudžiai susietas su VM egzemplioriumi“. Jūsų kodas žino, kad veikia vaidmenyje. Jis skaito konfigūraciją iš vaidmens, randa vietos diske per vaidmenį, sertifikatus jam įdiegia vaidmuo, o prieš vaidmeniui pasileidžiant jis administratoriaus teisėmis vykdo paruošimo scenarijus. Visa tai reikia pakeisti.
Dar vienas dalykas prieš skaitant oficialias rekomendacijas. Microsoft pranešime apie nutraukimą ir DUK nurodoma viena paskirties vieta, Service Fabric managed cluster. Apžvalgos puslapyje išvardytos penkios, o pačios Microsoft migracijos sprendimų matrica lygina septynias. Service Fabric yra numatytasis pasirinkimas, o ne reikalavimas, ir daugeliui žiniatinklio vaidmenų jis netinkamas.
Paskirties vietos ir kada kuri tinka
Žiniatinklio ir darbiniai vaidmenys neprivalo atsidurti toje pačioje vietoje. Paskirties vietą rinkitės kiekvienam vaidmeniui atskirai.
App Service (Windows). Artimiausias žiniatinklio vaidmens atitikmuo ASP.NET programai. Windows egzemplioriuose įdiegtos palaikomos .NET Framework versijos, todėl Web Forms ir MVC 5 veikia be perrašymo. Darbiniai vaidmenys gali pereiti kaip WebJobs, kurie veikia „tame pačiame egzemplioriuje kaip žiniatinklio programa“ be papildomų išlaidų. Riba yra pati mašina: programas, kurioms reikia COM komponentų, prieigos prie registro ar MSI diegimo programų, Microsoft nukreipia į Managed Instance, todėl padidintų teisių paleisties užduotims (startup tasks) standartiniame plane nėra vietos.
App Service Managed Instance. Sukurta senoms Windows žiniatinklio programoms. Pagal Microsoft apžvalgą ji „visuotinai prieinama Windows žiniatinklio programoms pasirinktuose regionuose“, ribojama Pv4 ir Pmv4 planais, su iš anksto įdiegtais .NET Framework 3.5 ir 4.8 bei PowerShell diegimo scenarijais, kurie gali registruoti COM komponentus, rašyti registro raktus, vykdyti MSI diegimo programas ir konfigūruoti IIS. Tai apima didžiąją dalį to, ką darė padidintų teisių paleisties užduotys. Apribojimai: tik žiniatinklio programos (be WebJobs), be konteinerių, tik Entra ID ir valdomoji tapatybė (be prijungimo prie domeno, NTLM ar Kerberos), o šio straipsnio rašymo metu vienintelis išvardytas Europos regionas yra North Europe.
Container Apps. Tinka darbiniams vaidmenims, kai jie jau perkelti į šiuolaikinį .NET: eilėmis grindžiamas mastelio keitimas, suplanuotos ir įvykių paleidžiamos užduotys, mažinimas iki nulio. Tačiau reikalavimuose konteineriams sakoma: „reikalingi Linux pagrindo (linux/amd64) konteinerių atvaizdai“. .NET Framework kodas ten neveiks, kol nebus perkeltas.
Azure Kubernetes Service. Paleidžia Windows Server konteinerius Windows mazgų telkiniuose, todėl .NET Framework vaidmenį galima įdėti į konteinerį ir perkelti. Sprendimų matrica ir migracijos sudėtingumą, ir eksploatavimo naštą vertina kaip didelius. Tinka, jei jau naudojate Kubernetes, bet ne kaip pirmasis klasteris vienai senai programai.
Virtual Machine Scale Sets. Matrica jį vadina „artimesniu Cloud Services modeliui, leidžiančiu lengviau perkelti be pakeitimų (lift-and-shift)“. Jums grąžinama VM kartu su atnaujinimais, atvaizdų kūrimu ir IIS sąranka, kuriuos anksčiau už jus darė vaidmuo.
Service Fabric managed cluster. Microsoft įvardyta paskirties vieta. Darbiniai vaidmenys į ją perkeliami sklandžiai. Žiniatinklio vaidmenys dažnai ne: Service Fabric „nepalaiko IIS“, o konvertavimo vadove ASP.NET Web Forms nurodyta kaip nepalaikoma, o kelias yra konvertavimas į ASP.NET Core MVC. Service Fabric migracijos vadove priduriama, kad valdomi klasteriai „šiuo metu nepalaiko konteinerių“, todėl nuo IIS priklausomai programai reikia tradicinio klasterio, kurį prižiūrėti sunkiau.
Sprendimų lentelė
| Jūsų vaidmuo atrodo taip | Tikėtina paskirties vieta | Kur nueina darbas |
|---|---|---|
| ASP.NET Web Forms ar MVC 5 žiniatinklio vaidmuo, paleisties užduotys paprastos arba jų nėra | App Service (Windows) | Konfigūracija, sertifikatai, diegimo konvejeris |
| Žiniatinklio vaidmuo, kurio paleisties užduotys diegia COM komponentus, MSI ar registro raktus | App Service Managed Instance | Paleisties užduočių perrašymas į diegimo scenarijus; regiono ir plano patikrinimas |
| .NET Framework darbinis vaidmuo, tikrinantis eilę, nedidelė apkrova | WebJob šalia žiniatinklio programos | RoleEntryPoint pakeitimas konsoline programa |
| Darbinis vaidmuo, kurį esate pasirengę perkelti į šiuolaikinį .NET | Container Apps | Pats perkėlimas, tada konteinerio atvaizdas |
| Daug vaidmenų ir komanda, kuri jau naudoja Kubernetes | AKS su Windows mazgų telkiniais | Atvaizdai, klasterio eksploatavimas |
| Daug vietinių priklausomybių, nėra noro keisti kodo | VM Scale Sets | OS atnaujinimai ir atvaizdų priežiūra, visam laikui |
| Daugiausia darbinių vaidmenų, žiniatinklio sluoksnis jau ASP.NET Core | Service Fabric managed cluster | Platformos mokymasis; be IIS, be konteinerių |
Kas keičiasi kode
Ieškokite sprendime (solution) Microsoft.WindowsAzure.ServiceRuntime. Kiekvienas jį importuojantis failas patenka į sąrašą.
RoleEntryPoint
Darbinis vaidmuo yra klasė, kuri paveldi RoleEntryPoint ir perrašo OnStart, Run ir OnStop. Jei Run grąžina valdymą, egzempliorius paleidžiamas iš naujo. Service Fabric visus tris sujungia į vieną RunAsync, kuris turėtų sustoti, „kai signalizuojamas RunAsync metodo CancellationToken“. App Service aplinkoje ar konteineryje ta pati logika tampa konsoline programa arba talpinama fono paslauga su ciklu ir atšaukimo žetonu.
Dalis, kurią žmonės praleidžia, yra išjungimas. OnStop suteikdavo akimirką užbaigti apdorojamą pranešimą. Įsitikinkite, kad naujoji vykdymo aplinka perduoda atšaukimo signalą ir kad apdorojimo viduryje paliktą pranešimą saugu apdoroti dukart.
Žiniatinklio vaidmenys dažnai irgi jį turi, paprastai WebRole.cs. Jei jo OnStart ką nors daro (IIS koregavimai, talpyklos įšildymas), prieš trindami išsiaiškinkite, ką.
RoleEnvironment
RoleEnvironment.GetConfigurationSettingValue("Key") skaito nustatymus iš .cscfg. Už Cloud Services ribų jo niekas neteikia. Prieš ką nors perkeldami, kiekvieną iškvietimą apgaubkite viena maža konfigūracijos sąsaja, tada naujoje aplinkoje nukreipkite tą sąsają į programos nustatymus, aplinkos kintamuosius ar Key Vault. Tai pigiausias projekto pakeitimas, o likusią dalį jis leidžia išbandyti nešiojamajame kompiuteryje.
Kiti trys naudojimo atvejai, kurių reikia ieškoti:
RoleEnvironment.Changed, kuris pritaikydavo konfigūracijos pakeitimus be paleidimo iš naujo. Service Fabric turi atitinkamą įvykį. Kitur laikykite, kad nustatymo pakeitimas paleidžia procesą iš naujo, ir išbandykite, ką tai reiškia vykdomam darbui.RoleEnvironment.CurrentRoleInstance, naudojamas vienam egzemplioriui išrinkti suplanuotam darbui. Paleidžiami (triggered) WebJobs veikia viename egzemplioriuje; nuolatiniai (continuous) veikia visuose egzemplioriuose, jei neapribota. Nuspręskite aiškiai.RoleEnvironment.IsAvailableirIsEmulatedšakos. Jos atskiria „debesijos“ kelią nuo „vietinio“, ir vienas iš jų netrukus taps negyvu kodu.
.cscfg ir .csdef
.cscfg saugo kiekvienos aplinkos nustatymus, egzempliorių skaičių ir sertifikatų kontrolinius kodus (thumbprints). .csdef saugo galinius taškus, VM dydį, vietinę saugyklą, paleisties užduotis, sertifikatų saugyklas, o kartais ir kelias IIS svetaines viename žiniatinklio vaidmenyje. Peržiūrėkite abu failus eilutė po eilutės ir užsirašykite, kur kiekvienas įrašas atsidurs vėliau: programos nustatyme, Key Vault nuorodoje, infrastruktūros kode ar niekur. Vidiniams galiniams taškams, per kuriuos vaidmenys kreipiasi vienas į kitą tiesiogiai, reikia pakaitalo: paslaugos adreso arba eilės.
Sertifikatai
Extended support jau privertė sertifikatus perkelti į Key Vault, todėl ta 2024 m. darbo dalis atsiperka. Keičiasi tai, kaip kodas juos randa. .csdef sertifikatus įdiegia į pavadintą saugyklą, dažnai LocalMachine. Windows App Service aplinkoje nustatymas WEBSITE_LOAD_CERTIFICATES padaro juos pasiekiamus Current User\My. Kodas, kuris atidaro LocalMachine saugyklą, nieko neranda, ir pirmas iškvietimas, kuriam reikia sertifikato, nepavyksta. Linux konteineriuose vietoj to įkelkite jį iš Key Vault paleidimo metu.
Paleisties užduotys
Atidarykite Startup.cmd. Čia slypi staigmenos, paprastai vykdomos su executionContext="elevated": šriftai PDF generavimui, COM komponentas, IIS perrašymo modulis, registro pakeitimas dėl TLS. Kiekvienos eilutės laukia vienas iš trijų likimų: nebereikalinga, perkeliama į diegimo scenarijų Managed Instance aplinkoje arba įtraukiama į konteinerio ar VM atvaizdą.
Vietinė saugykla
LocalStorage išteklius .csdef faile, skaitomas per RoleEnvironment.GetLocalResource, kiekvienam egzemplioriui suteikdavo laikinosios disko vietos. Tikriems laikiniesiems failams naudokite platformos laikinąjį katalogą. Viskas, kas turi išlikti po paleidimo iš naujo, įskaitant failus, kuriuos kažkas laikė nuolatiniais, keliauja į Blob Storage.
Web Forms
Tai sprendimas, nuo kurio priklauso visa kita. Web Forms sukurta ant System.Web ir neturi ASP.NET Core versijos, todėl Web Forms programos perkėlimas į Service Fabric ar Container Apps reiškia jos naudotojo sąsajos perrašymą. App Service, Managed Instance, Windows konteineris ar mastelio rinkinys (scale set) ją gali paleisti nepakeistą. Perkelkite ją tokią, kokia yra, o modernizavimą padarykite atskiru projektu su savo biudžetu. Naudotojo sąsajos perrašymui ne vieta kritiniame kelyje iki išjungimo datos.
Visa kita
VIP sukeitimas (VIP swap) tarp dviejų debesijos paslaugų tampa diegimo lizdais (deployment slots) App Service aplinkoje arba revizijomis Container Apps aplinkoje. Žurnalams, siunčiamiems per diagnostikos (WAD) plėtinį, reikia naujos paskirties vietos, paprastai Application Insights. Standartiniai App Service ir Container Apps nesuteikia nuotolinio darbalaukio; Managed Instance jį leidžia per Azure Bastion, tik diagnostikai.
Šešių mėnesių planas
Skaičiuojant atgal nuo 2027 m. kovo 31 d., su gruodžio šventėmis per vidurį.
Spalis: inventorizacija ir paskirties vietos pasirinkimas. Išvardykite kiekvieną extended support diegimą. Kiekvienam vaidmeniui užrašykite .NET Framework versiją, Web Forms ar MVC, kiekvieną RoleEnvironment iškvietimą, paleisties užduotį, vietinės saugyklos išteklių, sertifikatą ir galinį tašką. Tada patikrinkite nemalonią dalį: ar galite sukurti įdiegtą paketą iš turimo išeitinio kodo? Agentūrų sukurtų sistemų atveju atsakymas kartais yra ne, ir spalis yra mėnuo tai išsiaiškinti. Kiekvienam vaidmeniui pasirinkite paskirties vietą.
Lapkritis: vienas vaidmuo nuo pradžios iki galo. Pridėkite konfigūracijos apvalkalą, aprašykite tikslinę aplinką kaip infrastruktūros kodą ir paleiskite vieną vaidmenį (paprastai paprasčiausią darbinį) bandomojoje aplinkoje su žurnalais, sertifikatais ir konvejeriu.
Gruodis ir sausis: perkelkite likusius. Pakeiskite įėjimo taškus, paleisties užduotis ir vietinę saugyklą. Atlikite parengiamosios aplinkos apkrovos bandymus su gamybinius atitinkančiais duomenimis: WebJob ar konteineris gali neprilygti dedikuotos vaidmens VM pralaidumui.
Vasaris: lygiagretus veikimas. Paleiskite naująją aplinką su tikru srautu. Jei darbiniai vaidmenys dalijasi eile su senaisiais, arba pirmiausia padarykite apdorojimą idempotentišką, arba sustabdykite senuosius darbinius vaidmenis prieš paleisdami naujuosius.
Kovo pradžia: perjungimas. Perjunkite DNS turėdami laiko atsargą. Senąjį diegimą savaitę ar dvi laikykite sustabdytą, bet nepaliestą, tada ištrinkite. Neplanuokite perjungimo paskutinei kovo savaitei: nepavykus perjungimui, antro bandymo nebebus.
Jei pradedate tik sausį, modernizavimo atsisakykite visai. Pasirinkite paskirties vietą, kuriai reikia mažiausiai kodo pakeitimų (App Service, Managed Instance ar mastelio rinkiniai), persikelkite, o pertvarkykite vėliau.
Kas neaišku
Microsoft teigia, kad paslauga bus „visiškai nutraukta“ ir kad migracija reikalinga, „kad būtų išvengta paslaugos sutrikimų“. Mūsų perskaitytuose puslapiuose nepasakyta, kas nutiks diegimui, kuris vis dar veiks 2027 m. balandžio 1 d. Neplanuokite to išsiaiškinti. Managed Instance regionai ir planai per artimiausius mėnesius taip pat greičiausiai keisis, todėl juos patvirtinkite tada, kai priimate sprendimą, o ne pagal šį straipsnį.
Kur gauti pagalbos
Perimame kitų sukurtas programas, išsiaiškiname, kaip jos veikia, ir jas perkeliame: inventorizacija, paskirties vieta kiekvienam vaidmeniui, RoleEnvironment ir paleisties užduočių pakeitimai, perjungimas. Mūsų senų sistemų priežiūros darbai apima .NET Framework ir Web Forms; jei migraciją vykdo jūsų pačių komanda ir jai reikia papildomų rankų, žr. darbuotojų papildymo paslaugą.
Jei turite Cloud Services diegimą ir datą, iki kurios liko šeši mėnesiai, rašykite adresu office@c9group.dev.
Platformų migracija
Nauji vadovai ir taisyklių pakeitimai el. paštu
Kai pasikeičia taisyklė, nusikelia terminas arba paskelbiame naują vadovą, atsiunčiame tai el. paštu.