什麼是基礎結構即程式碼?
您的工作是要評估基礎結構即程式碼是否可能成為在公司佈建資源的重要方法。 您正在檢閱部署的可用選項,包括:
- Azure 入口網站
- Azure CLI
- Azure PowerShell
- Azure Resource Manager 範本 (JSON 和 Bicep)
您正在尋找可重複使用的選項,而且您必須決定要使用哪一種技術來部署 Azure 基礎結構。
在此單元中,您會了解基礎結構即程式碼如何及為何可協助您以自動化且可重複的方式部署 Azure 基礎結構。
Azure CLI 命令可用來說明概念。 您會深入了解如何使用命令在 Bicep 學習路徑的其他課程模組中部署資源。
定義基礎結構即程式碼
您的公司設計要發行到市場的新玩具,且大多數新玩具在購買後都需要一些組裝。 公司的設計小組會建立要隨附於每個玩具的使用手冊。 每個手冊都會提供如何正確組裝玩具的詳細資料。
您可以將基礎結構即程式碼想成基礎結構的指示手冊。 此手冊會詳細說明資源的最終設定,以及如何達成該設定狀態。
基礎結構即程式碼是將基礎結構佈建自動化的程序。 其使用類似於原始程式碼所用的描述性程式碼語言和版本設定系統。 當您建立應用程式時,您的原始程式碼會在每次編譯時產生相同結果。 與此類似,基礎結構即程式碼部署是自動化、一致且可重複的。 基礎結構即程式碼可將基礎結構資源 (例如虛擬網路、虛擬機器、應用程式和儲存體) 的部署自動化。
如果您回想一下新玩具的使用手冊,撰寫使用手冊的方式有許多種。 其中一個選項是詳細說明建置流程的每個步驟。 另一個選項是顯示組裝玩具所需部分和組件的分解圖。 在此單元稍後,您會了解命令式程式碼與宣告式程式碼之間的差異,以及其與您公司使用手冊之間的關聯。
為何使用基礎結構即程式碼?
採用基礎結構即程式碼方法為資源佈建提供許多優點。 使用基礎結構即程式碼,您可以:
- 提高對部署的信心。
- 管理多個環境。
- 進一步了解您的雲端資源。
提高信心
使用基礎結構即程式碼的其中一個優點,就是從改善一致性和安全性以提高您對部署的信心程度。
與目前程序整合:如果您的組織已使用標準軟體開發實務,您可以針對基礎結構部署採用這些相同的程序。 例如,同儕審查有助於偵測設定中的問題,在對手冊進行變更時,可能很難偵測到這些問題。
一致性:採用基礎結構即程式碼方法,可協助小組遵循制訂完善的程序來部署基礎結構。 藉由遵循這些程序,就能將一小部分個體的責任轉移到您的自動化程序和工具。 基礎結構即程式碼有助於降低資源佈建中的人為錯誤,並確保一致的部署。
自動化掃描:您可以使用自動化工具掃描基礎結構即程式碼組態,以檢查程式碼中的錯誤。 自動化工具也會檢閱建議的變更,以確保遵循安全性和效能實務。
祕密管理:許多解決方案都需要祕密,例如連接字串、加密金鑰、用戶端祕密和憑證。 在 Azure 中,Azure Key Vault 是用來安全地儲存這些祕密的服務。 許多基礎結構即程式碼工具可與 Key Vault 整合,以便在部署時安全地存取這些祕密。
存取控制:透過基礎結構即程式碼部署,您可以選擇使用受控識別或服務帳戶將資源佈建自動化。 此流程可確保只有這些身分識別可以修改您的雲端資源。 這也有助於防止部署到生產環境的設定不正確。 如有必要,您可以使用緊急存取帳戶 (通常稱為 緊急帳戶) 或使用 Microsoft Entra ID Privileged Identity Management 功能覆寫此流程。
避免設定漂移:等冪是經常與基礎結構即程式碼相關的詞彙。 當某項作業具有等冪性時,表示每次執行都會提供相同的結果。 如果您選擇使用等冪運算的工具,就可以避免設定漂移。
作為等冪的範例,請考慮下列 Azure CLI 命令。 該命令會在美國東部區域建立名為 storage-resource-group
的 Azure 資源群組。
az group create \
--name storage-resource-group \
--location eastus
如果您第二次執行此命令,您會收到完全相同的輸出,因為此 Azure CLI 命令的設計為等冪。 您不會收到錯誤或重複的資源群組。
當使用基礎結構即程式碼時,您可以在解決方案的每個版本中重新部署環境。 這些版本可能包含小幅設定變更或甚至重大更新。 此程序有助於避免設定漂移。 如果對資源進行了意外變更,可重新部署設定加以修正。 藉由遵循這種方法,您即可使用程式碼來記錄環境。
管理多個環境
許多組織會維護多個應用程式環境。 您玩具公司的開發人員可能會在存放庫中暫存應用程式程式碼的多種版本,以供發行到不同環境。 這些環境可能包括開發、測試與生產。 有些組織會為全域散發的應用程式維護多個生產環境。 其他組織 (例如獨立軟體廠商 (ISV)) 則會為其客戶維護多租用戶環境。
以下是基礎結構即程式碼可協助您管理環境的一些主要方式:
佈建新環境:雲端運算的一項主要優點是能夠調整規模。 基礎結構即程式碼可協助您擴展到應用程式的多個執行個體。 這些執行個體在負載增加時可能會有所幫助,您也可以為全球其他區域的使用者部署這些執行個體。 測試應用程式時 (例如在滲透測試、負載測試和 Bug 測試期間),這項靈活性也相當有用。 您可以使用定義完善的程式碼基底,以一致的方式動態佈建這些新環境。
非實際執行環境:組織所面臨的常見問題是生產環境與非生產環境之間的差異。 在個別環境中手動佈建資源時,最終設定可能會不相符。 例如,當將新功能部署到與實際執行環境不同的非實際執行環境時。 由於這兩個環境之間的差異,因此新功能可能無法在生產環境中如預期般運作。 使用基礎結構即程式碼有助於將這些問題降至最低。 您可以針對每個環境使用相同的設定檔,但提供不同的輸入參數以建立唯一性。
災害復原:在某些情況下,基礎結構即程式碼可作為組織災害復原方案的一部分使用。 例如,您可能會因為服務中斷而需要在另一個區域中重新建立環境。 藉由使用基礎結構即程式碼,您可以快速佈建新的執行個體進行容錯移轉,而不是手動部署和重新設定所有內容。
進一步了解雲端資源
基礎結構即程式碼可協助您進一步了解雲端資源的狀態:
稽核線索:您對基礎結構即程式碼設定所做的變更,會使用與您應用程式原始程式碼相同的方式進行版本控制。 您可以使用工具追蹤這些變更,例如使用 Git 的版本歷程記錄。 此稽核線索表示您可以檢閱每個變更的詳細資料、進行變更的人員,以及進行變更的時間。
記錄:您可以使用許多基礎結構即程式碼設定新增中繼資料 (例如註解),以描述您設定中程式碼的用途。 如果您的組織已遵循某個程式碼記錄程序,請考慮對您的基礎結構程式碼採用這些相同程序。
整合系統:許多時候,當開發人員開發新功能時,其必須對應用程式程式碼和基礎結構程式碼進行變更。 當您使用通用系統時,組織可以進一步了解應用程式與基礎結構之間的關聯性。
進一步了解雲端基礎結構:當使用 Azure 入口網站佈建資源時,許多程序會經過抽象化處理而無法檢視。 基礎結構即程式碼可協助您進一步了解 Azure 的運作方式,以及如何針對可能發生的問題進行疑難排解。 例如,當使用 Azure 入口網站建立虛擬機器時,某些建立的資源會經過抽象化處理而無法檢視。 受控磁碟和網路介面卡會在幕後進行部署。 當使用基礎結構即程式碼部署相同的虛擬機器時,您可以完全掌控所有建立的資源。
命令式和宣告式程式碼
您可以用不同方式撰寫組裝新玩具的使用手冊。 當將服務和基礎結構的部署自動化時,可採取兩種方法:命令式和宣告式。
使用「命令式程式碼」,您會依特定順序執行一連串的命令,以達成最終設定。 此程序會定義程式碼應該完成的工作,並定義如何完成工作。 命令式方法就像是逐步使用手冊。
使用「宣告式程式碼」,您只會指定最終設定。 此程式碼不會定義如何完成工作。 宣告式方法就像是分解圖使用手冊。
當選擇使用命令式方法或宣告式方法佈建資源時,請考慮您組織中可能已使用的工具。 另請考慮哪種方法可能符合您自己的技能。
命令式程式碼
在 Azure 中,命令式程式碼方法是透過使用指令碼語言 (例如 Bash 或 Azure PowerShell) 以程式設計方式完成。 指令碼會執行一系列的步驟,以建立、修改甚至移除資源。
此範例顯示了兩個建立資源群組和儲存體帳戶的 Azure CLI 命令。
#!/usr/bin/env bash
az group create \
--name storage-resource-group \
--location eastus
az storage account create \
--name mystorageaccount \
--resource-group storage-resource-group \
--location eastus \
--sku Standard_LRS \
--kind StorageV2 \
--access-tier Hot \
--https-only true
第一個命令會在美國東部區域建立名為 storage-resource-group
的資源群組。 第二個命令會在第一個命令所建立的 storage-resource-group
資源群組中,建立名為 mystorageaccount
的儲存體帳戶。 第二個命令也會設定儲存體帳戶的一些屬性,包括儲存體帳戶的種類及其存取層。
您可以使用命令式方法將資源佈建完全自動化,但此方法有一些缺點。 當您的架構成熟時,指令碼可能會變得很複雜,而難以管理。 命令可以更新或淘汰,因而需要檢閱現有的指令碼。
宣告式程式碼
在 Azure 中,宣告式程式碼方法是透過使用範本完成。 有許多類型的範本可供使用,包括:
- JSON
- Bicep
- 由 RedHat 提供的 Ansible
- 由 HashiCorp 提供的 Terraform
注意
本課程模組著重於使用 Bicep 範本。
讓我們來看看下列範例,其中使用了 Bicep 範本設定儲存體帳戶。 儲存體帳戶的設定與 Azure CLI 範例相符。
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
name: 'mystorageaccount'
location: 'eastus'
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
supportsHttpsTrafficOnly: true
}
}
資源區段會定義儲存體帳戶設定。 此區段包含儲存體帳戶的名稱、位置和屬性,包括其 SKU 和帳戶的類型。
您可能會注意到 Bicep 範本未指定如何部署儲存體帳戶。 其只會指定儲存體帳戶所需的外觀。 Azure 會決定要在幕後執行的實際步驟,以建立此儲存體帳戶或將其更新為符合規格。