猫でもわかるWeb開発・プログラミング

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

AWS CDK と CDK for Terraform 比較 実際のプロダクトで使ってみた

はじめに

AWS CDK と CDK for Terraform、どっちを使うか非常に迷います。

私も気になっていたので、実際に仕事で使ってみて、比較しました。

これは 2023年7月時点での比較です。開発速度や、開発方針によって、評価が変わってくる可能性があります

AWS とそれ以外(Google Cloud 等)を混ぜて使う場合は?

最初にこのポイントについて把握しておいたほうがいいです。

そもそもAWSを使わない場合(Google Cloud をメインに使っている場合など)、AWS CDK は選択肢に入らないので、CDK for Terraform を選択するしかありません。

では、 AWS と Google Cloud を混ぜて使っている場合はどうなのか。この場合は、

  • CDK for Terraform 1つに絞ってもいいし、
  • AWS CDK と CDK for Terraform を混ぜてもいい

と思います。

CDK for Terraform (以下 CDKTF)を使ったほうがラクと思う人もいるかもしれませんが、結局 CDKTF の中では、AWS と Google Cloud を分けて管理することになります。

技術スタックが統一できて、環境構築も1回で済むし、管理がラクになるメリットは大きいですが、 「CDKTF + AWS CDK の混成」という選択肢も試す価値アリだと思います。

AWS CDK には便利なライブラリがついている

以下のページが参考になりますが、AWS CDK は基本的に L2 というので記述していくことになります。

qiita.com

あるいは、一部標準的な構成が L3 として用意されていて、それを使うこともあります。

僕が特にお世話になったのは、VPC と、 ECS 周りです。

この記述量が減ることが AWS CDK を使うことの一番のメリットです。

ただし、内部で何が作られているのかはしっかり把握する必要があります。使わないリソースが作成されて無駄に課金されたり、意図にそぐわないリソース構成になっていたりなど。

ある程度のカスタマイズはできるようになっていますが、会社独自のルールで特殊な構成を使いたい、オンプレミスの環境をそのまま再現したい、とにかくお金を節約したい、といった特殊な状況では、 AWS CDK のメリットが受けられない場合もあります。メリットが受けられないだけで、AWS CDK が使えないわけではないので、 AWS CDK を採用するデメリットはとくにないですが。

AWS CDK 実行時の IAM 管理が複雑

Tarraform は Terraform の実行者がリソースを作成するのに対して、AWS CDK は、変更内容が AWS CloudFormation に送られ、 CloudFormation がリソースを作成します。

これにより、AWS CDK では IAM 管理が複雑になります。

AWS CDK 実行ユーザーが AWS の管理者なのであれば、必要に応じて権限を追加すればいいのですが、IAM が厳重に管理されている組織もあるとと思うので、利用を検討する際には、一回 AWS CDK を実行してみるといいと思います。

どっちのほうがデプロイが速い?

私が使った感想では、どっちもそんなに速くはないです。

CDKTF については、スタックが大きくなると、synthesize(TypeScript → terraform への変換)が遅くなるという話を聞いたことがありますが、TypeScript のコンパイルが遅いのであれば、AWS CDK でも同様に遅いはずで、

私の使っている限り、CDKTF の synthesize が格段に遅いということはなかったのですが、AWS CDK については、それなりのスタックサイズにするとそれなりに遅いので、

速さについてはそこまで気にすることではなさそう、というのが私の感想です。これは規模によりけりですし、計測が難しいところではあるので、あくまでも感想になってしまいますが、、、

AWS CDK のほうが AWS 謹製だからいいのでは?

私もそう思っている時期がありました。

AWS CloudFormation という AWS 上に乗っている機能を使っているので、なにか優れた点があるはずだ。例えば、 AWSコンソール上から CloudFormation スタックの詳細を見られるとか!

実際は、得にメリットを受けたことはないので、気にする必要はなさそうです。むしろ Terraform のほうが AWS の新機能への対応は早い印象ですし。。。

ドキュメントの充実さ

公式のドキュメントはどちらも充実していますので、利用するのに困ることはなさそうです。

AWS CDK と CDK for Terraform の利用者数の比較ですが、 AWS CDK のほうが先に出ていたたこともあり、AWS CDK のほうが多そうです。

ただし、CDK for Terraform は、中身が Terraform のため、 Terraform の知見がそのまま使えることが多いです。

AWS CDK も中身は CloudFormation なのですが、AWS CDK と CloudFormation とは別物といっても良いレベルなので、あまり参考になりません。

ということで、ネット上の記事などは Terraform のほうが充実しています。 AWS CDK はまだ情報が少ない印象です。

まとめ

以上、私が AWS CDK と CDKTF を両方使って思ったことでした。

  • AWS を使う場合は AWS CDK が第一選択肢
  • AWS CDK と CDK for Terraform の混成にするのもアリ
  • とりあえず両方使ってみて、使い心地のいい方を選択する
  • AWS 謹製だから良いというわけでもない
  • 個人的には CDK for Terraform が好き

以下、有料の内容はございませんが、参考になった人でもしよろしければ課金してもらえるとありがたいです。

この続きはcodocで購入