🙌

JAWS-UG CDK支部 vol.17 トーク用コンテンツ

2024/10/23に公開

https://jawsug-cdk.connpass.com/event/331430/

アーカイブ動画

https://twitter.com/yktAWS/status/1849257946997518623

はじめに

第17回のメインテーマである「大規模」にはそれほど関連してません(ごめんなさい)

CDK と TypeScript の初学者向け、かつ技術選定以前の話などが含まれます。あとは複数アカウントへの横展開を意識したような話が出てきますが、時間ある限りお話しできればと

自己紹介


hassaku_63

  • X Space にて、CDK に関する野良トーク番組 "CDK Chatting" をやっています (Connpass, #cdkchatting)
  • 社内で啓蒙とか知見共有を目的とした "Office Hour" の社内版 & CDK 版を主催しています
CDK 関連のアウトプット

[1] CDK による差分検出の話と、cdk diff の紹介

https://blog.serverworks.co.jp/2024/08/06/123000

[2] AWS CDK の L2 Construct にコントリビュートしようとして挫折したので供養する

https://blog.serverworks.co.jp/2024/07/23/125422

[3] CDK を使ってデプロイ前に意図しない "Replacement" を検出したい - part1

https://zenn.dev/hassaku63/articles/ff5df216ba0c71

[4] cdk.context.json が CDK 的にどう扱われているか調べてみた - part2

https://zenn.dev/hassaku63/articles/3bf6d3a02481a8

前フリ

1点目は、「典型的な」あるいは「〇〇流」な書き方・仕組みを押さえておくことと、それをきちんとチームで共有し、使っていくことが重要、という趣旨です。一例として、CDK および TypeScript における非常に典型的な「慣用句的表現」の紹介をします。

2点目は、複数アカウントへの同時展開を想定したものです。V2 のデフォルト bootstrap を理解しておけば、Org 配下のメンバーアカウントすべてに無駄にクレデンシャルをばらまくようなことをしなくて済む、ようになるかもしれません

紹介する内容

[1] AWS CDK の慣用句的テクニックの紹介 - 特定のデプロイステージにのみ適用する設定を Aspects で実装する

  • Aspects の利用例
  • 型ガードとインデックスアクセス型を使ってパラメータの値を縛る (TypeScript)

https://blog.serverworks.co.jp/2024/09/17/160000

(要点)「CDK 始めるついでに TypeScript にもデビューしてみた」な人が、ある程度チュートリアルなどをこなして来たころに見てほしい、「CDK らしさ」「TypeScript らしさ」のある実装例。

[2] bootstrap を理解することで、不要なクレデンシャルのばらまきをなくす

https://speakerdeck.com/hassaku63/cdk-day-2023-configure-cross-account-deployment-using-cdk

https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html

(要点)デフォルトの bootstrap を使う場合、--trust オプションを使えば cdk deploy 時に用いるクレデンシャルは単一アカウントに集約可能。これを利用することで、例えば Organization 管理側の都合で全メンバーアカウント配布したい CDK App があるとき、そのデプロイ作業を実施する際に用いるクレデンシャルを単一アカウントに集約できる。

番外

尺があれば or 今後出していきたいネタ。主に複数アカウントへの横展開(特に Organization 配下)に焦点をあてたもの。

[a] AWS CDK 自由研究 - 付与必須のリソースタグをデプロイする前に検証する方法を考える

(時間があれば。慣用句というほど頻出ではないかも)

  • Aspects のライフサイクルによって適用される処理内容を考慮したバリデーションの実装

https://blog.serverworks.co.jp/2024/07/12/204810

(要点)Aspects で何らかのバリデーションの検査対象とするノードを検出し、IValidation によるバリデーションの検査対象に追加する実装を行う。こうすることで、適用しているすべての Aspect の適用結果が反映された状態(=Validation ライフサイクルのタイミング)でバリデーションを行うことが可能になる。

[b] bootstrap のバージョンメンテで楽がしたい

(to be written)

Discussion