ARM 範本與 Bicep 如何實現基礎設施即程式碼?

基礎設施即程式碼(Infrastructure as Code,IaC)把 Azure 資源的目標設定寫成可版本化、審閱及重複部署的宣告。ARM 範本是 Azure Resource Manager 的 JSON 格式;Bicep 提供較精簡的 Azure 專用語法,部署前會轉譯成 ARM 範本。

ARM 範本、Bicep 與 Azure Resource Manager 的關係

Azure Resource Manager 是 Azure 的部署及管理服務。ARM 範本以 JSON 定義資源、屬性、參數、變數、相依關係及輸出;Bicep 則是宣告式語言,提供型別檢查、模組及較簡潔的語法。Bicep 部署時會轉譯為 ARM 範本,因此兩者使用同一 Resource Manager 控制平面,而不是兩套互不相容的平台。

Microsoft 指出,Bicep 可立即使用 ARM 範本支援的資源類型及 API 版本。這不代表每個 API 版本的每項屬性都適合生產環境;仍須選定 API 版本、查閱資源提供者文件,並在非生產訂閱驗證。

宣告式及可重複

描述目標狀態,由 Resource Manager 按相依關係協調部署;相同範本可配合參數重複使用。

模組化

把網絡、運算、儲存及監控拆成責任清晰的 Bicep 模組,降低重複及環境漂移。

版本及審批

將原始碼及非機密參數納入版本控制,以 pull request、測試及部署記錄保存責任鏈。

由程式碼到 Azure 的可靠部署流程

  1. 界定管理範圍:列出訂閱、管理群組、資源群組及由 IaC 管理的資源,避免入口網站手動變更與程式碼互相覆蓋。
  2. 建立模組與參數:把可重用結構放進模組;區域、SKU、命名及地址前綴由參數提供。對敏感值使用 @secure() 類型及受控秘密來源。
  3. 執行靜態驗證:使用 Bicep 編譯、linter、命名及政策檢查,確認資源類型、API 版本、父子關係與最小權限。
  4. 預覽變更:使用 Resource Manager what-if 檢視可能新增、修改、刪除或忽略的資源;對雜訊及已知限制作人工審閱。
  5. 分階段部署及驗收:先測試後生產,保留活動記錄、部署輸出及批准紀錄;再驗證網絡、身分、監控、備份及應用程式功能。

增量模式、完整模式與刪除風險

增量模式會新增或更新範本列出的資源,但不會刪除同一資源群組內未列出的其他資源;不過,範本再次部署時仍會按所提交的資源屬性套用目標狀態,因此不可把未指定屬性一概理解為「保持不變」。完整模式可能刪除未列在範本內的資源。Microsoft 現行文件建議使用增量模式,並在需要管理資源生命週期及受控刪除時評估 deployment stacks。

what-if 是重要預覽工具,但不是保證。生產變更仍應具備最小權限、同儕審閱、政策控制、資源鎖、資料備份及可演練的回復程序。

秘密與安全設定

不要把密碼、金鑰或連接字串硬編碼於 Bicep、ARM JSON、一般參數檔或命令列。Microsoft 文件提醒,命令列值可能出現在部署記錄;安全參數只能避免值寫入部署歷程,仍須限制誰能讀取原始碼、參數來源及 Key Vault。優先使用受控身分及 RBAC,並按部署情境由 Key Vault 或 CI/CD 秘密儲存提供敏感值。

NIST SP 800-128 將安全設定管理視為持續流程。IaC 因而應配合基線、變更控制、影響分析、監察及稽核,而不是只追求自動部署速度。

IaC 驗收清單

範疇必要核對可保存證據
程式碼編譯、linter、模組版本及 API 版本均通過。CI 結果、版本標籤
變更what-if 結果已審閱,任何刪除及重建均有批准。預覽輸出、審批記錄
身分部署服務主體或受控身分只具必要作用域權限。角色指派、存取覆核
秘密原始碼及記錄沒有明文秘密;輪替及撤銷程序已測試。秘密掃描、Key Vault 記錄
服務資源建立後的網絡、監控、備份及應用程式測試通過。測試報告、運行手冊

不確定如何應用於實際環境?我們的工程師可按現場情況提供建議,免費解答及報價。

WhatsApp 即時查詢

常見問題

ARM 範本與 Bicep 是兩套不同的部署平台嗎?
不是。ARM 範本是 Azure Resource Manager 使用的 JSON 宣告格式;Bicep 是面向 Azure 的宣告式語言,部署時會轉譯成 ARM 範本,再交由 Resource Manager 處理。
Bicep 是否支援所有 Azure 資源類型及 API 版本?
Microsoft 說明 Bicep 可立即支援 ARM 範本支援的資源類型及 API 版本,毋須等待工具更新;個別資源功能仍取決於所選 API 版本及資源提供者。
IaC 如何分隔開發、測試及生產環境?
可重用相同模組,並以不同參數檔或受控參數來源指定區域、SKU、命名及網絡前綴。秘密不應以明文寫入參數檔或命令列。
可以把密碼直接寫入 Bicep 或 ARM 參數嗎?
不應把秘密硬編碼或以明文命令列參數傳送。應使用安全參數,並按需要透過 Key Vault 或部署平台的秘密儲存及受控身分提供值。
what-if 是否保證預覽結果與實際部署完全相同?
不是。what-if 可預覽部署可能造成的資源變更,但 Microsoft 列明結果可能出現雜訊或限制;它應配合程式碼審閱、測試環境、最小權限及批准流程,而不是成為唯一防線。
部署模式會影響資源刪除嗎?
會。增量模式保留資源群組內未在範本列出的既有資源;完整模式可能刪除未列於範本的資源。Microsoft 建議採用增量模式,並以 deployment stacks 管理需要受控刪除的資源。

需要規劃企業雲端或網絡工程?

我們可按現有網絡、Azure 資源、地址規劃、安全策略及營運要求,協助進行架構檢視、混合網絡連接、監控及故障排查,歡迎查詢及索取方案。

WhatsApp 免費諮詢

延伸閱讀

權威資料來源

若閣下正計劃相關工程或需要選購設備,歡迎瀏覽網絡工程服務了解方案詳情,或透過網上快速報價與我們的工程師聯絡。

產品規格以原廠最新文件為準;有需要請聯絡我們工程師。