Open6

Learning AWS CDK - Concept

Tatsushi KiryuTatsushi Kiryu

TypeScript の重要性
AWS CDK はさまざまな言語をサポートしています。 AWS コンストラクトライブラリも、TypeScript 版をはじめ Python や .NET (C#) などさまざまな言語で配布されています。

ただし TypeScript 版以外のコンストラクトライブラリは、TypeScript 版をもとに生成されたパッケージです。 そしてどの言語であれ、コンストラクトライブラリを利用するには Node.js が必要です。 じつは先ほどの cdk コマンドも TypeScript で実装されており、やはり Node.js が必要です。

CDK のサンプルコードも TypeScript が多いように感じます。 AWS 以外が公開しているコンストラクトも、TypeScript 版しかない場合がけっこうあります。

このように TypeScript は AWS CDK にとって最も重要な言語です。 そのため、他の言語を使いたいという方も、まずは TypeScript を使ってみることをおすすめします。 AWS CDK で使う TypeScript の機能は、クラスやインターフェースなど他の言語にもあるものなので、習得はそれほど難しくないと思います。

なるほど、TypeScriptで書くのが一番ノイズが少なそう。ありがたい。

Tatsushi KiryuTatsushi Kiryu

Construct, Stack, Appの関係性を図化。わかりやすい。

これら core.App も core.Stack も s3.Bucket も、もとをたどると同じ Construct というクラスを拡張 (extends) したクラスです。 じつは「App」も「Stack」もコンストラクトの一種なのです。

それぞれ別物と思いきや、元を辿るとすべて Constructとは。

Tatsushi KiryuTatsushi Kiryu

すると、全てはConstructで構成されることになり、これをConstruct Treeと呼ぶ、と。

コンストラクトツリーを組み立てていくプログラミングを、コンストラクトプログラミングモデル (Construct Programming Model) 略して CPM といいます。 CPM は AWS CDK に限らず、「あるべき状態 (desired state)」を定義するソフトウェア全般に適用しうるものとされています。

以上のような AWS CDK の仕組みは、AWS をこえて広まりつつあります。 AWS CloudFormation とよく比較される Terraform は、2022 年 8 月に CDK for Terraform (CDKTF) の一般提供を開始しました。 その前年 2021 年 10 月 には、コンテナ・オーケストレーションの Kubernetes も CDK for Kubernetes (CDK8s) の一般提供を開始しています。

各 CDK はコンストラクトの考え方を共有しており、高いコンポーザビリティをそなえています。 それを活かして、CDK 同士のインターオペラビリティ(相互運用性)を向上させる取り組みも進んでいます。 たとえば AWS CDK のコンストラクトを CDKTF でも使えるようにする AWS Adapter はプレビュー版が開発中です。 また CDK8s は AWS CDK の EKS コンストラクトと組み合わせて使うことができます。

AWS CDKはAWS限定の知識かと思ったけど、実は他にもレバレッジの効くスキルだと分かったので、俄然学習するモチベーションが上がった。