CDK for Terraform でVPCを構築するチュートリアル
2020年 07月 23日
CDK for Terraform のチュートリアルを TypeScript で試してみました。
CDK for Terraform: Enabling Python & TypeScript Support
Terraformのインストール
Install Terraform | Terraform - HashiCorp Learn
$ brew install terraform
CDK for terraform のインストール
$ yarn global add cdktf-cli
AWSでVPCを構築するチュートリアル
プロジェクトの作成
Terraform Cloud でリモートステートを管理するか聞かれるので "no" とする。
$ mkdir vpc-example $ cd vpc-example $ cdktf init --template=typescript ... Do you want to continue with Terraform Cloud remote state management (yes/no)? no Project Name: (default: 'vpc-example') Project Description: (default: 'A simple getting started project for cdktf.')
実装
TerraformのHCLと比較すると、型のおかげで必須オプションの漏れなどが、リアルタイムで分かるのは良いですね。
import { Construct } from 'constructs'; import { App, TerraformStack, Token } from 'cdktf'; import { Vpc } from './.gen/providers/aws/vpc'; import { Subnet } from './.gen/providers/aws/subnet'; import { AwsProvider } from './.gen/providers/aws' class MyStack extends TerraformStack { constructor(scope: Construct, name: string) { super(scope, name); new AwsProvider(this, 'aws', { region: 'ap-northeast-1' }); const vpc = new Vpc(this, 'my-vpc', { cidrBlock: '10.0.0.0/16' }); new Subnet(this, 'my-subnet', { vpcId: Token.asString(vpc.id), cidrBlock: '10.0.0.0/24' }); } } const app = new App(); new MyStack(app, 'vpc-example'); app.synth();
TerraformのJSONファイルを生成
TypeScriptのコードからTerraformのJSON形式の設定ファイルをに生成します。ファイルはcdk.tf
ディレクトリに出力されます。
$ cdktf synth Generated Terraform code in the output directory: cdktf.out $ tree cdktf.out cdktf.out └── cdk.tf.json
Terraformを実行
生成された設定ファイルを元に terraform を実行することで、AWSにVPCを構築できます。
設定がまだの場合は事前に aws configure
で設定を完了させておく必要があります。
AWSコンソールのVPCを確認すれば、新しくリソースが作成されている事が確認できます。
$ cd cdktf.out $ terraform init $ terraform plan ... # 追加されるVPCの情報が表示される $ terraform apply aws_vpc.vpcexample_myvpc_80A1790F: Creating... aws_vpc.vpcexample_myvpc_80A1790F: Still creating... [10s elapsed] aws_vpc.vpcexample_myvpc_80A1790F: Creation complete after 10s [id=vpc-09aeca6257ae5fe31] aws_subnet.vpcexample_mysubnet_3769B309: Creating... aws_subnet.vpcexample_mysubnet_3769B309: Creation complete after 3s [id=subnet-0264b990708ed4f69] Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
リソースの削除
最後に今回のチュートリアルで作成したVPCを削除しておきます。
$ terraform destroy