附註:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱開始使用 Oracle Cloud Infrastructure Free Tier 。
- 它使用 Oracle Cloud Infrastructure 憑證、租用戶及區間的範例值。完成實驗室時,請將這些值取代為您雲端環境特有的值。
使用 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
。每個測試檔案都由根層次屬性與區塊組成,如下所示:
- 一或多個
run
區塊。 - 一或零
variables
區塊。 - 零至許多
provider
區塊。
Terraform 會循序執行 run
個區塊,模擬在組態目錄中執行的一系列 Terraform 命令。variables
和 provider
區塊的排列順序無關緊要,因為 Terraform 會在測試程序開始時評估這些區塊內的所有值。為了明確起見,建議您將 variables
和 provider
區塊放在測試檔案的開頭。
目標
- 示範如何驗證 Terraform 模組,並使用持續整合 / 持續部署 (CI/CD) 管線將流程自動化。
必要條件
- 安裝並設定 Terraform v1.6.0 及更新版本。如需詳細資訊,請參閱 Install Terraform 。
作業 1:寫入 Terraform 測試以驗證資源建立
-
我們已涵蓋 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 }
-
使用必要的變數建立
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"}
-
將 OCI Terraform 提供者設定為資源主要項目授權,讓提供者無須在提供者定義內提供證明資料,即可進行 API 呼叫。若要設定 OCI 提供者的資源主要項目授權,請參閱資源主要項目授權。
-
在
tests
目錄中建立 Terraform 測試檔案。以下為目錄結構的範例:├── main.tf └── tests └── test.tftest.hcl
-
更新
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" } }
注意:如果儲存桶的儲存層不是標準儲存層,測試將會失敗。
-
將上述 terraform 檔案植入 OCI 程式碼儲存區域。我們會將此程式碼儲存區域與 CI/CD 管線搭配使用。
作業 2:建置用於驗證 Terraform 組態的 OCI DevOps 組建管線
在 build_spec.yaml
檔案中,會使用 terraform init
和 terraform 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 驗證管線會從先前階段提取使用者自建物件,並在實行變更之前測試組態。
相關連結
認可
- 作者 - Nikhil Khandelwal (企業雲端架構師)
其他學習資源
瀏覽 docs.oracle.com/learn 的其他實驗室,或前往 Oracle Learning YouTube 頻道存取更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
Build a Terraform Validation Pipeline using Terraform Test Framework and Oracle Cloud Infrastructure DevOps
F99879-01
June 2024