Azure 跨訂閱遷移資源踩坑記

? ?突然收到微軟的郵件,提示我的一個 Azure 訂閱已經到期,所以轉為“禁用”狀態,只能進行數據的導出和處理。在這個訂閱里有不少較重要的資源在跑,直接關了可不行…

? ?于是開啟了一個支持事件,臺灣美眉的態度和聲線真的沒話說~于是給了我24小時時間來遷移這個訂閱中的資源到另外一個訂閱。

? ?我以為這是個很簡單的過程,畢竟咱都考過認證了不是嘛?于是,很打臉的踩坑了…哈哈哈… 這就很值得記錄一下了~

? ?遷移的訂閱里有很多種不同的資源,有虛擬機,也有各種認知服務,有WebApp服務,也有對應的應用服務計劃。遷移的方式也很簡單,登錄到 Azure 門戶,打開需要遷移的資源所在資源組,勾選需要遷移的資源,然后在上端找到“移動”下拉菜單,選擇“移動到另一個訂閱”。Azure 門戶會開啟一個遷移向導,在這個向導里,你需要指定目標訂閱和目標資源組,然后點擊“下一步”,Azure 會驗證是否能夠完成遷移。

? ?看著很簡單吧?可是遷移一堆資源的時候,我發現報錯了…提示貌似是Web應用服務和應用服務計劃所在的資源組不對。怎么會呢?要遷移的資源不是已經乖乖地待在資源組里嗎?那就查查文檔吧。

ca53dbf48acf2963303e8abfd9d32da3.png

? ?翻翻文檔,還真有發現。Azure 其實支持特定的資源進行三種遷移:遷移到另一個資源組,遷移到另一個訂閱和遷移到另一個區域。比較容易理解的是資源之間具有依存關系,所以需要整合到一個資源組一起遷移——這都是我已經特別注意的,但為什么會報錯呢?難道是不支持遷移嗎?報錯信息不像啊…

? ?先查一下哪些資源可以遷移。在 Azure 的文檔里專門介紹了支持遷移的資源 ,列出了幾乎所有 Azure 的資源類型是否支持三種遷移。不過,在文檔里各種資源是以資源類型顯示的。事后我來查看當然沒啥問題,因為資源類型可以通過 Azure 門戶里資源概述頁面右上角的 JSON 視圖查看,可以很明顯的看到類似如下的屬性描述:

"name": "modoo","type":?"Microsoft.Web/sites",????"kind":?"app",????"location":?"West?US",

? ? 以上僅截取部分屬性顯示。“type” 屬性即為資源類型定義。這里顯示的就是Web應用服務,其屬性為“Microsoft.Web/sites”。在文檔中查找“Microsoft.Web"小節,就能看到對應表格里,有sites的資源類型對應的遷移能力為:

資源類型資源組訂閱區域移動
sites

? ?當然,列出的“sites”只是一個,對于我來說還需要知道一起捆綁的應用服務計劃,也列出如下:

資源類型資源組訂閱區域移動
serverfarms

? ?其實相關的資源還有很多,只是這個例子里我只遷移這兩類資源。如果您的遷移里涉及到其他資源,可以用這篇文檔來進行遷移能力確認。如果不支持直接的遷移,可能就需要做其他搬家方式的計劃。例如導出為模板,修改之后在新的訂閱或資源組導入。

? ?好了,現在確認了Web應用和應用服務計劃都可以進行跨訂閱的遷移。那為什么會報錯呢?

? ?我們先看看報錯長什么樣子。

2d517fc8bfd82a84250787c3c50c3da5.png

? ?這個報錯其實不是原始報錯截圖啦~是我后面為了研究問題(什么問題先賣個關子)特意復現的。點擊“錯誤詳細信息”進去,能看到某資源在某資源組,而不在原來某資源組之類的信息,但確實可讀性不高。所以我意識到,Web應用服務和應用服務計劃貌似不像虛擬機一樣,直接就一股腦遷移了。似乎有著某種限制要求。

