AWS CDKの便利ライブラリが共有/検索できるConstructHubがGAしました!

AWS CDKのコンストラクトライブラリが共有/検索できるConstructHubがGAされました!実際に検索してみて気になるものを紹介します
2021.12.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

本記事はAWS CDK Advent Calendar 2021の11日目の記事です。

CX事業本部IoT事業部の佐藤智樹です。

今回は先日のre:InventでGAが発表された、AWS CDKのコンストラクトライブラリ(以降特に断りがなければライブラリと記載します)が共有できるConstructHubについて紹介します。またConstructHubの紹介に加えて、公開されているライブラリの中で自分から見ても有益だと感じたものを紹介します。

ConstructHubとは

Construct Hubとは、AWS CDKのライブラリを共有/検索できるサイトです。サイトには以下のURLでアクセスできます。

サイト内ではAWS CDKだけでなく、CDK for Terraform(CDKtf)やCDK for Kubernetes(CDK8s)などのライブラリを検索することが可能です。検索するためにプログラム言語ごとなど条件に応じて対応したライブラリを探すこともできます。また公開されているものはAWSだけでなくコミュニティやDatadogなど企業が開発したものも調べることができます。単にGitHub上で公開されている場合は、個別のライブラリを調べたり、人から聞いたりして使うことが多いかと思うのですが、今回のサービスができたことでサービスに使えるライブラリの知見を簡単に共有できるようになりました。

以下からはConstructHubによって今後世界はこうなっていくのではと筆者が感じた内容を記載しています。公開されているライブラリがそもそもどんなものがあるのか気になる場合は次章まで飛ばして読んでください。

ライブラリは生成するリソースの観点だと2種類に分かれます。1つ目はDatadogが提供しているライブラリのようにAWS CDKで本来管理できなかった範囲のリソースをAWS CDKの書き方で管理できるものです。他のIaCツールだとTerraformaではいくつかのSaaSがProviderを提供することで、TerraformでSaaSをコード管理できるようになっています。以前記事で紹介したので画像を再掲します。画像左下のDatadog、New Relic、Mackerelなどの部分です。

今後SaaSがCDK向けのライブラリ提供を増やすことで、同じようにCDK経由でAWS外部のリソースをコントロールできるようになる世界が来るかもしれません。現状で同じようなことをやるならばCDK for Terraformを使ったり、CloudFormation Public Registry経由でSaaSの管理はできるので、どのような違いがあるのかは今後記事にしてみたいと思います。

2つ目はAWSのリソース作成をより便利にするものです。CDKの内部にはL3 ConstructとしてECS PatternsのようにECS関連のリソースを簡単に生成できるものがあります。よく使う共通のリソースをL3 Constructとして共有/公開することが個人でもできるようになります。また単にリソースをさらに宣言的にするだけでなく、CDK/CloudFormationだと追加実装が必要になる部分を補強するようなライブラリも公開されています。

詳細は後述しますが、マルチリージョン/マルチアカウントのスタック間リソース共有をサポートするライブラリやS3のバケットにデータがあっても削除できるライブラリなどが公開されています。CDKに現状足りない部分をCustomResourceなどを使いAPI経由で操作することで補っています。普段自分たちがCDKでAWSのリソースを作成する上で、CDKやCloudFormartion上の制約で不便だと感じている部分を追加実装し公開して他の方にも見てもらえるという活動がどんどん加速していくのかなと感じています。

ConstructHubにあるライブラリの紹介

ここからはConstructHubをみて便利そうだと感じたライブラリを紹介します。ConstructHub自体の機能ではないですが、こういうライブラリを探せるんだなという参考になればと思ったので記載します。自分自身も今回GAされて初めてちゃんと調べると色々便利そうなものあると気づいたので共有します。

紹介するライブラリはExperimentalなものを含まれているため、確認の上でご使用ください

datadog-cdk-constructs

「datadog-cdk-constructs」はDatadog公式が提供しているコンストラクトです。

現状提供されている機能だと、Lambdaのトレースやカスタムメトリクスの収集、Datadogライブラリのインストールなどがサポートされています。Lambda関数を渡してレイヤーをアタッチすることがCDKと似たコードで行えます。

cdk-remote-stack

「cdk-remote-stack」はマルチリージョン/マルチアカウントのスタック間パラメータ共有が簡単にできるライブラリです。

CloudFormationだと基本的にマルチリージョンでのスタック間の相互参照をサポートしていないので、その部分をサポートするライブラリになっています。詳しくは以前記載した以下のブログなどを参考にしてください。

cdk-iam-floyd

「cdk-iam-floyd」はIAMポリシーの作成を簡略化できます。

AWS CDKの標準機能でもManagedPolicyなどある程度はIAMポリシーを付与しやすいような設計にはなっていますが、IAMポリシーをJSONで作る場合と比べてCDK独自の構文を理解していなければうまくポリシーが作れなかったり、Conditionの型がanyなのでAWS公式ドキュメントを読んで設定する必要があり、CDKの型補完の恩恵が受けられません。

このライブラリでは300 Services、11714 Actions、1244 Resource Types、1221 Condition keysに対応しているので型補完の恩恵を受けつつ、fluent interfaceで記述することができます。実際にはメソッドチェーンでより宣言的に記述することができます。詳しくは以下の動画をご覧ください。

cdk-s3bucket-ng

「cdk-s3bucket-ng」はデータの入っているS3バケットを削除することができます。

S3では誤って削除することを保護のためバケットにデータが入っている状態だとバケット削除ができません。CDKの設定としてはremovalPolicy:RemovalPolicy.DESTROYの設定でスタック削除時に同時に削除する設定はできます。設定が気になる場合は以下の記事が参考になるかと思います。

しかしながら、VPC Flow Logsなどすぐにデータが入るような用途で使っていると削除時にデータが入ってしまいスタックの削除に失敗します。本番環境などは良いのですが、ラボやハンズオンなどで終わった後にすんなり削除して欲しいときも画面上などから「バケットを空にする」処理を実行する必要があり少し面倒でした。

ラボなどの用途で重要な情報などを長期的に保存するわけではない用途の時は非常に役立つライブラリかと思います。

所感

今回紹介したもの以外にもGitLab Runnerの作成をサポートしていたり、CDK経由でCloudFormation Registryを使う実装なども公開されています。また自分が詳しくないので紹介できていませんが、CDKtfやCDK8sのライブラリもサポートされているので気になったら確認してみてください。

また公開されているライブラリを使うだけでなく、個人で作成したものを共有することもできます。cdk-s3bucket-ngのアイデアなどは参考にできる部分もあるので、似たように困っている部分があれば実装して公開してみたいと思います。

AWS CDK Advent Calendar 2021、次回の12日目はやまたつさんです。タイトルからするとcdk-remote-stackの話を書いてくれそうなのでご期待ください!