阿里云多賬號財務管理優秀實踐
大型企業或集團公司,由于組織架構復雜,業務復雜等原因,通常擁有多個阿里云賬號來管理規模龐大的云上資源。多賬號的環境,又進一步加大了分賬的難度。本文通過真實場景案例,來介紹如何合理使用阿里云現有產品的能力,在多賬號的環境中根據財務需求進行分賬。
規劃設計
多賬號分賬:站在總公司視角,來歸集各阿里云賬號產生的賬單費用,由企業管理賬號統一進行出賬。
單賬號分賬:站在單個賬號視角,以部門/項目這種更細的力度進行分賬。
多賬號分賬
財務關聯
從現有多個阿里云賬號中選擇一個賬號作為企業管理賬號,或者新建一個專門的企業管理賬號。其他賬號可以通過財務關聯的方式與企業管理賬號進行連接,由企業管理賬號統一管理和處理賬單、發票和付款等財務信息。簡化財務管理流程,提高財務透明度和控制力。
第一步、企業管理賬號發起關聯邀請
企業管理賬號主賬號登錄“費用與成本控制臺”,進入“企業財務-賬務關聯”,點擊“邀請關聯賬號”按鈕,如下圖:
點擊“邀請關聯賬號”后,首先彈出“填寫關聯賬戶信息”頁面,您需要填寫“關聯的阿里云賬號”、”顯示名稱”,系統將自動校驗子賬號是否滿足建立主、子財務關聯的條件。校驗通過后點擊“下一步”,進入下個步驟。
關系類型選擇“企業集團關系”,關系策略選擇“財務管理”,全選或按需求選擇財務管理下的權限選項,設置無誤后點擊“下一步”,進入下一個步驟。
系統會向待關聯的子賬號發起邀請;待關聯的子賬號將收到站內信、短信及郵件通知,需要確認授權。
第二步、被邀請賬號接受邀請
被邀請賬號登錄“費用與成本控制臺”后,進入“企業財務-財務關聯”,點擊“確認邀請”。
第三步、企業管理賬號查看關聯關系狀態
企業管理賬號主賬號登錄“費用與成本控制臺”,進入“財務關聯”,查看跟所有子賬號建立關聯關系的狀態。
共享信控
“信控額度”是阿里云給予部分大客戶一定的賬號透支的權限,可以先消費,后還款。客戶在有信控額度時,預付費訂單及后付費賬單,均可通過信控額度進行支付或抵扣。企業管理賬號將信控額度分配給已關聯的賬號,共享企業管理賬號的信控額度。
第一步、企業管理賬號登錄“費用與成本”,進入“企業財務管理 - 財務資產管理 - 統一資產管理”,進行各賬號的信控額度調整或首次額度劃撥。
在彈出的“信控額度設置”界面,設置該賬號的信控額度,完成后點擊“確定”按鈕。
第二步、被分配信控額度的賬號需登錄“費用與成本”,進入“合同管理 - 合同管理 頁面,在合同類型選擇信控合同,找到對應待確認的信控,進行相應的合同確認操作。如下圖所示找到需要確認的合同,點擊右側“確認通過”,合同狀態變為“生效中”后,該賬號被設置的信控額度才真正生效,并可以被使用。
統一結算
將同一個企業組織下不同賬號、賬期,統一建立定制化結算任務,統一開具發票,避免了多個賬號各自匯款,開票,結算的繁瑣操作。
第一步、企業管理賬號登錄費用與成本控制臺,進入“企業財務管理-統一結算”,點擊“創建結算任務”按鈕,進行創建統一結算任務,如下圖:
第二步、點擊“創建結算任務”按鈕后,在創建統一結算任務頁面:設置結算單名稱;設置主賬號需要預留的金額,以防主賬號下運行的業務可用金不足;根據賬號、賬期完成篩選,可在下方列表勾選想要結算的對象;點擊“保存草稿”,后續可以選擇草稿狀態的統一結算任務繼續編輯。完成上述配置后,點擊“下一步”按鈕。
第三步、生成結算單后,確認結算單內容,完成后點擊“生成并運行結算單”按鈕,正式創建統一結算任務。
第四步、如果主賬號的賬戶余額大于結算單待結算金額時,會自動完成劃撥和核銷;如果主賬號的賬戶余額不足,主賬號充值后,系統將自動完成劃撥和核銷;當結算金額被全部支付后,該統一結算完成。
多賬號分賬
企業管理賬號通過“月賬單概覽”功能查看整個企業的總賬以及各個子賬號的詳細費用。
第一步、使用企業管理賬號登錄“費用與成本控制臺”,進入“賬單管理-月賬單概覽”,選擇賬期,點擊“賬單文件導出”按鈕。
第二步、導出賬號內容選擇“全部賬號”,按需選擇賬期,導出內容選擇“當前實時月賬單PDF”,賬號是否合并選擇“是”,完成配置后點擊“確定”按鈕。
第三步、下載PDF后打開,找到“賬單支付匯總”,如下圖所示,即可看到各個賬號的分賬情況。
單賬號分賬
分賬準備
資源組
- 財務單元分賬是按照資源組來進行的,在創建資源的時候,必須慎重選擇資源組,以確保財務分賬的準確性和合理性。
- 一個資源組代表著一個項目,它為項目的管理和推進提供了清晰的分類和標識
- 依據資源組可以創建飛書群,這個群將用于發送云資源告警和分賬賬單,方便及時了解資源狀況和財務情況。
- 賬號以資源組維度進行授權,進一步明確了賬號的使用范圍和權限,保障了資源的安全和合理使用。
標簽
財務單元
財務單元是基于規則歸集匯總云資源費用或成本的工具,可根據自身成本分析維度需求設置分賬規則,并實現資源費用歸集,以達到分賬的目的。
第一步、登錄賬號1,在費用-分賬管理-財務單元處,點擊財務單元旁的加號,創建一級財務單元。
第二步、填寫上表所示的一級財務單元名稱,完成后點擊“確認按鈕”。依次創建上表所示的一級財務單元。
第三步、點擊一級財務單元,在右側自動分配規則中,點擊“編輯”按鈕,按上表所示的自動分配規則進行配置。按上表所示依次配置一級財務單元的自動分配規則。
第四步、點擊“總覽”,查看單賬號按部門分賬的情況
成本管家
開通成本管家
點擊https://sls.console.aliyun.com/lognext/app/bill_app/?resource=/setting
此鏈接,勾選“導入賬單授權”和“授權開通表格存儲”,點擊“立即更新”按鈕。
選擇“阿里云賬單導入”,點擊“下一步”按鈕。
點擊“更新資源&下一步”。
點擊“完成”按鈕。
成本管家導入分賬賬單
賬單明細中的財務單元,對于分拆型產品來說是不準確的,分拆型產品的財務單元需要以分賬賬單內的為準。目前成本管家默認沒有導入分賬賬單,如果需要導入的話,可以手動進行如下幾步操作:
第一步、表格存儲創建數據表
點擊https://otsnext.console.aliyun.com/cn-wulanchabu/totalList
此鏈接,進入表格存儲,選擇烏蘭察布區域,進入’bss-'形式命名的實例。
選擇“數據表列表”,點擊“創建數據表”按鈕。
創建splititem_bill表,主鍵配置參考instance_bill,完成配置后點擊“確定”按鈕。
第二步、進入成本管家執行查詢語句
點擊https://sls.console.aliyun.com/lognext/profile此鏈接,找到“bill-analysis-”開頭,主賬號uid結尾的的project,點擊進入。
雙擊名為“aliyun_bill”的logstore,在搜索框中填寫下面的SQL語句。其中 {endpoint}需要替換為表格存儲中’bss-‘開頭命名的實例經典網絡訪問地址,{ots_instance_name}需要替換為表格存儲中’bss-‘開頭命名的實例名稱,{uid} 需要替換為主賬號uid。點擊“查詢/搜索”按鈕。
* | create table splititem_bill (hash_key varchar, __time__ bigint, __source__ varchar, instanceconfig varchar, productcode varchar, internetip varchar, outstandingamount double, pretaxamount double, instancespec varchar, subscriptiontype varchar, billingitem varchar, pretaxgrossamount double, usage double, producttype varchar, paymentamount double, listprice double, zone varchar, usageunit varchar, nickname varchar, productname varchar, currency varchar, tag varchar, invoicediscount double, productdetail varchar, item varchar, resourcegroup varchar, deductedbycashcoupons double, deductedbyprepaidcard double, ownerid varchar, billingdate varchar, listpriceunit varchar, deductedbycoupons double, instanceid varchar, serviceperiod double, deductedbyresourcepackage double, billingtype varchar, region varchar, intranetip varchar, accountname varchar, AdjustAmount double, BizType varchar,CashAmount double, CommodityCode varchar, CostUnit varchar, ServicePeriodUnit varchar, SplitAccountID varchar, SplitAccountName varchar, SplitBillingCycle varchar, SplitBillingDate varchar, SplitCommodityCode varchar, SplitItemID varchar, SplitItemName varchar, SplitProductDetail varchar ) with ( endpoint='{endpoint}',accessid='rolearn',accesskey='acs:ram::{uid}:role/aliyunserviceroleforslsaudit',instance_name='{ots_instance_name}',table_name='splititem_bill',type='tablestore')
第三步、聯系阿里云后臺創建分賬賬單的導入任務
儀表盤
訂閱
使用訂閱功能,每月初自動發送賬單儀表盤到飛書群。確保所有相關人員都能及時獲取最新的賬單信息,增強財務透明度,及時了解和控制成本,提高整體運營效率。并且定期接收賬單數據,方便進行歷史對比和趨勢分析。
第一步、在儀表盤右上角選擇“訂閱”,點擊“創建”。
第二步、在彈出“創建訂閱”界面,輸入訂閱名稱和頻率,下圖示例為每月發送一次,完成上述配置后,點擊“下一步”按鈕。
第三步、通知選擇“WebHook-釘釘機器人”,填寫請求地址和標題,完成上述配置后,點擊“提交”按鈕。
優化
特殊產品自定義分賬
為了實現對MaxComputer、DataWorks、圖數據庫、ECI等云產品的分賬需求,由于這些產品無法通過資源組或標簽的方式進行分賬,我們決定通過修改表格存儲中的分賬賬單數據來達到目標。鑒于賬單數據量龐大,我們采用腳本的方式代替人工操作。
為了避免直接修改原始分賬賬單數據(即splititem_bill表),我們的策略是先從splititem_bill表中讀取數據,根據自定義的規則進行修改,然后將處理后的數據寫入到一個新的表中。最后,我們將儀表盤的數據源切換到這個新創建的表上。
代碼邏輯,請見下面的流程圖:
此外,可能會出現多個應用共享同一實例或集群的情況,這種情況下無法通過資源組或標簽的方式實現精準分賬。為了應對這種情況,以容器服務 Kubernetes(ACK)為例,首先需要梳理 ACK 關聯的所有資源實例及其費用。可以通過成本洞察或其他工具對 ACK 資源進行詳細的費用分析,然后手動進行分賬。
在讀取 splititem_bill 表的數據時,應忽略 ACK 關聯資源的賬單,不將其寫入 splititem_bill_transform 表中。對于其他資源,按照既定的分賬規則進行處理,并將結果寫入 splititem_bill_transform 表。代碼執行完畢后,再手動將 ACK 的分賬結果按照我們的分賬邏輯寫入 splititem_bill_transform 表中。
最終效果如下圖所示,ack 這條數據即為我們手動寫入的分賬數據,包含了ECS、SLB、SLS等相關費用的詳細信息。通過這種方式,我們可以精確地跟蹤和管理每個項目的成本,確保費用分配的透明性和準確性。
按資源組維度發送通知
分賬不僅需要運維人員了解,也需要通知應用人員。我們將按照資源組(即應用)的維度,每月發送前兩個月的費用明細至各應用團隊所在的飛書告警群。確保各團隊對成本分配有清晰的認識,這有助于促進資源的合理使用和成本的有效控制。通過這種方式,每個團隊都能更好地管理自己的預算,避免不必要的資源浪費,提高整體運營效率。
為了實現賬單數據的自動發送,我們有兩種方案可供選擇:一是利用阿里云的SDK直接獲取表格存儲 splititem_bill_transform 表的數據;二是調用SLS的SDK(https://api.aliyun.com/api/Sls/2020-12-30/GetLogsV2?sdkStyle=dara)獲取賬單數據,其本質也是從SLS的表映射中獲取 splititem_bill_transform 表的數據。無論采用哪種方式,最終目標是通過Webhook將前兩個月的賬單數據自動發送到指定的飛書群中,效果如上圖所示。
可用額度告警
在企業管理賬號上可以看到各個賬號的可用額度,且可以為各個賬號設置可用額度閾值告警,如下圖所示。但是這個預警通知,只能發送到子賬號維護的安全手機、郵箱及站內信,且每天提醒一次,最多連續5天,可能導致重要通知被忽略或延遲處理。
為此,通過編寫自定義腳本的方式,
各個賬號調用https://api.aliyun.com/api/BssOpenApi/2017-12-14/QueryAccountBalance
這個接口,獲取每個賬號的可用額度,并設置規則,當可用額度小于信控額度的20%就發送告警。最終效果如下圖所示:
術預算超支告警
為了更好地管理和監控阿里云資源的消費情況,建議設置年度消費閾值,并根據該閾值計算每月可消費金額。每月定期發送通知,報告各賬戶當月和當年的總消費金額、可消費金額以及已消費金額占可消費金額的比例。同時,羅列各賬號當月的具體消費金額,并附帶賬單儀表盤,以便直觀地查看消費情況。最終效果如下圖所示:
若當月消費超過每月預算值,則另外發送預算超支告警。
遇到的問題
某個實例的分賬費用突增
如下面兩個圖所示,同一快照不同月份的應付金額不同,且相差較大。
阿里云的說法:
阿里云的云產品定價策略是到小數點后6位~12位,但是采取的結算策略是在商品粒度按一系列出賬規則匯總結算并出賬,結算過程中將6位~12位小數位抹零減少到2位小數后和客戶進行結算。
結算后為了滿足客戶精細化對賬需求,又會將商品粒度2位的結算金額反攤至2位的資源實例和計費項粒度,反攤過程中因存在算術上除不盡的情況,此時會把除不盡的零頭隨機記在某個資源實例或計費項上,這就導致了明細賬單中某些資源實例、計費項對應的賬單出現”應付金額“大于優惠金額扣減之前的“官網價”的情況。
該現象是在整條賬單結算完成,賬單向更細粒度數據做拆分時產生,因此并不影響客戶和阿里云的真實結算金額。
這個抹零和除不盡的金額是阿里云的結算策略,目前來講是無法改變的。
簡單的說:應付金額只顯示2位小數,實際金額到小數點后6位~12位,兩者匯總算起來就存在差價,這個差價會隨機記在某個資源實例或計費項上。
總結
至此,通過企業管理賬號,根據成員賬號及其所屬的部門進行分賬,實現成員賬號費用的部門分攤和核算。同時,各個子賬號根據各自的項目進行獨立的分賬操作,確保每個項目的費用分攤和分配,實現獨立成本核算和費用管理,提高費用透明度和準確性。