? ?如果此時的我,是當時的我,問題就簡單了。其實在我們前面查閱遷移支持的時候,在“Microsoft.Web"小節就有個重要提示:

314be4ddc6f78e313e82b62d3e707997.png

? ?這說明,應用服務遷移和其他類型的資源遷移操作是不同的。而在文檔 “跨資源組/訂閱移動” 中,也相當明確的給出了描述——跨訂閱移動 Web 應用時,應遵循以下指導:

  • 將資源移動到新的資源組或訂閱屬于元數據更改,不應影響資源的任何運作方式。例如,移動應用服務時,應用服務的入站 IP 地址不會更改。(所以我并不需要調整自己域名的DNS記錄了)

  • 目標資源組中不能有任何現有的應用服務資源。應用服務資源包括:

    • Web 應用(這次我想遷移的)

    • 應用服務計劃(也是這次我想遷移的)

    • 上傳或導入的 TLS/SSL 證書(這次遷移的環境沒啟用SSL)

    • 應用服務環境

  • 資源組中的所有應用服務資源必須一起移動。(這個好理解,否則依存關系檢查估計不能通過)

  • 應用服務環境不能移到新資源組,也不能移到新訂閱。但是,可以將某個 Web 應用和應用服務計劃轉移到新訂閱,而無需移動應用服務環境。

  • 只要將證書與資源組中的所有其他資源一起移動,就可以將綁定的證書移到 Web,而無需刪除 TLS 綁定。但是,無法移動免費的應用服務托管證書。對于該情況,請參閱移動免費托管證書 。(其實就是刪除免費應用服務托管證書遷移之后再重新創建)

  • 含專用終結點的 Azure 應用服務應用無法移動。刪除專用終結點,并在移動后重新創建。(如果采用專用終結點保護應用服務訪問,需要遷移之前記錄并刪除,遷移之后重建)

  • 只能從最初創建應用服務資源的資源組中移動它們。如果應用服務資源不再位于其原始資源組中,請將其移回其原始資源組。然后,在訂閱之間移動資源。(這就是報錯的原因了!

? ?那么,怎么知道這些資源的原始資源組是哪個呢?

? ?點擊打開準備遷移的Web應用服務資源,在左側的菜單欄找到“診斷并解決問題”,點擊之后,在右側頁面找到“配置和管理”(Configuration and Management)。

947d88036ced955effd75ca79d75a266.png

? ?進入到“配置和管理”頁面之后,在左側菜單欄點擊“遷移操作“菜單,Azure門戶將會運行一個報告。等報告生成之后,就可以看到所有涉及需要一并遷移的Web應用服務和應用服務計劃了。報告中很明顯地指出了每一個資源目前和初始的資源組。

32a15e94bbf4d7751bdc11229da4ec65.png

? ?依據這個指示,將資源遷回原始的資源組,然后再一并遷移到新的訂閱就可以了。除了使用Azure門戶的UI界面,還可以使用Azure PowerShell、Azure CLI 或Azure的 REST API來移動資源。資源遷移之后,其對應的資源ID將發生變化。資源ID的標準格式為:

/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}

? ?將資源移到新的資源組或訂閱時,會更改該路徑中的一個或多個值。

------------ 并不華麗的分割線 ------------

? ?如果這篇文章在這里結束,其實就一點意義也沒有了。因為內容在微軟文檔站點都能找到。我要問自己一個經典的問題:為什么?

? ?為什么必須將資源遷回原始資源組呢?為什么虛擬機等資源遷移就不需要呢?

? ?Azure門戶里能看到的信息畢竟是有限的,所以我決定用命令行來查看遷移前后Web應用服務和應用服務計劃資源的不同。于是我又把資源遷回去了……

? ?試了一下,使用如下的PowerShell可以獲取我最希望得到的資源信息。

Get-AzResource -Name modoo -ResourceGroupName modoo.top -ResourceType Microsoft.Web/sites | fc -Property properties > modoo.site.1.txtGet-AzResource -Name modoo -ResourceGroupName modoo.top -ResourceType Microsoft.Web/serverfarms | fc -Property properties > modoo.plan.1.txt

