cockscomblog?

cockscomb on hatena blog

AWS CDK は React

AWS Cloud Development Kit(以下、CDK)というものがあるが、これの提供する抽象化について考えを巡らしていたところ、唐突にこれは React だと気付いた。

CDK と React の類似性

CDK の CloudFormation Resource は、React の DOM Element に対応する。

CDK の Construct は、React の Component に対応する。

CDK でデプロイするという行為は、React における reconciliation に対応する。すなわち、CDK が内部で CloudFormation を利用して差分をとって AWS サービス変更を適用するということは、React が仮想 DOM を利用して差分をとって実際の DOM を変更することに対応している。

このような React との近似性から、CDK の提供する抽象を捉えなおすことができる。CDK の Construct は、construct-tree を構成できるが、これは React の component-tree と対応づけて考えられる。Construct をどのように切り出すかの指針としても、React Component と同じように、ドメインを整理して、再利用性やカプセル化を意図して切り出せばよいと直感的に理解できるようになる。

そもそも CDK は、なぜか JSX をサポートしようとしていた(がその後 JSX サポートに関するコードは削除された)。このことからも、CDK が React にインスパイアされて作られたものである可能性が伺える。

CDK の抽象

ここで一応 CDK の提供する抽象について説明する。AWS CDK Concepts を見ると、CDK の抽象化はおおまかに以下のようになる。

  1. App
  2. Stack
  3. Construct

ここで App は、CDK で実行可能な単位で、複数の Stack を含めることができる。StackCloudFormation が提供するデプロイの単位で、Construct を含められる。Construct には種類があり、CDKによって提供されているものは二種類ある。

  • CloudFormation Resource
  • AWS Construct Library

CloudFormation ResourceAWS のサービスについて、CloudFormation の Resource が対応づけられた Construct である。AWS Construct Library は、CloudFormation Resource を内部に複数持ったもので、典型的なユースケースのためにうまく設計されたものである。

そして CDK のユーザーである我々もまた、必要に応じて自分たちの Construct を作ることができるのだ。


以上のようなことを、社内で話していて考えた。いつもAWS CDKについて教えてくれる同じチームの id:akiymid:taketo957 にはとても感謝している。

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)