Upgrade to Pro — share decks privately, control downloads, hide ads and more …

気軽に作ろう!自作AWS CDKコンストラクタ

Haruka Sakihara
March 25, 2025
340

気軽に作ろう!自作AWS CDKコンストラクタ

25/3/25 LayerX SRE & Cloud Native Night!にて発表

Haruka Sakihara

March 25, 2025
Tweet

More Decks by Haruka Sakihara

Transcript

  1. 自己紹介 Haruka Sakihara <主な取得資格> • ネットワークスペシャリスト試験(IPA) • AWS Certified 全15資格

    • Google Cloud Certification 5資格 <所属> • アクセンチュア株式会社 テクノロジー コンサル ティング本部 (2021年新卒入社) • クラウドの部署にいます <趣味> • Go言語が好きです • フィギュアスケートとサンリオも好きです <その他表彰> • 2023 Japan AWS Jr.Champion • 2024 Japan AWS All Certifications Engineer
  2. CDKのコンストラクタは便利!すごい! CDKの便利なところは、既存のプログラミング言語でインフラ構成を記述できることだけではあり ません。L2/L3 Constructorの高度な抽象化による記述の簡素化も魅力の一つです。 VPC Availability Zone 1 Availability Zone

    2 Public subnet Private subnet Public subnet Private subnet Internet gateway NAT gateway Route table Route table Route table Route table Elastic IP CDK Code (L2 Constructor) Deployed Resources たったこれだけで以下を表現できる! • パブリックサブネット2個 →IGWも必要 →サブネットのデフォルトGWはここに向ける • プライベートサブネット2個 • NAT1個 →プライベートサブネットのデフォルトGWはここに向ける →NATにアタッチするElasticIPも確保
  3. 今回作る題材 以下のアーキテクチャをCDKを使って構築するというケーススタディを考えてみましょう。 VPC Availability Zone 1 Availability Zone 2 Public

    subnet Private subnet Public subnet Private subnet Internet gateway Application Load Balancer Amazon Aurora instance ECS Service Topic Amazon SNS Endpoints LB Security group App Security group DB Security group
  4. 自作コンストラクタを作る前 スタックの中にすべてのリソースを愚直に書くことになります。L2やL3を駆使したとしても、ス タック分割をせずに自サービス関連リソースをすべて書くとかなりの量になります。 1. VPCを作る 2. SNSトピックを作る 3. ECSサービス用のセキュリティグループを作る 4.

    ALB用のセキュリティグループを作る 5. ECSクラスタを作る 6. ECSタスク定義を作る 7. ECSタスク定義にアプリコンテナを足す 8. ECSサービスを作る 9. タスクロールにSNS Publish権限を付与する 10. ALBを作る 11. ALBリスナーを作り、ターゲットとしてECSサービスを指定 12. ECSサービス用sg/ALB用sg間の通信許可設定を施す 13. データベース用セキュリティグループを作る 14. データベースを作る 15. データベース用sgにECSサービスからの通信を許可する
  5. まとめその2 • 自作コンストラクタを作ると、CDKのコードもCloudFormationのコンソール表示もわかりやす くなります! • AWS純正のL2コンストラクタが非常によくできているので「あのレベルのきれいな抽象化・設計 をする自信なんてない……」という気持ちになりますが、もうちょっと気軽に自作コンストラクタ は手を出してOKです! • アプリ出身だと「入出力I/Fはきっちり設計で決めてから実装しないと……」という気持ちになり

    がちかもしれませんが、まずはリソース区切って後から辻褄合わせるで全然なんとかなります! • I/Fがきれいじゃないなと思ったら、既存のコンストラクタのような使い心地を担保するために、 IVpcインターフェースのような既存インターフェースを実装してL2化するのはいいアプローチ です(ただし対応工数と要相談) • 自作コンストラクタ同士をまたいだ参照が必要になるのは、大体コネクション許可定義と権限付 与のためです。これを抽象化するために、自作コンストラクタがIConnectableインターフェー ス/IGrantableインターフェースを満たすようにリファクタできるといい感じのI/Fになります