? ?可以看到,命令行里使用了資源類型的定義,來輸出特定資源的信息。同時,我使用了管道來指定輸出格式,使用 format custom 才能夠看到“@”開頭的全部屬性信息。最后我把輸出寫入到一個文本文件進行比較。

? ?同樣,我昨晚遷移之后,又重復了一遍這個操作。

Get-AzResource -Name modoo -ResourceGroupName Test.Lab.US -ResourceType Microsoft.Web/sites | fc -Property properties > modoo.site.2.txtGet-AzResource -Name modoo -ResourceGroupName Test.Lab.US -ResourceType Microsoft.Web/serverfarms | fc -Property properties > modoo.plan.2.txt

? ?然后我們比較一下,遷移前后的資源,到底哪里不一樣。

23c4efd1a202c74aaab71e70dacb51ab.png

? ?Web應用服務資源其實就兩個地方不同:serverFarmId和resourceGroup,時間相關的不同我們可以忽略。

? ?而應用服務計劃就只有一處不同:resourceGroup。

? ?這也就驗證了前文文檔里提及的,遷移其實只是修改了元數據,并未“真的”修改我們的資源。那為什么一定要遷移回“原始資源組”才能跨訂閱遷移呢?

? ?如果您創建Web應用服務,就會發現在創建向導中必須指定應用服務計劃。這意味著,基于共享資源提供的應用服務,需要首先確定所使用的物理資源的位置。因為多個Web應用服務(當然不僅限于Web應用服務,所有使用應用服務計劃的資源都一樣)可以使用相同的應用服務計劃,所以應用服務計劃的作用對于解答我們的疑問就很重要了。

? ?實際上,應用服務計劃概述 文檔中已經告訴了我們足夠的信息。應用服務計劃為要運行的Web應用定義一組計算資源。這些計算資源類似傳統Web托管方案中的服務器場。實際上,也就是針對“真實”計算資源的定義:

  • 操作系統(Windows、Linux)

  • 區域(美國西部、美國東部,等等)

  • VM 實例數

  • VM 實例大小(“小型”、“中型”、“大型”)

  • 定價層(“免費”、“共享”、“基本”、“標準”、“高級”、“高級 V2”、“高級 V3”、“獨立”、“獨立 V2”)

? ?這使得基于該應用服務計劃的Web服務資源能夠對應到指定資源級別、指定服務價格的硬件來運行。在Azure PowerShell的輸出信息里查找,確實找到了相關的信息:

  • webSpace。我的例子里為”modoo.top-WestUSwebspace"。實際上我有理由猜測,這就是原始資源組信息的來源。也就是創建應用服務計劃時,所在的資源組信息。

  • subscrition。訂閱的ID號。當我完成跨訂閱的遷移時,我看到這個訂閱ID確實改成了目標訂閱的訂閱ID。

  • mdmId。我猜測這是管理硬件需要的信息。我的例子里這是以“waws-prod-bay-"開始的一串字符,我覺得這有可能就是硬件相關資源的標識。在跨資源組遷移、跨訂閱遷移過程中,這個值一直沒有變化。

? ?正是由于一系列Web應用必須關聯到某一特定應用服務計劃,而應用服務計劃又關聯到邏輯上的應用服務場,所以跨訂閱遷移才要求把所有的資源挪回原始資源組一并遷移吧。這時遷移動作會一并修改“webSpace”屬性的值,從而讓應用服務計劃在新的訂閱里可以有一個新的“原始資源組”,然后再將這個應用服務計劃,也就是應用服務場關聯的所有應用服務進行元數據的修改,完成遷移工作。

? ?那么如果一開始我創建的Web應用服務和應用服務計劃就不在一個資源組呢?(這就是文章開始賣的那個關子)那遷移的時候以誰為準呢?于是我又動手試了一下,實際上即使在其他資源組創建應用服務,應用服務仍然會以創建應用服務計劃的資源組作為所有這些資源的“原始資源組”。

