簡體   English   中英

為什么 Terraform 在引用遠程存儲庫中存在的模塊時將模塊下載到本地計算機?

[英]Why does Terraform download modules into your local computer while referring to the module present on remote repository?

我想知道,為什么 terraform 在 terraform init 命令期間將模塊下載到本地機器。 在我們的本地機器上下載模塊需要什么? 為什么 terraform 不能直接引用存儲庫中存在的文件?

引用遠程模塊的示例如下:

module "signalR" {
  source  = "git@github.com:fifa-x/terraform-azurerm-signalr.git?ref=v1.1.0"
}

來自文檔:“以便其他 Terraform 命令可以使用它。”

也就是說,

本地路徑的特殊之處在於它們不像其他來源那樣“已安裝”:文件已經存在於本地磁盤上(可能是安裝父模塊的結果),因此可以直接使用。 如果父模塊升級,它們的源代碼會自動更新。

希望有所幫助。

Terraform 需要下載存儲庫的內容才能使用它,否則它無法知道存儲庫中定義的內容。

但是,我認為您是在問為什么 Terraform 將其下載的內容寫入本地文件系統,而不是在操作期間僅在內存中使用它。 這種設計權衡有幾個不同的原因:

  • 安全性:遠程 Terraform 模塊是通過互聯網安裝的任意代碼,您可能最終會在訪問高價值憑據的情況下運行它。

    Terraform 在terraform init中執行所有來自遠程系統的代碼加載,而不是其他命令,因此您可以在實際執行模塊之前查看terraform init安裝的內容——手動或使用一些自動安全工具。

    terraform apply等其他命令僅適用於已緩存在本地系統上的模塊,因此一旦您檢查了安裝的內容,您就可以確信 Terraform 將准確評估該代碼。

  • 性能:通過網絡獲取代碼可能會很慢和/或很昂貴,尤其是從 Git 存儲庫中獲取代碼時,該協議要求始終至少檢索當前提交的全部內容。

    通過在terraform init期間僅下載一次遠程代碼,然后將其重新用於后續命令,Terraform 可以分攤跨多個命令下載依賴項的成本。

  • 調試:如果在運行terraform apply時出現問題,Terraform 可能會報告引用外部模塊中的源代碼的錯誤。 盡管 Terraform 確實包含了錯誤模塊部分的最小片段,但您可能需要查看該模塊源代碼的其他部分以完全了解出了什么問題。

    在本地系統上保留源代碼的副本意味着您可以更輕松地檢查模塊源代碼的其余部分,並確保您查看的是 Terraform 真正閱讀的模塊代碼。 如果 Terraform 只是在運行時將該源代碼短暫地保存在內存中,那么您需要在原始存儲庫中查找其余的源代碼,並且您可能會無意中看到錯誤的提交,因此會得到誤導性的答案模塊其余部分的行為方式。

創建遠程依賴項的本地緩存是支持直接安裝遠程庫的計算機語言的典型設計選擇,通常出於與 Terraform 類似的原因。 Terraform 的細節並不完全相同,但與其他編程語言一樣適用相同的一般原則。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM