附註:

使用 Terraform 測試架構和 Oracle Cloud Infrastructure DevOps 建置 Terraform 驗證管線

簡介

組織經常使用 Terraform 模組來管理複雜的資源佈建,並提供直接的介面,讓開發人員輸入必要的參數來部署所需的基礎架構。模組可協助程式碼重複使用,並為組織提供標準化一般工作負載部署的方法,例如三層 Web 應用程式、雲端網路環境或資料分析管線。開發 Terraform 模組時,作者通常從手動測試開始。這包括使用像 terraform validate for syntax validation for syntax validation、terraform plan to preview the execution plan 和 terraform apply 等命令,然後手動檢查 Oracle Cloud Infrastructure (OCI) 主控台中的資源組態。不過,手動測試很容易人為錯誤,無法擴展,而且可能會導致非預期的問題。由於模組是由組織內的多個團隊使用,因此在發行前徹底測試任何變更至關重要。

Terraform 測試是一個新的測試架構,專為模組作者設計,可針對 Terraform 模組進行單元和整合測試。它允許建立模組中定義的基礎架構、對基礎架構執行驗證檢查,以及銷毀測試資源,無論測試是否通過或失敗。此外,如果無法毀棄任何資源,Terraform 測試也會提供警告。使用與 Terraform 模組相同的 HashiCorp 組態語言 (HCL) 語法,可將作者學習其他工具或程式設計語言的需求降到最低。

每個 Terraform 測試都在一個測試檔案中。Terraform 會根據其副檔名尋找測試檔案:.tftest.hcl.tftest.json。每個測試檔案都由根層次屬性與區塊組成,如下所示:

Terraform 會循序執行 run 個區塊,模擬在組態目錄中執行的一系列 Terraform 命令。variablesprovider 區塊的排列順序無關緊要,因為 Terraform 會在測試程序開始時評估這些區塊內的所有值。為了明確起見,建議您將 variablesprovider 區塊放在測試檔案的開頭。

目標

必要條件

作業 1:寫入 Terraform 測試以驗證資源建立

  1. 我們已涵蓋 Terraform 測試檔的基礎結構,讓我們撰寫一些基本測試來驗證下列 Terraform 組態的功能。下列 Terraform 組態將會建立標準層的 OCI 物件儲存的儲存桶。

    #main.tf
    
    resource "oci_objectstorage_bucket" "test_bucket" {
    
        compartment_id = var.compartment_id
        name = var.bucket_name
        namespace = var.bucket_namespace
        storage_tier = var.bucket_storage_tier
        versioning = var.bucket_versioning
    }
    
  2. 使用必要的變數建立 var.tf 檔案。

    variable compartment_id { default = "<compartment-ocid>" }
    variable region { default = "<region>" }
    variable bucket_name { default = "<bucket-name>"}
    variable bucket_namespace { default = "<object-storage-namespace>"}
    variable bucket_access_type { default = "ObjectRead"}
    variable bucket_storage_tier { default = "Standard"}
    variable bucket_versioning {default = "Enabled"}
    
  3. 將 OCI Terraform 提供者設定為資源主要項目授權,讓提供者無須在提供者定義內提供證明資料,即可進行 API 呼叫。若要設定 OCI 提供者的資源主要項目授權,請參閱資源主要項目授權

  4. tests 目錄中建立 Terraform 測試檔案。以下為目錄結構的範例:

    ├── main.tf 
    └── tests 
    └── test.tftest.hcl
    
  5. 更新 test.tftest.hcl 檔案,檢查建立之儲存桶的層是否為標準

    # test.tftest.hcl
    
    run "valid_bucket_tier" {
    
      command = plan
    
      assert {
        condition     = oci_objectstorage_bucket.test_bucket.storage_tier == "Standard"
        error_message = "bucket tier is not standard"
      }
    
    }
    

    注意:如果儲存桶的儲存層不是標準儲存層,測試將會失敗。

  6. 將上述 terraform 檔案植入 OCI 程式碼儲存區域。我們會將此程式碼儲存區域與 CI/CD 管線搭配使用。

作業 2:建置用於驗證 Terraform 組態的 OCI DevOps 組建管線

build_spec.yaml 檔案中,會使用 terraform initterraform validate 指令來初始化 Terraform,並確認組態有效。然後,terraform test 命令會執行設定的測試。如果有任何地形測試失敗,管線也會失敗。

version: 0.1
component: build
timeoutInSeconds: 10000
shell: bash      
failImmediatelyOnError: true

steps:
  - type: Command
    name: "Initialize Terraform"
    command: |
      terraform init
      terraform validate
  - type: Command
    name: "Test Terraform"
    command: |
      terraform test 

接下來的步驟

我們已在 Terraform 組態中執行簡單的宣告測試。您可以執行不同類型的測試,例如整合測試、單元測試、端對端測試等等。如需詳細資訊,請參閱 Terraform 測試

此 Terraform 驗證管線可與應用程式 CI/CD 管線整合。Terraform 驗證管線會從先前階段提取使用者自建物件,並在實行變更之前測試組態。

認可

其他學習資源

瀏覽 docs.oracle.com/learn 的其他實驗室,或前往 Oracle Learning YouTube 頻道存取更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。

如需產品文件,請造訪 Oracle Help Center