簡體   English   中英

將 AWS CloudFormation 轉換為 Terraform 模板

[英]Convert AWS CloudFormation to Terraform template

我想將現有的 AWS CloudFormation 模板 (yaml) 自動轉換為 Terraform 模板 (hcl)。

任何人都可以建議一些工具,方法等嗎?

從概念的角度來看,CFT 和 TF 並不是等價的。 您將無法表達 CFT 能夠在 TF 中部署的所有內容。

從實踐的角度來看,這是可能的,但您需要編寫一個語法轉換器; 如果您的 CFT 使用內在函數https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html ,這將變得非常復雜(幾乎不可能)

在我看來,您應該使用 terraform aws_cloudformation_stack 來部署現有的 CFT,而不是嘗試對其進行轉換 ( https://www.terraform.io/docs/providers/aws/r/cloudformation_stack.html )。

到目前為止,我還沒有看到將用 YAML 或 JSON 編寫的 CFN 轉換為 terraform 代碼的簡單方法。

但是,您可以嘗試通過 CFN 部署資源,然后對您部署 CFN 的帳戶使用terraforming 您可以提取 terraform 代碼中的大部分資源,但不是全部。 代碼需要一些重構,剩余的資源(lambdas 等)需要用 TF 重寫或從 CFN“翻譯”到 terraform。

其他選項是使用 terraform aws_cloudformation_stack為您部署 CFN 堆棧並從那里管理它。

我不熟悉用於在 Terraform <--> Cloudformation模板之間進行轉換的工具。

但是,請查看以下替代方案:

  1. 使用 Terraform 的數據源: aws_cloudformation_export ,它允許使用可選的導出屬性訪問 Cloudformation 模板的輸出部分中指定的堆棧導出。

  2. 使用cf-to-tf等 CLI 工具為現有 CloudFormation 資源生成 Terraform 配置和狀態。

沒有任何工具可以將 Cloudformation 轉換為 Terraform,除非您只是在談論通過aws_cloudformation_stack管理 Cloudformation 模板。

並且您可能無論如何都不想使用這樣的工具。 想象一個創建四個子網的 Cloudformation 模板,可能使用復制/粘貼 JSON 或 YAML 和四個單獨的資源(“PublicSubnet0”、“PublicSubnet1”等)寫出。 在 Terraform 中,您可能會使用aws_subnetcount = 4 您使用的任何轉換器都應該足夠聰明來處理這個問題。 但它也應該足夠聰明,知道“PrivateSubnet0”將是一個完全不同的aws_subnet ,它有自己的count 這是任何軟件都很難做到的。

因此,如果您關心 Terraform 腳本中的代碼質量,請手動進行。

暫無
暫無

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

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