はじめに
普段AWS CDKとTerraformを扱っていて、どっちも一長一短な感じがしていました。CDK for Terraformなるものを見つけたので少しだけ味見してみます。
CDK for Terraformとは?
Terraform を「HCL ではなく TypeScript / Python / Go などのプログラミング言語」で書ける仕組み。
コードをコンパイルすると Terraform の JSON へ変換され、最終的に通常の Terraform と同じように terraform apply が行われます。
と生成AIが言っておりました。
前提条件
- Nodejsをインストールしておく
 - AWS CLIをインストールしてプロファイル設定しておく
 
CDK for Terraformをインストール
ターミナルで以下のコマンドを実行します。
npm install -g cdktf-cli@latest
プロジェクト作成
新しいフォルダを適当に作ってcdktf initコマンドを実行します。
mkdir hello-cdktf
cd hello-cdktf
cdktf init --template=typescript --local
いろいろ聞かれるので適当に答えます。
? Project Name hello-cdktf
? Project Description A simple getting started project for cdktf.
? Do you want to start from an existing Terraform project? (y/N) n
? Do you want to crash reports to the CDKTF team? (Y/n) n
? What providers do you want to use? >AWS
以下のようなファイルが作成されます。
/cdktf-learn/
├── .gitignore
├── README.md
├── cdktf.json            #cdktfの設定ファイル
├── help
├── jest.config.js
├── main.ts               #リソースを定義するファイル
├── package-lock.json
├── package.json
├── setupJest.js
└── tsconfig.json
AWSにS3バケットをデプロイ
AWSプロバイダをインストールする
AWSのリソースを扱うために以下のコマンドで実行してAWSプロバイダをインストールします。
npm install @cdktf/provider-aws
S3バケットを実装する
main.tsを編集して以下のように記載します。
import { Construct } from "constructs";
import { App, TerraformStack } from "cdktf";
import { AwsProvider } from "@cdktf/provider-aws/lib/provider";
import { S3Bucket } from "@cdktf/provider-aws/lib/s3-bucket";
class MyStack extends TerraformStack {
  constructor(scope: Construct, id: string) {
    super(scope, id);
    // define resources here
    new AwsProvider(this, "AWS", {
      region: "ap-northeast-1",
    });
    new S3Bucket(this, "Bucket", {
      bucket: "hellofromcdktf",
    });
  }
}
const app = new App();
new MyStack(app, "hello-cdktf");
app.synth();
デプロイ
ターミナルで以下のコマンドを実行してデプロイします。
cdktf deploy
少し待つと選択肢が出るのでApproveを選びます。
>Approve
Dismiss
Stop
Apply complete!と出たらデプロイ完了です。
AWSのマネジメントコンソールからS3が作成されていることを確認できます。
リソースの削除
cdktf destroy
> Approve
また少し待つと選択肢が出るのでApproveを選びます。
>Approve
Dismiss
Stop
AWSのマネジメントコンソールからS3が削除されていることを確認できます。
まとめ
今回はCDK for Terraformを導入して少しだけ味見してみました。
これから細かい仕様を調べてみたり、AzureやGCPのリソースを作ってみたり、もう少し使い込んでみたいと思います。