こんにちは。 エキサイト株式会社の三浦です。
インフラ周りをコードとして管理する、つまり IaC (Infrastructure as Code) を実現するためのツールはいくつも存在します。
その中でも、特にAWSに対してIaCで開発していく場合に着目されるであろう以下のツールについて、この度触る機会があったので比較してみます。
- AWS CDK
- CDK for Terraform
AWS CDK
AWS CDKは、AWSが公式に提供しているAWS用のIaCツールです。
TypeScriptやJavaなど、いくつかの言語から好きなものを選んで使用することができます。
好きな言語で開発したコードは、AWS CDKツールによってAWS CloudFormation(以降CloudFormation)の形式に変換され、CloudFormationとしてAWS側にデプロイされることになります。
CloudFormationもまたAWSが公式で提供してるIaCツールであり、YAMLやJSON形式でインフラ周りをコード化して管理するサービスです。
AWS CDKは、これを好きな言語で開発できるようにした、いわばラッパーと言えます。
メリット
- 選択肢の中から、好きな言語を選んで開発することができる
- AWSが公式に提供してくれているため、安心感がある
- 実質CloudFormationのラッパーであるため、CloudFormationの知見があればそれを有効活用することができる
デメリット
- 実質CloudFormationのラッパーであるため、AWS CDKだけでなく、ある程度CloudFormationの知識も必要になる
CDK for Terraform
CDK for Terraformは、HashiCorp社が提供しているマルチクラウド用のIaCツールです。
Cloud Development Kit for Terraform (CDKTF) allows you to use familiar programming languages to define and provision infrastructure.
AWS CDKのように、いくつかの言語から好きなものを選んで開発し、開発したコードをTerraformの設定ファイルに変換して使用します。
TerraformもまたHashiCorp社が提供しているマルチクラウド用のIaCツールであり、独自言語であるHCLというものを使用します。
CDK for Terraformは、HCLの代わりに好きな言語で開発できるようにした、いわばラッパーです。
AWS CDKと流れが似ていますが、これは当然で、公式の説明から引用すると「AWS CDKのコンセプトやツールを利用してコードをTerraform設定ファイルに変換」しています。
CDK for Terraform leverages concepts and libraries from the AWS Cloud Development Kit to translate your code into infrastructure configuration files for Terraform.
メリット
- 選択肢の中から、好きな言語を選んで開発することができる
- CloudFormationに比べると、直接AWSのAPIを使用しているためデプロイ速度が早い
- マルチクラウド対応しているため、AWS以外のクラウドにも使用できる
- 実質Terraformのラッパーであるため、Terraformの知見があればそれを有効活用することができる
デメリット
- 実質Terraformのラッパーであるため、CDK for Terraformだけでなく、ある程度Terraformの知識も必要になる
- 現在はまだ
ver 1.0
リリースをしておらず、それまでは破壊的変更が起きる可能性があるCDKTF may still have breaking changes before our 1.0 release.
どちらを選ぶべきか
それぞれメリデメはありますが、個人的に注目すべき点は以下だと思っています。
- 両者とも、ラッパー元(CloudFormationやTerraform)の知見が必要になる
- CDK for Terraformは、まだ破壊的変更が起きる可能性がある
両者とも、ラッパー元の知見が必要になる
AWS CDKにしてもCDK for Terraformにしても、それぞれのツールを使うには各CDKについて学ぶ必要があります。
それに加えてラッパー元であるCloudFormationやTerraformについても学習しないといけないとなると、それなりの学習コストとなるでしょう。
そのため、もしCloudFormationかTerraformのどちらかを使ったことがあるのであれば、使ったことがある方のCDKを選ぶ方が、学習コストがより少なくて済むはずです。
CDK for Terraformは、まだ破壊的変更が起きる可能性がある
CDK for Terraformはまだ ver 1.0
がリリースされておらず、破壊的変更が起きる可能性があります。
IaCに破壊的変更があった場合、単に「変更前と同じ動作をすること」が保証されればいいわけではなく、「変更後に実行しても、既存のインフラが変更されない(変更後のコードで、既存インフラが管理されている状態になっている)」ことも保証される必要があり、バージョンアップは非常に繊細な作業になります。
CDK for Terraformは、どうしても選びたい理由がないのであれば、少なくとも ver 1.0
がリリースされるまでは一旦様子見していたほうがいいかもしれません。
最後に
今回は、AWS CDKとCDK for Terraformを比べました。
もし現在迷っている方がいたら、是非参考にしてもらえればと思います。
ただし、そもそも管理したいインフラが大きくないのであれば、各CDKではなくラッパー元であるCloudFormationやTerraformでも十分な可能性もあります。
各CDKはあくまでラッパー元を使いやすくしたものであるため、「管理したいインフラが小さい = 使いやすくしても扱いやすさに大差がない」のであれば、CDKを使っても単にCDKの学習コスト分が増えてしまうだけになるかもしれません。
管理したいインフラや個々人・チームの知見をもとに、適切なツールを選択していきましょう。