BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Cloud Development KitでTypeScriptやPythonを使ったTerraformコンフィギュレーション生成が可能に

Cloud Development KitでTypeScriptやPythonを使ったTerraformコンフィギュレーション生成が可能に

原文(投稿日:2020/07/24)へのリンク

AWS、HashiCorp、Terrastackの3社は共同で、Cloud Developmemt Kit (CDK) for Terraform、別名cdktfのプレビュー版をリリースした。インフラストラクチャ・アズ・コードの管理に、PythonやTypeScriptといったプログラミング言語を使用することができる。cdktfでJSONのTerraformコンフィギュレーションを生成して、"terraform apply"コマンドでリソースをデプロイすることが可能になる。さらに、Terraformレジストリにある既存のモジュールやプロバイダもサポートしており、AWSやAzure、Google Cloudにリソースをデプロイすることも可能だ。

CDKは、TypeScript、Java、Pythonなどのプログラミング言語を使って、PulumiTerrastackといったツールと同じようなインフラストラクチャの定義とプロビジョンを行う、オープンソースのフレームワークである。今回リリースされた初期バージョンは、TypeScriptとPythonのみをサポートするが、Java、JavaScript、C#といった他の言語も今後追加される予定である。AWS CDKが、インフラストラクチャをデプロイするためのCloudFormationコンフィギュレーションを生成するのに対して、CDK for Terraform (cdktf) が生成するのは、HashiCorp Configuration Language (HCL) で記述された従来のテンプレートではなく、JSONのTerraformコンフィギュレーションである。これにより、"terraform plan"や"terraform apply"といったコマンドを、cdktfのJSONコンフィギュレーション出力を使って引き続き使用することが可能になる。

さらに、Terraform Registryで公開されている既存のプロバイダやモジュールを使用することもできる。例えばcdkrfを使ってAWSだけでなく、AzureやGoogle Cloudといった他のクラウドプロバイダにも、インフラストラクチャリソースをデプロイすることが可能だ。DockerコンテナHashiCorp Vaultとの併用も可能である。

Terrastackはcdktfと多くの共通点があるので、そのメンテナであるSebastian Korfmann氏が新たにcdktfのメンテナになり、Terrastackはアーカイブされることになった。AWS CDKチームもまた、CDKコンストラクトプログラミングモデルのためのプラクティスとパターンの推奨や、AWS CDKツールのコアであるjsiiライブラリを提供することで、このプロジェクトに貢献しているAWSのChris Fife<氏とHashiCorpのAnubhav Mishra<氏がリリース記事で、これらのコンポーネントの目的について説明している。

CDKコンストラクトプログラミングモデルは、基盤となるプロビジョニングエンジンのコンフィギュレーションファイルを生成するための、インフラストラクチャリソースとアダプタを定義する、言語ネイティブなフレームワークのセットです。jsiiを使うことで、すべてのサポート対象言語のコードから、JavaScriptクラスに自然なインタラクションを行うことが可能になり、単一のコードベースから複数のプログラミング言語のライブラリを提供することができます。これらのコンポーネントを使用して、AWS CDKは、TypeScriptやJavaScript、Python、Java、C#で記述されたコードから、CloudFormationコンフィギュレーションを生成します。

リリース発表には、cdktfフレームワークでTypeScriptを使って、AWSのEC2インスタンスをプロビジョンする方法を示すサンプルコードが含まれていた。

import { Construct } from 'constructs';
import { App, TerraformStack } from 'cdktf';
import { AwsProvider } from './.gen/providers/aws';
import { Instance } from './.gen/providers/aws/instance';
 
class HelloTerraform extends TerraformStack {
 constructor(scope: Construct, name: string) {
   super(scope, name);
 
   new AwsProvider(this, 'aws', {
     region: 'us-east-1'
   });
 
   new Instance(this, 'Hello', {
     ami: "ami-2757f631",
     instanceType: "t2.micro"
   });
 }
}
 
const app = new App();
new HelloTerraform(app, 'hello-terraform');
app.synth();

cdktfを使用するには、cdktf CLIをインストールしてプロジェクトの初期化を行った上で、Terraformコンフィギュレーションファイルを生成する必要がある。次に、選択するプログラミング言語に合ったフレームワークライブラリをダウンロードする。その上で、"cdktf init --template=typescript"コマンドを実行すれば、アプリケーションのブートストラップ、依存関係のダウンロード、プロジェクトを保存する場所の確認などが行われる。以下に示すのは、cdktfプロジェクトのディレクトリおよびファイル構造の一例である。

$ tree
├── .gen
│   └── providers
│       └── aws
│        ├── accessanalyzer-analyzer.ts
│        ├── # omitted for clarity
│        └── xray-sampling-rule.ts
│   └── modules
├── .terraform
├── cdktf.json
├── help
├── main.d.ts
├── main.js
├── main.ts
├── package.json
└── tsconfig.json

インフラストラクチャの定義が完了したならば、"cdktf synth"コマンドを実行してTerraformコンフィギュレーションを生成する必要がある。ここまで実行すれば、依存関係をダウンロードし、プランによって変更を評価した上で、インフラストラクチャをクラウドにデプロイするという、従来のTerraformワークフローを使用することができるようになる。"cdktf deploy"コマンドを使って、これと同じワークフローを行うことも可能だ。インフラストラクチャコード内では、Chefなど他のプロバイダもサポートされている。

"CDK for Terraform: Enabling Python & TypeScript Support" リリース記事より

さらにHashiCorpは、Dockerを使ったNGINXサーバのプロビジョンTypeScriptを使用したAWS EC2インスタンスのデプロイにcdktfを使用するユーザのためのステップ・バイ・ステップのガイド、AzureGoogle Cloudなどのプロバイダのための他のサンプルもリリースしている。cdktfは実験的なプロジェクトで、コミュニティからのフィードバックの提供や、GitHubでのプルリクエスト生成によるコントリビューションが可能である.。

この記事に星をつける

おすすめ度
スタイル

BT