Hashicorpは先頃、CDK for Terraformのバージョン0.4をリリースした。今回のリリースには、TerraformコンフィギュレーションをGoを使って記述する試験的サポートが加えられている。Terraformモジュールとアセット構築のサポートも強化された。
CDKは、TerraformコンフィギュレーションをC#、Python、TypeScript、Javaなど、さまざまなプログラミング言語で記述可能にするもので、既存のTerraformプロバイダとモジュールをすべてサポートする。
最新のリリースでは、その基盤として言語バインディングの生成に使用されているjsiiライブラリに、Goの試験的サポートが追加された。これによってHashicorpチームは、CDKを拡張して、Goのサポートを導入することが可能になったのだ。例えばAWS EC2インスタンスは、GoのCDKを使って次のように宣言することができる。
func CreateStack(scope constructs.Construct, id string) cdktf.TerraformStack {
stack := cdktf.NewTerraformStack(scope, &id)
aws.NewAwsProvider(stack, jsii.String("aws"), &aws.AwsProviderConfig{
Region: jsii.String("us-east-1"),
})
aws.NewInstance(stack, jsii.String("Hello"), &aws.InstanceConfig{
Ami: jsii.String("ami-2757f631"),
InstanceType: jsii.String("t2.micro"),
Tags: &map[string]*string{
"environment": jsii.String("development"),
},
})
return stack
}
cdktf synth
を実行すると、次のような出力が生成される。
{
"terraform": {
"required_providers": {
"aws": {
"version": "~> 3.40.0",
"source": "hashicorp/aws"
}
}
},
"provider": {
"aws": [
{
"region": "us-east-1"
}
]
},
"resource": {
"aws_instance": {
"Hello": {
"ami": "ami-2757f631",
"instance_type": "t2.micro",
"tags": {
"environment": "development"
}
}
}
}
}
生成されたTerraformは、通常のterraform
コマンドを使って、あるいはcdktrf deploy
によってCDK経由で、デプロイすることが可能である。ただし、Goのサポートは試験レベルであり、運用中のワークロードに使用するべきではない、とチームは注意を促している。また、現在のAWSプロバイダは、処理の実行におよそ6GBのメモリが必要である。
新しいアセット
コンストラクトでは、プロビジョニングされたリソースと合わせてデプロイする必要のあるファイルやフォルダ参照が簡略化されている。推奨されるユースケースは、静的ローカルファイルのデプロイや、生成されたzipファイルをLambda関数用にコピーする場合などだ。このTypeScriptの例では、Lambda関数のコードパッケージが配置されたディレクトリを参照するアセット
が生成される。
const asset = new TerraformAsset(this, "lambda-asset", {
path: path.resolve(__dirname, "../lambda"),
type: AssetType.ARCHIVE,
});
ビルド済(pre-build)プロバイダがPsPI、NPM、Nuget、Maven Centralなど、言語ネイティブなリポジトリにパブリッシュされるようになった。対応可能なプロバイダの全リストは、GitHubリポジトリで確認できる。terraformリポジトリにホストされているプロバイダやモジュールにcdktf.json
を追加することで、cdktf get
を実行すればプロジェクトに直接インポートできるようになった。他のモジュールにはTerraformHclModule
が使用可能だが、入力と出力はタイプセーフではない。
リリースの内容に関するより詳しい情報はchangelogに記載されている。Hashicorpではcommunity office hoursとディスカッションフォーラムを設けて、質問を受け付けている。始めてCDKを使うユーザには、CDK for Terraform Learn Guideがお勧めだ。