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
しましょう
_
ts
const message = new DataJsConst(this, 'message', { name: 'message', value: 'Hello, world!' as any, })
DataJsFunctionCall
の型が壊れていてsynthした結果が壊れている
addOverride
しましょう
_
ts
const 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を書いていたような…