2025年5月27日 星期二

[Azure] Azure function bandwidth暴增的故事

最近遇到了Azure帳單超出預算的警示mail, 查了一下發現主要原因是跑爬蟲的azure function resource group的頻寬成本大幅增加, 可是我用了好幾年azure function從來沒被收過頻寬費, 再加上我上次deploy新build是2024年11月的事, 怎麼會4/29開始忽然頻寬量大幅增加...






後來決定先敲Azure support ticket, 讓support幫忙查問題, 不過沒想到這個case直接被轉到billing team, 不像以前會support先調查原因, 現在好像只會被轉給billing team, 然後跟你說會爭取折扣/豁免有問題的計費, 不會幫你查原因了..., 如果要查原因, 就會要求你去買他們技術支援服務, 這讓我不太敢繼續用Azure了, 講得好像Azure都不會有bug導致計費出問題一樣, 都是they的錯...




最後Azure忽然爆增Bandwidth帳單的600多塊減免了450塊:



既然Azure support那邊沒辦法幫我調查原因, 我就想說自己繼續追追看了, 仔細看了下發現並不是azure function的頻寬爆增, 而是azure function綁定的storage account Egress爆增:



看起來metrics最多只能query近兩個月, 可以發現4/29之前Egress都少少的, 而4/29之後整個大爆增, 而這件事也很玄..., 因為我Azure function的storage account只是預設綁定, 我自己根本沒有寫讀寫檔案的程式碼, 所以會用到storage account應該是azure function自己讀寫的, 像是metrics等需求之類的, 要怎麼樣才會忽然爆增這麼多Egress流量, 更不用說我根本沒deploy新build...。

之後重新去查Azure Bandwidth的pricing:
https://azure.microsoft.com/zh-tw/pricing/details/bandwidth/

上面有寫相同可用性區域內的資料傳輸頻寬免費, 以及網際網路輸出則是前100G免費, 上面看頻寬短短兩個多禮拜頻寬就超過300G, 所以被算錢也不例外, 因為我們azure function為了跑爬蟲一次跑16組 & 散布在各個region,  但是都是共用japan east storage account, 這才導致頻寬要額外算錢...。




某方面來說這也是自己的鍋, 為什麼沒有先研究azure function跟storage account跨region會被額外計費, 之前是因為沒有超過100G頻寬所以沒事, 現在不知道為什麼storage account頻寬爆增, 被多算錢了才注意到這件事..., 不過這樣要解決也簡單了, 把目前不同region的azure function都各自綁定在對應相同region的storage account就好, 這樣頻寬就不會被額外計費了 (至於為什麼4/29後storage account頻寬爆增, 就不打算查了, 反正不算錢就當不影響...。)




現在我這個Japan East的storage account住了三個azure function, 每五分鐘trigger一次, 每trigger一次Egress就會花20~80MB頻寬輸出, 因為我的code完全沒讀寫檔案, 這個頻寬用量真的有點扯..., 到底都用來幹嘛...。



最後有一個想靠邀M$的事, 我重新佈署新的azure function時, 發現azure function在新部署設定檔時, 會預設選你現有的storage account, 然後那個storage account不一定會優先選相同region, 所以你要是一路default設定按下去, 就會發生我上面的問題, 不看文件一路default到底的下場在此...。

既然選不同region的storage account會頻寬多算錢, 那M$沒有警告嗎?  有!  當然有! 可是Visual Studio那UI提示太扯, 首先default看到的畫面會長這樣:



沒有任何警告訊息, 可是如果你點擊Azure儲存體那個dropdown list, focus進去後, 在往外面按一下滑鼠, 警告訊息才會跳出來...



所以一路default按到底的人就會高機率選到跨region的現有storage account, 然後帳單金額就增加了, 這真的是bug嗎?  還是feature spec?  我就不下定論了...只覺得好噁心....。