【イベントレポート】クラスメソッドのAWS CDK事情大公開スペシャル #cm_cdk_special

いつも記事を読んでいただきありがとうございます！
モブエンジニア（[@mob-engineer](https://qiita.com/mob_engineer))です！

今回は2025.01.17（金）に開催した**クラスメソッドのAWS CDK事情大公開スペシャル**に参加しましたのでアウトプットとしてイベントレポートを執筆しました。

サクッと読める分量で執筆しておりますので、お気軽に読んでいただければ幸いです。

#### イベントページ

https://classmethod.connpass.com/event/337711/

:::note info
リアルタイムで執筆しているため誤字脱字、わかりづらい表現があるかもしれません。
:::

# 目次
- CDKのコードレビューを楽にするパッケージ cdk-mentorを作ってみた
- 複雑なStep FunctionsをAWS CDKでコード管理するときに気にしたところ
- CDKコマンド誤用による環境リソースの損失を防ぐ方法
- CDK使ったBedrockAgent構築(仮)
- CDKで簡単に静的サイトホスティングをする
- ESLintプラグインを使用してCDKのセオリーを適用する
- CDKでつくる IAM Tracker

## CDKのコードレビューを楽にするパッケージ cdk-mentorを作ってみた
- 自己紹介
    - JAWS UG CDK支部の運営の方
- コードレビューの重要性
    - CI/CDのフローで進んでいっている
    - パラメータ名の定義、アサーションテスト、セキュリティ準拠など
    - オペレーションフェーズでもコードレビューはある
    - ネストスタック参照を利用していないか、注意点を理解しているかがレビューポイント
- cdk-mentorとは
    - メンターのようにCDKの書き方を教えてくれる
    - NGな記載方法があればエラーを出す
    - CDKのAspectsを利用して操作内容をチェックしている
        - Aspectsを利用することでセキュリティ基準に準拠しているか判断できる
    - cdk-mentorを通じてType Script⇒Pythonへの変換も可能
- 難点
    - 一部リソースでL2/L3コンストラクトに対応するのが難しい

## 複雑なStep FunctionsをAWS CDKでコード管理するときに気にしたところ
- Step Functionの制約
    - 1つのステートマシンで25,000イベントまでしかできない
    - ペイロード処理できるのが250KBまで（データ量が多い処理はきつい）
- 課題への対策：大容量処理への対応
    - 解決策：Distributed Mapによる大容量処理の並列化
        - definitionパラメータで処理順序を定義できる
        - JSON形式のため可読性は高い
        - ItemProcessorを利用して並列処理を定義できる
- 課題への対策：ペイロード上限
    - AWS公式でもS3へデータを吐き出してから処理させることを推奨している
    - エラーハンドリングに関してはCatch句で処理させている
    - 要件に合わせてLamdba実行上限を考慮する必要がある
- CDKコード可読性ポイント
    - 複雑な条件分岐は切り出していく
        - コードの見通しを良くする
    - 分割で実行する処理の継続判定はステートマシンで行わない
        - ステートマシンで実装しようとすると複雑化する
        - 処理判定はLambda側に任せる
- まとめ
    - Distributed Mapの活用
        - 大規模データの並列処理が実現できる

## CDKコマンド誤用による環境リソースの損失を防ぐ方法
- 自己紹介
    - クラスメソッドの24新卒の方
    - LINEミニアプリのフロント、バック、サーバーレス構築を行っていた
- AWS CDKとは
    - インフラストラクチャをプログラミング言語で定義できるIaCツール
    - ループ処理などをプログラミング言語で実装できる
    - 再利用性を高く利用できる
- 実運用中にDestroyを実行すると
    - アプリが利用できなくなる
    - 復旧自体は2日間でできる、CDKなので再構築はできるが依存関係が壊れる場合がある
    - 復旧作業としてRetain属性を持つリソース修正
    - Cognitoに関してはユーザパラメータを再定義した
    - 元を正すと、Destroyコマンドへの理解
- 再発防止策
    - CloudFormationの削除保護の有効化
        - 有効化することで誤って削除を行っても削除されない
        - CDKでのやり方は設定項目を1行追加するだけ
- まとめ
    - 削除保護を有効化しましょう

## CDK使ったBedrockAgent構築(仮)
- 自己紹介
    - Nint社のプラットフォームエンジニアリング
    - 小さく始めるプラットフォームエンジニアリング著者
- Bedrockとは
    - API経由で生成AIサービスを利用できるサービス
    - 既存のBIツールを生成AI化に任せるツールを開発
- 開発ツール
    - 既存のBIツールの代わりとなる分析アプリ
    - 人気商品の要因分析を行う
    - アプリケーションのインフラストラクチャをすべてCDKで任せた
- CDKを通じてBedrockが実現できないこと
    - re:Invent発表内容は基本的にできない
- 小ネタ
    - Agent本体がアップデートされた際、AgentAliasを更新する必要がある
        - AgentAliasを更新⇒バージョンも更新される
    - BunとCDKの相性問題
        - Bun：JavaScriptのランタイムアプリ
        - ざっくりいえば、一定バージョン以上でないと利用できない
    - マルチエージェントコーポレーション機能を利用してもエージェントのレスポンスが早くなれない
        - BlackBeltの方法を実装しても早くならなかった
        - エージェント間のコミュニケーション時間が運用オーバーヘットになっている

## CDKで簡単に静的サイトホスティングをする
- 自己紹介
    - バレーボールが趣味の方
    - CDKに関しては半年前から触っていた
    - Akerun開発担当
- 社内で性的ウェブサイトが求められ、CDKで一元管理したい
    - 今回の構成として、S3⇒CloudFront⇒Route53を利用
    - GitHubからいくつか探して利用してみた
- 躓きポイント
    - CloudFrontの証明書リージョンとリソースリージョンを合わせる必要がある
    - 証明書周りはCDKで対応してくれない
- まとめ
    - AWSで静的サイトホスティングが必要な場合CDKで行ってみよう
    - ダウンロード数が多くても内容が古い場合がある

## ESLintプラグインを使用してCDKのセオリーを適用する
- 自己紹介
    - バックエンドエンジニア（TypeScript）
    - 前提としてTypeScriptでの開発
- CDKにおけるセオリー
    - construct IDはPascalCaseで執筆するなど
    - セオリーを意識しながらコーディングするのは厳しい
        - 初学者だと厳しい
    - ESLintを利用してセオリーを意識したコーディングを実現
    - ESLint：解析ツール
- 課題と解決策
    - セオリーを意識したコーディング
    - レビュー時にセオリーを意識しすぎてしまう
    - 解決策としてESLintプラグインを開発
- 対応したセオリー
    - PascalCaseを利用した変数定義
    - thisを利用した定義
    - Construct IDに変数を利用しない
    - 公開するリソースのプロパティはinterfaceにする
        - （個人的考察）疎結合の実現って感じかしら
    - 公開するリソースのプロパティはread-onlyとする
        - 予期せぬ変更が発生しないようにする

## CDKでつくる IAM Tracker
- 自己紹介
    - インフラエンジニアの方
    - JAWS-UG コンテナ支部の運営の方
- IAM Tracerとは
    - ざっくりいえばIAM監視ツール
    - 変更内容を追跡することができる
    - ユーザ情報・権限情報・MFA利用状況をレポートで出力可能
        - テキストファイルで出力可能
- アーキテクチャ
    - EventBridgeでキックさせる
    - Step Functionを通じてLamdba⇒S3でデータ格納、SNS通知を実装
- モチベーション
    - CDKへの興味関心があった
    - サーバーレスを活用したコスト削減
    - AIを活用した学習コストを削減
    - SPA開発に使えそうだと思った
- 苦労した点
    - データモデリング、DB設計が苦労した
    - Step Functionsを通じた状態管理
    - レポート機能について
- 工夫した点
    - セキュリティ対策：最小権限、データ暗号化など
    - 運用性の向上：Step Functionsを定期実行⇒手動実行やテキスト出力
    - 単一スタック：初心者でも触れるようにした
- まとめ
    - インフラエンジニアでも開発にチャレンジできる
        - 生成AIという強力なメンター
    - IaCはインフラ構成管理を楽にするためには必須
    - セキュリティ面と運用面を両立することが大事
- 今後の展望
    - デプロイ自動化を進めていきたい

## まとめ
プロジェクト内でTerraformを触っているので、AWS CDKの基本概念については理解できたのですが、プロダクト説明を通じて、**AWS CDKを使って簡単なアプリ開発を行ってみたい**と思いました。

最後まで記事を読んでいただきありがとうございました！