いつも記事を読んでいただきありがとうございます!
モブエンジニア(@mob-engineer)です!
今回は2025.01.17(金)に開催したクラスメソッドのAWS CDK事情大公開スペシャルに参加しましたのでアウトプットとしてイベントレポートを執筆しました。
サクッと読める分量で執筆しておりますので、お気軽に読んでいただければ幸いです。
イベントページ
リアルタイムで執筆しているため誤字脱字、わかりづらい表現があるかもしれません。
目次
- 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を利用して並列処理を定義できる
- 解決策:Distributed Mapによる大容量処理の並列化
- 課題への対策:ペイロード上限
- AWS公式でもS3へデータを吐き出してから処理させることを推奨している
- エラーハンドリングに関してはCatch句で処理させている
- 要件に合わせてLamdba実行上限を考慮する必要がある
- CDKコード可読性ポイント
- 複雑な条件分岐は切り出していく
- コードの見通しを良くする
- 分割で実行する処理の継続判定はステートマシンで行わない
- ステートマシンで実装しようとすると複雑化する
- 処理判定はLambda側に任せる
- 複雑な条件分岐は切り出していく
- まとめ
- Distributed Mapの活用
- 大規模データの並列処理が実現できる
- Distributed Mapの活用
CDKコマンド誤用による環境リソースの損失を防ぐ方法
- 自己紹介
- クラスメソッドの24新卒の方
- LINEミニアプリのフロント、バック、サーバーレス構築を行っていた
- AWS CDKとは
- インフラストラクチャをプログラミング言語で定義できるIaCツール
- ループ処理などをプログラミング言語で実装できる
- 再利用性を高く利用できる
- 実運用中にDestroyを実行すると
- アプリが利用できなくなる
- 復旧自体は2日間でできる、CDKなので再構築はできるが依存関係が壊れる場合がある
- 復旧作業としてRetain属性を持つリソース修正
- Cognitoに関してはユーザパラメータを再定義した
- 元を正すと、Destroyコマンドへの理解
- 再発防止策
- CloudFormationの削除保護の有効化
- 有効化することで誤って削除を行っても削除されない
- CDKでのやり方は設定項目を1行追加するだけ
- CloudFormationの削除保護の有効化
- まとめ
- 削除保護を有効化しましょう
CDK使ったBedrockAgent構築(仮)
- 自己紹介
- Nint社のプラットフォームエンジニアリング
- 小さく始めるプラットフォームエンジニアリング著者
- Bedrockとは
- API経由で生成AIサービスを利用できるサービス
- 既存のBIツールを生成AI化に任せるツールを開発
- 開発ツール
- 既存のBIツールの代わりとなる分析アプリ
- 人気商品の要因分析を行う
- アプリケーションのインフラストラクチャをすべてCDKで任せた
- CDKを通じてBedrockが実現できないこと
- re:Invent発表内容は基本的にできない
- 小ネタ
- Agent本体がアップデートされた際、AgentAliasを更新する必要がある
- AgentAliasを更新⇒バージョンも更新される
- BunとCDKの相性問題
- Bun:JavaScriptのランタイムアプリ
- ざっくりいえば、一定バージョン以上でないと利用できない
- マルチエージェントコーポレーション機能を利用してもエージェントのレスポンスが早くなれない
- BlackBeltの方法を実装しても早くならなかった
- エージェント間のコミュニケーション時間が運用オーバーヘットになっている
- Agent本体がアップデートされた際、AgentAliasを更新する必要がある
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を使って簡単なアプリ開発を行ってみたいと思いました。
最後まで記事を読んでいただきありがとうございました!