使用 Terraform 作為 Azure Developer CLI 的基礎設施即代碼工具

Azure 開發者 CLI(azd)支援多個基礎設施作為程式碼(IaC)提供者,包括:

預設情況下,azd 假設 Bicep 是 IaC 提供者。 參考《 比較 Terraform 與 Bicep 》文章,有助於判斷哪家 IaC 供應商最適合你的專案。

注意

Terraform 仍在 Beta 中。 想了解更多關於 alpha 和 beta 功能支援,請參考 功能版本與發佈策略 頁面

必要條件

Important

即使您使用 azd,Terraform 部署仍需要登入 Azure CLI。 Terraform azurerm 提供者預設透過 Azure CLI 進行認證,並不會從憑證快取讀取憑證。azd 如果你只執行 azd auth login,azd up 會在佈建步驟因 ERROR: Please run 'az login' to setup account 而失敗。 請參閱 Authenticate to Azure 以了解推薦的登入流程。

向 Azure 驗證

因為 Terraform 使用 Azure CLI 進行驗證,所以在執行 azd 之前,您必須先登入 az 和 azd up。 你可以用兩種方式來做這件事。

設定 azd 將驗證委派給 Azure CLI。 這個設定讓你只用 az login 一次登入,並且用相同的憑證來使用兩個工具。

azd config set auth.useAzCliAuth true
az login

如果你使用多個租戶,請加入 --tenant 參數:

az login --tenant <tenant-id>

選項二:分別登入每個工具

如果您偏好讓 azd 與 Azure CLI 的驗證彼此獨立,請使用各自的命令登入每個工具:

azd auth login
az login

當任一權杖到期時,你需要更新兩個工作階段。

將 Terraform 設定為 IaC 提供者

  1. 打開位於專案根目錄中的 azure.yaml 檔案,並確保你有以下幾行代碼,以覆寫預設為 Bicep 的設定:

    infra:
      provider: terraform
    
  2. 請將所有 .tf 檔案加入專案根目錄中的 infra 目錄。

  3. 執行 azd up。

注意

看看這個 azd 範本,Terraform 作為 IaC 提供者: Node.js 和 Terraform。

azd pipeline config 用於 Terraform

Terraform 會儲存受控基礎結構和設定的相關狀態。 因為這個狀態檔案,你需要在 GitHub 中設定部署管線之前,啟用遠端狀態 然後執行azd pipeline config。

預設情況下, azd 假設使用本地狀態檔案。 如果你在啟用遠端狀態前已經執行 azd up 過,現在需要執行 azd down 並切換到遠端狀態檔案。

本機與遠端狀態

Terraform 使用 持久狀態資料 來追蹤它管理的資源。

開啟遠端狀態的案例:

  • 允許共享狀態數據的存取權,並允許多人在該基礎結構資源集合上共同作業
  • 避免公開狀態檔案中包含的敏感性資訊
  • 為了減少因本地儲存狀態而導致意外刪除的可能性

啟用遠端狀態

  1. 務必 設定遠端狀態儲存帳號。

  2. 在資料夾provider.conf.json中新增一個名為infra的檔案。

    {
        "storage_account_name": "${RS_STORAGE_ACCOUNT}",
        "container_name": "${RS_CONTAINER_NAME}",
        "key": "azd/azdremotetest.tfstate",
        "resource_group_name": "${RS_RESOURCE_GROUP}"
    }
    
  3. 在provider.tf資料夾中更新infra,將後端設為遠端

    # Configure the Azure Provider
    terraform {
      required_version = ">= 1.1.7, < 2.0.0"
      backend "azurerm" {
      }
    
  4. 執行 azd env set <key> <value> 以在檔案中 .env 新增設定。 例如:

    azd env set RS_STORAGE_ACCOUNT your_storage_account_name
    azd env set RS_CONTAINER_NAME your_terraform_container_name
    azd env set RS_RESOURCE_GROUP your_storage_account_resource_group
    
  5. 依照你平常的工作流程執行下一個 azd 指令。 當偵測到遠端狀態時,會 azd 以已設定的後端設定初始化 Terraform。

  6. 要與隊友共享環境,請確保他們執行 azd env refresh -e <environmentName> 以刷新本地系統的環境設定,並執行步驟 4 在檔案中新增設定 .env 。

另請參閱

下一步