AzCopy使用的場景其實非常多,也能幫助我們解決很多問題,這次就來分享兩個不同場景下,AzCopy是如何幫我們解決問題的
首先先來看下兩個場景分別是什麼
1.需要下載存儲在Azure Global上的blob
2.需要在Azure Global和Azure China之間同步blob數據
這兩個都是實際的案例,首先來看第一個
背景是在Azure Global的storage上有一個60T的vhd文件,這個文件是第三方廠商公開分享的,任何人都可以直接下載,而不需要經過身份驗證,而我們需要做的就是要把這個放在Global的vhd文件遷移到中國區,然後再進行部署
我們嘗試了很多種方法
1.直接下載 -- 速度維持在kB級別,極不穩定
2.使用各大網盤和下載工具離線下載 -- 根本下不動
3.使用不可描述的工具科學下載 -- 開始時速度很客觀,但一段時間後速度變爲0
4.直接在Global Azure創建一臺VM進行下載 -- 速度位置在MB級別,穩定性尚可,但等待一段時間後,下載中斷
以上幾種方法最終都被認定爲不可行,最終還是使用AzCopy解決了這個問題
首先我們先安裝好azcopy,然後在中國區建一個storage和container,以存放拷貝來的數據
以上這些都屬於前期準備工作
之後我們就來看如何進行數據的拷貝,首先在源端和目標端都是azure blob的時候,azcopy會有一些限制
必須向每個源 URL 追加一個 SAS 令牌。
如果使用 Azure Active Directory (AD)提供授權憑據,則只能從目標 URL 中省略 SAS 令牌。
所以,我們的源端必須是用SAS進行認證的,而我們的情況是源端是直接開放的,所以也不需要SAS了
而目標端我們就需要使用Azure AD進行身份驗證了
Azure AD進行身份驗證我們已經說了很多次了,具體如何操作呢,azcopy v10是可以讓用戶進行login的,所以這也就說明我們可以用我們的azure賬戶進行登錄,而azure 用戶現在是可以被直接賦予對blob的讀寫權限的,相關的role主要有以下幾個
Storage Blob Data Reader
Storage Blob Data Owner
Storage Blob Data Contributor
概念和常規的role有點類似吧,我們這裏是需要寫入文件的,所以肯定不能用reader,我們直接assign一個owner的權限
之後我們就開始進行遷移,首先先登錄目標端環境
azcopy login --aad-endpoint https://login.partner.microsoftonline.cn
在瀏覽器訪問這個標紅的url,然後輸入code,整個過程和cli以及linux下的powershell其實是一樣的
登錄完成,我們嘗試list下container裏的內容,可以看到已經能列出相應的內容了
azcopy list https://mxy.blob.core.chinacloudapi.cn/test
之後我們直接使用copy命令將在Global的vhd文件copy到container裏
azcopy copy https://xxxxx.blob.core.windows.net/release/xxxxx.vhd https://.blob.core.chinacloudapi.cn/sms/sms-connector.vhd
整個過程半小時就完成了,平均速度能達到400-500Mbps
速度之所以可以達到這麼快,是因爲AzCopy 使用服務器到服務器 api,因此直接在存儲服務器之間複製數據。 這些複製操作不會使用計算機的網絡帶寬。
再來看第二種場景:
在blob之間同步數據,因爲這種同步很可能並不止是一次性同步,很可能之後要定期運行,所以源端和目標端我們都用SAS做身份驗證
關於SAS,這裏篇幅有限就不多贅述了,我們直接生成一個storage級別的SAS
之後使用azcopy sync命令進行同步
azcopy sync 'https://mxxxc.blob.core.windows.net/$web?sv=2019-02-02&ss=bfqt&srt=sco&sp=rwdlacuxxxxxx&st=2020-02-10T03:42:25Z&spr=https,http&sigxxxxxxc%3D' 'https://xxx.blob.core.chinacloudapi.cn/global?sv=2019-02-02&ss=bfqt&srt=sco&xxxxx5:59Z&st=2020-02-10T04:35:59Z&spr=https,http&sigxxxxxx3D' --recursive --s2s-preserve-access-tier=false
可以在目標端看到數據已經過來了
之後我們在源端上傳一個新文件
再次運行命令,可以看到這次只同步了一個文件
通過這種方法,很快就可以把gloabl的數據同步到中國區,並且安全性也可以得到保障
以上就是azcopy使用的兩個案例