既存のAWS CloudFormationテンプレート(yaml)をTerraformテンプレート(hcl)に自動的に変換したい。
誰もがいくつかのツール、アプローチなどを提案できますか?
概念的な観点から見ると、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 ) 。
これまでのところ、YAMLまたはJSONで記述されたCFNをTerraformコードに変換する簡単な方法を見たことはありません。
ただし、CFNを介してリソースをデプロイしてから、CFNをデプロイしたアカウントに対して terraforming を使用できます。ほとんどのリソースをテラフォームコードで吸い出すことができますが、すべてではありません。コードにはリファクタリングが必要で、残りのリソース(ラムダなど)はTFで書き直すか、CFNからterraformに「変換」する必要があります。
他のオプションは、terraform aws_cloudformation_stack を使用してCFNスタックをデプロイし、そこから管理することです。
CloudformationをTerraformに変換するツールはありません。ただし、単にaws_cloudformation_stack
。
そして、とにかくそのようなツールを使いたくないかもしれません。おそらく4つのサブネットを作成するCloudformationテンプレートを想像してください。おそらく4つの個別のリソース( "PublicSubnet0"、 "PublicSubnet1"など)でコピーまたは貼り付けられたJSONまたはYAMLを使用して書き出されます。 Terraformでこれを行う可能性が高いのは、aws_subnet
およびcount = 4
。使用するコンバーターは、それを処理するのに十分スマートでなければなりません。ただし、「PrivateSubnet0」がまったく異なるaws_subnet
独自のcount
を使用します。それはどんなソフトウェアにとっても非常に難しいことです。
そのため、Terraformスクリプトのコード品質に関心がある場合は、手動で実行してください。