使用 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 loginazd up 會在佈建步驟因 ERROR: Please run 'az login' to setup account 而失敗。 請參閱 Authenticate to Azure 以了解推薦的登入流程。

向 Azure 驗證

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

設定 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

注意

看看這兩個以 Terraform 為 IaC 提供者的 azd 範本:Node.js 和 Terraform 以及 Python 以及 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

另請參閱

下一步