Closed9

Python+AWSでCDK for Terraform(CDKTF)のチュートリアルをやってみる

lightkunlightkun

環境

機種 : MacBook Pro 2021(M1 Max)
キーボード : USキーボード
OS : Monterey(12.2.1)
terraform version : v1.3.5
Node.js version : v18.7.0
Python version : 3.9.15

Docker : 20.10.16
cdktf versin : 0.14.1

cdktfは
https://developer.hashicorp.com/terraform/tutorials/cdktf/cdktf-install
に記載の

brew install cdktf

でインストール可能。tfenvを使っていたからかエラーになったが、brew unlinkしたりでインストールできた。

lightkunlightkun
$ cdktf init --template=python --local

をしたときにmain-test.pyというファイルも作成されているので、テストも書けるのかもしれない。

lightkunlightkun

理解が100%ではないが、--localをつけてローカルに保存。ローカル以外だと、main.pyのRemoteBackend のところで指定するTerraform Cloudに保存しているのではないかと思われる。Terraform Cloudの設定をするのが面倒なので一旦はローカルでやっちゃう。

$ cdktf init --template="python" --local

main.pyにはRemoteBackend()の部分は書かないで、それ以外をコピぺ。

cdktf deployしようとするとエラーが発生。

ImportError: cannot import name 'AwsProvider' from 'cdktf_cdktf_provider_aws'

ググっていくとどうもcdktfのバージョンで書き方が変わったようだ。

https://developer.hashicorp.com/terraform/cdktf/release/upgrade-guide-v0-13#python-1

https://www.hashicorp.com/blog/cdk-for-terraform-0-13-significantly-improves-performance

見様見真似で、以下みたいに書き換えてみる。

main.py
-from cdktf_cdktf_provider_aws import AwsProvider, ec2
+from cdktf_cdktf_provider_aws.provider import AwsProvider
+from cdktf_cdktf_provider_aws.instance import Instance
...
main.py
-        instance = ec2.Instance(self, "compute",
-                                ami="ami-01456a894f71116f2",
-                                instance_type="t2.micro",
-                                )
+        instance = Instance(self, "compute",
+                                ami="ami-01456a894f71116f2",
+                                instance_type="t2.micro",
+                                )

再度やってみると、成功!

lightkunlightkun

所感

まだ発展途上かなといった感じで、成熟するのにもう少しかかりそう。個人的にはHCLの書き方にそこそこ慣れているので、無理にcdktfを使う必要はないが、pythonとかtypescriptでインフラを書けるのは非常に魅力的ではある。

このスクラップは2022/12/04にクローズされました