AWS CDK / CDK for Terraform についての所見

こんにちは。 エキサイト株式会社の三浦です。

インフラ周りをコードとして管理する、つまり IaC (Infrastructure as Code) を実現するためのツールはいくつも存在します。

その中でも、特にAWSに対してIaCで開発していく場合に着目されるであろう以下のツールについて、この度触る機会があったので比較してみます。

  • AWS CDK
  • CDK for Terraform

AWS CDK

AWS CDKは、AWSが公式に提供しているAWS用のIaCツールです。

aws.amazon.com

TypeScriptやJavaなど、いくつかの言語から好きなものを選んで使用することができます。

好きな言語で開発したコードは、AWS CDKツールによってAWS CloudFormation(以降CloudFormation)の形式に変換され、CloudFormationとしてAWS側にデプロイされることになります。

CloudFormationもまたAWSが公式で提供してるIaCツールであり、YAMLJSON形式でインフラ周りをコード化して管理するサービスです。

AWS CDKは、これを好きな言語で開発できるようにした、いわばラッパーと言えます。

メリット

  • 選択肢の中から、好きな言語を選んで開発することができる
  • AWSが公式に提供してくれているため、安心感がある
  • 実質CloudFormationのラッパーであるため、CloudFormationの知見があればそれを有効活用することができる

デメリット

  • 実質CloudFormationのラッパーであるため、AWS CDKだけでなく、ある程度CloudFormationの知識も必要になる

CDK for Terraform

CDK for Terraformは、HashiCorp社が提供しているマルチクラウド用のIaCツールです。

developer.hashicorp.com

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.

developer.hashicorp.com

メリット

  • 選択肢の中から、好きな言語を選んで開発することができる
  • CloudFormationに比べると、直接AWSAPIを使用しているためデプロイ速度が早い
  • マルチクラウド対応しているため、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の学習コスト分が増えてしまうだけになるかもしれません。

管理したいインフラや個々人・チームの知見をもとに、適切なツールを選択していきましょう。