web-dev-qa-db-ja.com

AWS CloudFormationをTerraformテンプレートに変換する

既存のAWS CloudFormationテンプレート(yaml)をTerraformテンプレート(hcl)に自動的に変換したい。

誰もがいくつかのツール、アプローチなどを提案できますか?

9
Gleb Kosteiko

概念的な観点から見ると、CFTとTFは同等の機能ではありません。 CFTがTFで展開できるすべてのことを表現することはできません。

実用的な観点からは、どういうわけか可能ですが、文法コンバータを書く必要があります。 CFTが組み込み関数を使用している場合、それは非常に複雑になります(ほとんど不可能) https://docs.aws.Amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html

私の意見では、既存のCFTを変換するのではなく、terraform aws_cloudformation_stackを使用してデプロイする必要があります( https://www.terraform.io/docs/providers/aws/r/cloudformation_stack.html ) 。

9
Marc Hebrard

これまでのところ、YAMLまたはJSONで記述されたCFNをTerraformコードに変換する簡単な方法を見たことはありません。

ただし、CFNを介してリソースをデプロイしてから、CFNをデプロイしたアカウントに対して terraforming を使用できます。ほとんどのリソースをテラフォームコードで吸い出すことができますが、すべてではありません。コードにはリファクタリングが必要で、残りのリソース(ラムダなど)はTFで書き直すか、CFNからterraformに「変換」する必要があります。

他のオプションは、terraform aws_cloudformation_stack を使用してCFNスタックをデプロイし、そこから管理することです。

8
look3y

CloudformationをTerraformに変換するツールはありません。ただし、単にaws_cloudformation_stack

そして、とにかくそのようなツールを使いたくないかもしれません。おそらく4つのサブネットを作成するCloudformationテンプレートを想像してください。おそらく4つの個別のリソース( "PublicSubnet0"、 "PublicSubnet1"など)でコピーまたは貼り付けられたJSONまたはYAMLを使用して書き出されます。 Terraformでこれを行う可能性が高いのは、aws_subnetおよびcount = 4。使用するコンバーターは、それを処理するのに十分スマートでなければなりません。ただし、「PrivateSubnet0」がまったく異なるaws_subnet独自のcountを使用します。それはどんなソフトウェアにとっても非常に難しいことです。

そのため、Terraformスクリプトのコード品質に関心がある場合は、手動で実行してください。

1
ricksebak