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

AIエージェントが書くのなら直接CloudFormationを書かせればいいじゃないですか何故...

Avatar for watany watany
July 12, 2025

AIエージェントが書くのなら直接CloudFormationを書かせればいいじゃないですか何故AWS CDKを使う必要があるのさ

AWS CDK Conference Japan 2025でお話しした内容です
https://jawsug-cdk.connpass.com/event/356357/

Avatar for watany

watany

July 12, 2025
Tweet

More Decks by watany

Other Decks in Technology

Transcript

  1. 今日のお題 AIエージェント が書くのなら直 接CloudForm ationを書かせ ればいいじゃな いですか何故A WS CDKを使う 必要があるのさ

    じゃあフレーム ワーク‧型使わ ないどころか機 械語で書くのか よLLMは⼈間の 真似だから⼈間 が⽣産性出る⼿ 段が⼀番出るに 決まってるだろ https://www.irasutoya.com/2013/05/blog-post_7737.html
  2. About Me 渡邉 洋平(watany) • 所属:NTTテクノクロス株式会社 ◦ 「AWS 500 APN

    Certification Distinction」に認定 • AWS ◦ JAWS-UG東京 運営 ◦ AWS Ambassadors(2024〜) ◦ AWS APN Top Engineer (2023〜) ◦ AWS All Certifications Engineers(2022~) https://jawsug.connpass.com/event/316451/
  3. AWS界隈になじみ深い Coding Agent Amazon Q Developer CLI Cline (with Bedrock)

    Claude Code (with Bedrock) https://github.com/cline/cline/blob/main/assets/icons/icon.png
  4. LLMチャットの ”コーディング ” • 確率的に次の単語(トークン)を出し、まとまった文章(ソースコード)が生成 ◦ 昔々→あるところ→に→おじいさん→が→… • 「過去に戻って整合性を取る」機能はLLM単体には無い •

    出力結果に対し、人間が知識や仕組み(ツール)で色々チェックする Agent Human ワカリマシタ(チェック遅いし都度 見せるのしんどいな) チェックは人間の仕事!バッチコ イ!!!!(実は確認すること多く て面倒なんだよな)
  5. AIエージェントの ”コーディング ” • 入力(あるべき姿)と出力結果に対し、設計/実装/検証のループを自律的に回してカ イゼン ◦ ある程度までの試行錯誤はAgentに任せた方が速い • 「Agentic

    Coding とは Reconciliation Loop である」(@t_wada氏) ◦ \(調整) Loop:「理想状態」「実際」を比較し、検知した差分を理想状態に近づ けるループ処理 Kubernetes周辺で頻出 https://github.com/kubernetes
  6. AWS CDK for Human Writing あった方がいい • 「.」で補完 • IDE

    Support Testing 
 
 あった方がいい • Unit tests • Integration tests Reading 
 
 あった方がいい • マイクロサービスな Resourceの抽象化 • 各種Policyのリレー ションを整理 

  7. AWS CDK for Agent Writing 無くてもいい • 大抵のIDE+タイピン グより高速 •

    RAG/MCPで正確性 も向上 Testing 
 
 無いとマズい • これから話す Reading 
 
 あった方がいい • マイクロサービスな Resourceの抽象化 • 各種Policyのリレー ションを整理 

  8. Agentic Codingとテスト Agentic Codingにおいて、自動テストは必要ではなく必須 • 「モダン」「リリース高速化」等の留保すら要らない。実用として必須 • 求める品質のCDK Projectが一発で出せる時期はしばらく来なそう •

    書かないための理由(書くのが面倒・工数がかかる)が取り除かれた世界になった Agent (一発で完璧なの出してくれるな ら話は変わるんだよな ) いいから書け! Just do it!! Human
  9. 報酬ハッキング (reward hacking) • 得られる報酬を最大化するため、評価者を騙す動きを取る ◦ 人間のフィードバックでの学習(RLHF)で、評価者を騙した方が高コスパだと理解してしま う ◦ グッドハートの法則「指標は目的になった時、良い指標ではなくなる」

    ◦ 参考:人間を騙してサボるAIたち(https://joisino.hatenablog.com/entry/mislead) • AIに任せたタスクの「ゴールテープ」がずらされていないかは必ず確認する Agent Human おまえ騙して楽しようとしてたんか LLMに頼んで楽してるのは お前らも一緒だな!
  10. Testing - CDK vs CFn CDKだからできる/CFnだからできないの極端な話ではない…? CDK CFn Lint cdk-nag

    型・Construct cfn_nag cfn-lint unit tests 言語ごとのテスト Framework(vitest/pytest/…) CloudFormation Guard integration tests Integ-test Taskcat
  11. Unit tests - Snapshot • 目的 ◦ リグレッション(回帰) ◦ 仕様の固定

    ▪ 厳密なAssert無しで、ざっくり固定 ▪ リファクタ/移行補助(L2/L3, 独自Construct…) • 評価 ◦ やった方がいい ▪ ガードレールとしてのコスパがいい ▪ どの実装を変えたらどんな影響が出るか?を大局的に見やすい ◦ for Agent ▪ 普段はテストが更新されるだけ ▪ CDKのVersion更新やリファクタリングで活きる
  12. Unit tests - Validation • 目的 ◦ デプロイ時に邪魔になる不正な値を事前に弾く ◦ その他、入って欲しくない値を弾く

    • 評価 ◦ 実装したんだから、やる ◦ for Agent ▪ バリデーション実装の詳細仕様・検証用途として普通に必要
  13. Unit tests - Fine-grained assertions • 目的 ◦ いわゆる一般的な単体テスト •

    評価 ◦ AIエージェント主体だと「あるとイイ」でなく「無いとダメ」
  14. Unit tests - Fine-grained assertions • メインで使うL2 Constructが抽象化志向なので、単純な1:1確認にはならない ◦ テストするモチベは(CFnに比べ)保ちやすい

    • どんな観点をテストしたいか→宣言的でないもの ◦ 手続き的:ループ/条件分岐/外部入力 ◦ 独自パッチ:Override(Constructへの上書き) ◦ 念のため:セキュリティ要件など、確実に満たしたい観点を厚く見る ▪ Linterで発見項目はボトムラインが多い、満たしたい要件までを保証でき ない場合も ▪ 回帰目的のassertはsnapshotで充足するので書き過ぎない
  15. CDKとIntegration tests • Integ-testモジュール ◦ →こういうのでAWS環境へ本当にデプロイする • 個人的には採用に消極的 ◦ 正規の運用手順(Deploy/Destroy/…)検証とIntegの役割が、かなり被る

    ◦ 1サイクルが長い(15分~)ので、実装ガードレールとして扱いづらい ◦ 現状は限定的な用途で扱う(独自Construct / カスタムリソース) Dev環境で実際のデプロイフ ロー流させれば良くない? 普通にできます
  16. まとめ - Testing エージェント時代だからこそ、テストを柔軟に書けるIaC • 普通のテストフレームワークをIaCに使えるという価値 ◦ pytest/Vitest… ◦ 正しくインフラを「コード化」する

    • テストを書く時間的コストが大幅に減っているので書く ◦ 何でもいいから通るテストをエージェントに書かせる。読んで実施する意味の分か らないテストは捨てる ◦ テストケースに意味があるか確認し、報酬ハッキングされない状態を保つ • Fine-grained assertionsもValidationも
  17. CDKの可読性 • CFnは神YAML/JSONの世界 ◦ 全てが半構造化されていて、フラットで、関係性を追うのがしんどい • CDKはリソースの関係性を表す記法が充実している ◦ .grant:リソース間の IAM

    権限設定 ◦ .connections:リソース間の疎通設定 ▪ source.connections.allowTo(target, ec2.Port.allIcmp()) ◦ .addDependsOn:リソース間の依存性 ▪ logStream.addDependsOn(logGroup) • 型エラーによるプロパティの検証
  18. 1. ガードレール • 継続的インテグレーションが全てに優先される ◦ Type / Test / Lint

    / cdk diff / cdk drift / Other… ◦ インフラだから~リリースサイクルが遅いから~ この機会にやめる ▪ エージェント前提では整備しないと破綻する ◦ 思ったよりすぐ破綻する。楽観的に見積もって1日半以内 • 何もわからなかったら ◦ AWS CDKはTypeScript ▪ CDKでの言語間シェア7割越え、LLMはTypeScriptめちゃ得意 ▪ 高速なBiomeとVitestから始める • eslint-cdk-pluginも使いたいけど……
  19. 2. MCP • エージェントとツールを繋ぐプロトコル ◦ Model Context Protocol ◦ 主要LLMプレイヤーが概ね合意しているバズった規格

    • 詳細はこの辺読むとわかるらしい。 • 今回知りたいのは ◦ 「Coding Agent」の「CDK実装で使える」やつ https://www.shuwasystem.co.jp/smp/book/9784798075730.html
  20. 2. MCP • 良さそう ◦ AWS CDK MCP Server ▪

    CDKに関する、出力品質の向上/最新ドキュメントへのアクセス/専門的な ドメイン知識の提供 ◦ AWS Documentation MCP Server ▪ 公式ドキュメントから最新情報の検索・提供 • あってもいい ◦ AWS Diagram MCP Server ▪ CDKからAWS構成図の作成 ▪ 画像と生成用のコードは出してくれるが、ちょっといじる為のdraw.ioファイ ルがうまく出ない
  21. 3. ルール 実態としては複雑 あなたは超最強スーパーエンジ ニアでマジで何でも書けるし商用 品質 CDKでALB+Fargate+Aurora なWebシステムを作って エージェントとして のシステムプロン

    プト うちのチームとしてのルールはう んたらかんたら ルールファイルか ら読み込んだプロ ンプト ユーザが明に指定 するプロンプト
  22. ルールの例 ### Coding - **Kent Beck流TDD(Test-Driven Development)**を常に順守する。 - ドキュメントとコードの差分は常に最新化する。 ###

    CDK - lintにはcdk-nag を利用し、無効化するルールはコメントで理由を残す。 - IAM 権限は可能な限り `.grant*` 系メソッドで付与する。 - SnapShotテストを採用する。 - L1Construct(`Cfn*`)は避ける。MCPなどで公式の仕様を確認し、未実装の場合のみ使用する。 ・・・