Closed9
Python+AWSでCDK for Terraform(CDKTF)のチュートリアルをやってみる
Typescript、Python、Java、C#、Goでインフラを書けるみたい
環境
機種 : 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は
に記載のbrew install cdktf
でインストール可能。tfenvを使っていたからかエラーになったが、brew unlink
したりでインストールできた。
Quick start tutorial
以降をpythonでやってみる
記載の
$ cdktf init --template=python --local
を打ったときにUnable to find "pipenv". Follow the instructions from https://pipenv.pypa.io
となったので、pipenvも必要のようだ。下記でインストール
$ pip install pipenv
terraformでdockerを定義できたのね(初耳)
$ cdktf init --template=python --local
をしたときにmain-test.pyというファイルも作成されているので、テストも書けるのかもしれない。
まで難なく完了。
Build AWS Infrastructure with CDK for Terraform
お次は
をやってみる。
理解が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のバージョンで書き方が変わったようだ。
見様見真似で、以下みたいに書き換えてみる。
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",
+ )
再度やってみると、成功!
所感
まだ発展途上かなといった感じで、成熟するのにもう少しかかりそう。個人的にはHCLの書き方にそこそこ慣れているので、無理にcdktfを使う必要はないが、pythonとかtypescriptでインフラを書けるのは非常に魅力的ではある。
このスクラップは2022/12/04にクローズされました