? ? 我們終于搞清楚了Web應用服務和應用服務計劃遷移的細節,這更堅定了我使用應用服務而不是虛擬機放置我的網站的信心~畢竟,應用服務可省錢多了~

參考鏈接微信防吞:

遷移的資源: https://docs.microsoft.com/zh-cn/azure/azure-resource-manager/management/move-support-resources?WT.mc_id=Azure-MVP-33253

跨資源組/訂閱移動: https://docs.microsoft.com/zh-cn/azure/azure-resource-manager/management/move-resource-group-and-subscription?WT.mc_id=Azure-MVP-33253

應用服務計劃概述: https://docs.microsoft.com/zh-cn/azure/app-service/overview-hosting-plans?WT.mc_id=Azure-MVP-33253

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282879.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282879.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282879.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

階乘的精確性

/* 輸入不超過1000的正整數n,輸出n!1*2*3*……*n的精確結果。 樣例輸入:30 樣例輸出:265252859812191058636308480000000 例如 n3;s6; n4;s24; n5;s120; 1000的階乘需要一…

Optaplanner規劃引擎的工作原理及簡單示例(1)

在之前的文章中,老猿已介紹過APS及規劃的相關內容,也對Optaplanner相關的概念和一些使用示例進行過介紹,接下來的文章中,我會自己做一個規劃小程序 - 一個關于把任務分配到不同的機臺上進行作來的小程序,并在這個小程序…

[HNOI2017]禮物

題目描述 我的室友最近喜歡上了一個可愛的小女生。馬上就要到她的生日了,他決定買一對情侶手環,一個留給自己,一個送給她。每個手環上各有 n 個裝飾物,并且每個裝飾物都有一定的亮度。 但是在她生日的前一天,我的室友突…

《ASP.NET Core 6框架揭秘》實例演示[25]:配置與承載環境的應用

與服務注冊一樣,針對配置的設置同樣可以采用三種不同的編程模式。第一種是利用WebApplicationBuilder的Host屬性返回的IHostBuilder對象,它可以幫助我們設置面向宿主和應用的配置。IWebHostBuilder接口上面同樣提供了一系列用來對配置進行設置的方法&…

oracle的除,Oracle數據庫如何去除別名 - daiyan0526的個人空間 - 51Testing軟件測試網 51Testing軟件測試網-軟件測試人的精神家園...

本人曾經用Personal OracleDeveloper2000開發了一些程序,當移植到FOR NT的時候發現有些功能出現了出錯提示。經研究發現原來是用戶沒有能正常連接。由于在developer2000連接personal oracle時不需要別名(alias),直接寫入用戶名/密碼則可。而在OracleFOR …

Java 之 JavaScript (一)

1.JavaScripta.定義&#xff1a;JavaScript是腳本語言&#xff0c;是一種輕量級的編程語言b.實現&#xff1a;①直接通過標簽里面的onXX屬性驅動js的執行<input type"button" value"測試" οnclick"alert(‘hello‘)">②引入外部js文件——…

Linux日志出現大量kernel: NET: Registered protocol family 36

一臺Linux服務器的系統錯誤日志出現大量的“ kernel: NET: Registered protocol family 36”錯誤信息&#xff0c;如下所示&#xff1a; Jul 2 05:27:45 xxxxxx kernel: NET: Registered protocol family 36Jul 2 05:27:45 xxxxxx kernel: NET: Unregistered protocol family…

node的模塊機制

Node.js模塊的實現 之前在網上查閱了許多介紹Node.js的文章&#xff0c;可惜對于Node.js的模塊機制大都著墨不多。在后續介紹模塊的使用之前&#xff0c;我認為有必要深入一下Node.js的模塊機制。 CommonJS規范 早在Netscape誕生不久后&#xff0c;JavaScript就一直在探索本地編…

vs使用ado連接oracle,在VS環境下以ADO方式操作Oracle數據庫

利用ADO引擎方式訪問Oracle數據庫的實現方法&#xff1a;定義數據庫頭文件為CDBOperation.h#pragma once#import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF","adoEOF"),rename("LockTypeEnum"…

httpstat:一個檢查網站性能的 curl 統計分析工具

httpstat&#xff1a;一個檢查網站性能的 curl 統計分析工具httpstat 是一個 Python 腳本&#xff0c;它以美妙妥善的方式反映了 curl 統計分析&#xff0c;它是一個單一腳本&#xff0c;兼容 Python 3 &#xff0c;在用戶的系統上不需要安裝額外的軟件(依賴)。作者&#xff1a…

Unity(創建腳本)

#一、描述 記錄第一課時&#xff0c;腳本的創建與使用基本的API #二、學習記錄 &#xff08;一&#xff09;創建一個Cube方塊 &#xff08;二&#xff09;在cube組件上添加一個腳本&#xff0c;選中cube組件&#xff0c;在屏幕右側有著cube的組件屬性欄&#xff0c;點擊AddComp…

關于面試中看到一些問題

最近公司在招聘.NET開發人員&#xff0c;面試了一些人&#xff0c;有一些感悟&#xff0c;分享出來&#xff0c;以供參考。面試的人員中&#xff0c;有一些是三五年的開發人員&#xff1b;也有幾個是10年左右的技術負責人&#xff0c;不但自己架構過項目&#xff0c;還有帶領導…

jQuery遍歷not的用法

從包含所有段落的集合中刪除 id 為 "selected" 的段落&#xff1a; $("p").not("#selected") 定義和用法 not() 從匹配元素集合中刪除元素。 語法 1 .not(selector) 參數描述selector字符串值&#xff0c;包含用于匹配元素的選擇器表達式。語法 …

linux 字符串加入中括號,Linux Shell 基礎 -- 總結幾種括號、引號的用法

1、雙引號 " "雙引號常用于包含一組字符串&#xff0c;在雙引號中&#xff0c;除了 "$"、""、" (反引號)"有特殊含義外&#xff0c;其余字符(如IFS、換行符、回車符等)沒有特殊含義。$ a3$ echo "$a"輸出結果為 3&#xff…

設計模式相關

多例模式 轉載于:https://www.cnblogs.com/our880tom/p/6392983.html

一個countDown在多線程調度下使用不當的分享

2019獨角獸企業重金招聘Python工程師標準>>> 一個countDown在多線程調度下使用不當的分享 1. 詭異的數據抖動 在一個需求開發過程中&#xff0c;由于有多角色需要獲取每個角色下的菜單&#xff1b;結果出現了單角色下拉去菜單沒問題&#xff0c;多角色情況下只有一個…

我堅持三年了!

閱讀本文大概需要5分鐘。不知不覺&#xff0c;公眾號寫作已經持續了3年了。2019年11月底&#xff0c;心血來潮寫了第一篇文章&#xff0c;更多是為了復盤過去的一些工作經歷。在前幾天&#xff0c;讀者數突破了16萬&#xff0c;雖然這個數字相比那些頭部大號而言并不多&#xf…

關于Qt模態框總匯

轉載請注明出處&#xff1a;http://www.cnblogs.com/dachen408/p/7285710.html 父窗體為QMainWindow&#xff1b; 當子窗體為&#xff1a; 1.QWidget&#xff0c;需要設置 this->setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog); this->setWindowModality(Qt::Win…

linux腳本打印循環次數,shell腳本編程基礎(3)——循環用法

本節索引&#xff1a;一、if、case條件判斷二、for、while及until循環三、循環控制語句continue、break、shift及select菜單四、信號捕捉trap在前面的基礎編程內容中&#xff0c;我們已經學習了shell腳本的順序執行及選擇執行&#xff0c;通過這兩種方式&#xff0c;可以幫我們…

RTSP服務器之————rtsp-server(輕量級RTSP / RTP流媒體服務器)

github&#xff1a;https://github.com/revmischa/rtsp-server 輕量級RTSP / RTP流媒體服務器