JS.tfをHCLを書かずに使う
created at
updated at
最近こんな記事を見かけました。
人類は HCL (Hashicorp Configuration Language) で JavaScript を記述するべきなので、次世代のモダン AltJS である「JS.tf」をリリースしました。
いや冷静に考えてHCLって書きづらくないですか、しかもresourceやdata sourceを参照するのもなんか分かりづらいし…
しかしTerraformにはHCLを書かなくてもいい最強のテクノロジーがあります。
それこそが、CDK for Terraformです。
いわゆるAWS CDKのTerraform版ですね
cdktf repositories · GitHub にあるとおり、多数のプロバイダーの定義が用意されていて、ここにない物もprovider addコマンドでコード生成することができます。
実際に使っている例は GitHub - rokoucha/alicization: Synthesis Ritual をご参照ください。
では実際に書いていきましょう、ということで完成品は GitHub - rokoucha/cdktfjs: Time to write HCL is a waste of time in life, so let's use CDK for Terraform. です。
基本的には
DataJs~~~ をどんどんnewしていきます。ただし、JS.tfのバグで一部の型が壊れているので回避が必要です。
認識している範囲では
DataJsConstのvalueが[key: string]: anyしか受け付けない
as anyしましょう
_tsconst message = new DataJsConst(this, 'message', { name: 'message', value: 'Hello, world!' as any, })
DataJsFunctionCallの型が壊れていてsynthした結果が壊れている
addOverrideしましょう
_tsconst helloWorld = new DataJsFunctionCall(this, 'hello-world', { caller: 'console', function: 'log', args: [], }) helloWorld.addOverride('args', [message.id])
があります。ユニオン型が軒並みおかしいので他にもありそう…
書き追わったら
cdktf diff をするとHCLが生成されてplanが走ります。問題なさそうであれば
cdktf deploy で反映しましょう!コードは
cdktf.out/stacks/<スタック名>/main.js に生成されますあとはこのJSファイルを実行すれば…
無事にHCLを書かずにJavaScriptを書けました!
あれ…さっきまでTypeScriptを書いていたような…

