使用Bash在 Windows 上安裝 Terraform
Terraform 可讓您定義、預覽和部署雲端基礎結構。 使用 Terraform 時,您可以使用 HCL 語法來建立設定檔。 HCL 語法可讓您指定雲端提供者 (例如 Azure) 和構成雲端基礎結構的元素。 建立設定檔之後,您可以建立執行計畫,讓您先預覽基礎結構變更,之後再部署。 驗證變更之後,您可以套用執行計畫來部署基礎結構。
本文會提供向 Azure 驗證以搭配 Terraform 使用的選項。
在本文中,您將學會如何:
- 安裝 Git Bash 終端機模擬器
- 安裝 Azure CLI
- 安裝 Terraform (英文)
- 設定您的環境以在 Windows 上執行 Terraform
- 了解常見的 Terraform 和 Azure 驗證案例
- 從 Cloud Shell 透過 Microsoft 帳戶進行驗證 (使用 Bash 或 PowerShell)
- 從 Windows 透過 Microsoft 帳戶進行驗證 (使用 Bash 或 PowerShell)
- 使用 Azure CLI 建立服務主體
- 使用 Azure PowerShell 建立服務主體
- 在環境變數中指定服務主體認證
- 在 Terraform 提供者區塊中指定服務主體認證
1.設定您的環境
- Azure 訂用帳戶:如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
2.安裝終端機模擬器
Windows 上有許多選項可執行bash命令,包括 Git Bash 和 Windows 終端機。 本文已使用 Git Bash 進行測試。 下載並安裝 Git Bash。
3.安裝 Azure CLI
安裝 Azure CLI。 本文已使用 Azure CLI 2.26.1 版進行測試。
4.安裝適用於 Windows 的 Terraform
下載 Terraform。 本文已使用 Terraform 1.1.4 版進行測試。
從下載中,將可執行檔案解壓縮到您選擇的目錄(例如 ,
c:\terraform
。更新系統的全域PATH環境變數,以包含包含可執行文件的目錄。
開啟終端機視窗。
使用 命令確認全域路徑組
terraform
態。terraform -version
5.向 Azure 驗證 Terraform
Terraform 和 Azure 驗證情節
Terraform 只能支援透過 Azure CLI 向 Azure 進行驗證。 不支援使用 Azure PowerShell 進行驗證。 因此,雖然您可以在執行 Terraform 工作時使用 Azure PowerShell 模組,但您必須先使用 Azure CLI 向 Azure 進行驗證。
本文說明如何針對下列情節向 Azure 驗證 Terraform。 如需向 Azure 驗證 Terraform 的選項詳細資訊,請參閱使用 Azure CLI 進行驗證。
- 使用 Cloud Shell 透過 Microsoft 帳戶進行驗證 (搭配 Bash 或 PowerShell)
- 使用 Windows (搭配 Bash 或 PowerShell) 透過 Microsoft 帳戶進行驗證
- 透過服務主體進行驗證:
- 如果您沒有服務主體,則建立服務主體。
- 使用環境變數向 Azure 進行驗證,或使用 Terraform 提供者區塊向 Azure 驗證
透過 Microsoft 帳戶向 Azure 進行驗證
Microsoft 帳戶是用來登入 Microsoft 服務的使用者名稱 (與電子郵件及其認證相關聯),例如 Azure。 Microsoft 帳戶可以與一或多個 Azure 訂用帳戶相關聯,其中一個訂用帳戶是預設值。
下列步驟將示範如何:
- 使用 Microsoft 帳戶以互動方式登入 Azure
- 列出帳戶的相關聯 Azure 訂用帳戶 (包括預設值)
- 設定目前的訂用帳戶
開啟可存取 Azure CLI 的命令行。
執行 az login 時不需任何參數,請依照指示登入 Azure。
az login
重點︰
- 成功登入時,
az login
顯示已登入 Microsoft 帳戶相關聯的 Azure 訂用帳戶清單,包括預設訂用帳戶。
- 成功登入時,
若要確認目前的 Azure 訂用帳戶,請執行 az account show。
az account show
若要檢視特定 Microsoft 帳戶的所有 Azure 訂用帳戶名稱和識別碼,請執行 az account list。
az account list --query "[?user.name=='<microsoft_account_email>'].{Name:name, ID:id, Default:isDefault}" --output Table
重點︰
- 將
<microsoft_account_email>
預留位置取代為您想要列出其 Azure 訂用帳戶的 Microsoft 帳戶電子郵件地址。 - 使用 Live 帳戶,例如 Hotmail 或 Outlook,您可能需要指定完整的電子郵件地址。 例如,如果您的電子郵件地址是
admin@hotmail.com
,您可能需要將預留位置取代為live.com#admin@hotmail.com
。
- 將
若要使用特定的 Azure 訂用帳戶,請執行 az account set。
az account set --subscription "<subscription_id_or_subscription_name>"
重點︰
- 以您想要使用訂用帳戶的識別碼或名稱取代
<subscription_id_or_subscription_name>
預留位置。 - 呼叫
az account set
不會顯示切換至指定 Azure 訂用帳戶的結果。 不過,您可以使用az account show
來確認目前的 Azure 訂用帳戶是否已變更。 - 如果您從上一個步驟執行
az account list
命令,您會看到預設 Azure 訂用帳戶已變更為您使用az account set
指定的訂用帳戶。
- 以您想要使用訂用帳戶的識別碼或名稱取代
建立服務主體
部署或使用 Azure 服務的自動化工具 (例如 Terraform),應一律具有受限制的權限。 有別於以完整權限使用者身分登入應用程式的作法,Azure 提供服務主體。
最常見的模式是以互動方式登入 Azure、建立服務主體、測試服務主體,然後使用該服務主體進行未來的驗證 (以互動方式或從您的指令碼)。
若要建立服務主體,請登入 Azure。 透過 Microsoft 帳戶向 Azure 進行驗證之後,請返回這裡。
如果您要從 Git Bash 建立服務主體,請設定
MSYS_NO_PATHCONV
環境變數。 (如果您使用 Cloud Shell,則不需要此步驟)。export MSYS_NO_PATHCONV=1
重點︰
- 您可以全域方式設定
MSYS_NO_PATHCONV
環境變數 (針對所有終端工作階段) 或本機 (僅適用於目前的工作階段)。 由於建立服務主體並非您經常執行的動作,此範例會設定目前工作階段的值。 若要全域設定此環境變數,請將設定新增至~/.bashrc
檔案。
- 您可以全域方式設定
若要建立服務主體,請執行 az ad sp create-for-rbac。
az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>
重點︰
- 您可以將
<service-principal-name>
取代為環境的自訂名稱,或完全省略 參數。 如果您省略參數,則會根據目前的日期和時間產生服務主體名稱。 - 成功完成時,
az ad sp create-for-rbac
會顯示數個值。 下一個步驟會使用appId
、password
和tenant
值。 - 如果遺失,就無法擷取密碼。 因此,您應該將密碼儲存在安全的地方。 如果您忘記密碼,您可以重設服務主體認證。
- 本文中正在使用具有參與者角色的服務主體。 如需角色型存取控制 (RBAC) 角色的詳細資訊,請參閱 RBAC:內建角色。
- 建立服務主體的輸出包含敏感性認證。 請務必不要在程式碼中包含這些認證,或是將認證簽入原始檔控制中。
- 如需使用 Azure CLI 建立服務主體時選項的詳細資訊,請參閱使用 Azure CLI 建立 Azure 服務主體一文。
- 您可以將
在環境變數中指定服務主體認證
建立服務主體之後,您可以透過環境變數將其認證指定給 Terraform。
新增下列環境變數,以編輯
~/.bashrc
檔案。export ARM_SUBSCRIPTION_ID="<azure_subscription_id>" export ARM_TENANT_ID="<azure_subscription_tenant_id>" export ARM_CLIENT_ID="<service_principal_appid>" export ARM_CLIENT_SECRET="<service_principal_password>"
若要執行
~/.bashrc
腳本,請執行source ~/.bashrc
(或其縮寫的對等用法. ~/.bashrc
)。 您也可以結束並重新開啟 Cloud Shell,讓指令碼自動執行。. ~/.bashrc
設定環境變數之後,您可以確認其值,如下所示:
printenv | grep ^ARM*
重點︰
- 如同任何環境變數,若要從 Terraform 指令碼中存取 Azure 訂用帳戶值,請使用下列語法:
${env.<environment_variable>}
。 例如,若要存取ARM_SUBSCRIPTION_ID
值,請指定${env.ARM_SUBSCRIPTION_ID}
。 - 建立及套用 Terraform 執行計畫,會在服務主體相關聯的 Azure 訂用帳戶上進行變更。 如果您已登入一個 Azure 訂用帳戶,而環境變數指向第二個 Azure 訂用帳戶,實際上有時可能會造成混淆。 讓我們看下列範例以利說明。 假設您有兩個 Azure 訂用帳戶:SubA 和 SubB。 如果目前的 Azure 訂用帳戶是 SubA (透過
az account show
決定),而環境變數指向 SubB,則 Terraform 所做的任何變更都在 SubB 上。 因此,您必須登入您的 SubB 訂用帳戶,以執行 Azure CLI 命令或 Azure PowerShell 命令來檢視您的變更。
在 Terraform 提供者區塊中指定服務主體認證
Azure 提供者區塊會定義可讓您指定 Azure 訂用帳戶驗證資訊的語法。
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>2.0"
}
}
}
provider "azurerm" {
features {}
subscription_id = "<azure_subscription_id>"
tenant_id = "<azure_subscription_tenant_id>"
client_id = "<service_principal_appid>"
client_secret = "<service_principal_password>"
}
# Your code goes here
警告
在 Terraform 設定檔中指定 Azure 訂用帳戶認證的能力可能很方便,尤其是在測試時。 不過,不建議將認證儲存在可由非信任人員檢視的純文字檔中。
對 Azure 上的 Terraform 進行疑難排解
針對在 Azure 上使用 Terraform 時的常見問題進行疑難排解
下一步
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應