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

読んで学ぶ Amplify Gen2 / Amplify と CDK の関係を紐解く #jaw...

読んで学ぶ Amplify Gen2 / Amplify と CDK の関係を紐解く #jawsug_tokyo

JAWS-UG東京 Presents 400 での登壇資料

https://jawsug.connpass.com/event/348840/

Kihara, Takuya

April 23, 2025
Tweet

More Decks by Kihara, Takuya

Other Decks in Technology

Transcript

  1. 読んで学ぶ Amplify Gen2 Amplify と CDK の関係を紐解く JAWS-UG東京 Presents 400

    2025/04/23 Kihara, Takuya (@tacck) JAWS-UG東京 Presents 400 / #jawsug_tokyo 1
  2. 2 Kihara, Takuya 木原 卓也 / @tacck / Sapporo, Japan

    CO-OP Sapporo 生活協同組合コープさっぽろ Software Engineer / Flutter, TypeScript, Vue.js, React Amplify Japan User Group 運営メンバー ゆるWeb勉強会@札幌 主催 AWS Community Builder Since Q2 2021 / Category: Front-end Web and Mobile Community 好きなフィギュアスケートの技 スプレッド・イーグル JAWS-UG東京 Presents 400 / #jawsug_tokyo
  3. 今日のお話 ▪ 最初にお伝えすること ▪ 確認していくこと ▪ 前提 ▪ Amplify Gen2

    概要 ▪ AI Kit Generation のデプロイの流れを読んでみよう ▪ おまけ JAWS-UG東京 Presents 400 / #jawsug_tokyo 3
  4. 最初にお伝えすること ▪ 私がやったこと – Amplify と CDK がどのように連携しているか、 コードレベルで知る。 ▪

    聴いた方にこうなって欲しいこと – 気になった OSS のコードを読むきっかけになって欲しい。 ▪ だいぶ抜粋した話になるので、ぜひ Amplify / CDK のコードも 読んでみてください。 JAWS-UG東京 Presents 400 / #jawsug_tokyo 4
  5. 確認していくこと ▪ CLI コマンド (ampx) としての実装 – オプションに応じた処理の呼び出し – デプロイ手段として

    CDK の呼び出し ▪ Amplify backend.ts / resource.ts と CDK のリソースの関係 – CDK 自体はどんな仕組み (概要) – Amplify から CDK へのリソース変換 (の一部) JAWS-UG東京 Presents 400 / #jawsug_tokyo 5
  6. 前提 ▪ AWS Amplify Gen2 でプロジェクトを作ったことがある – AI Kit のプロジェクトを作ったことがあるとより良い。

    ▪ AWS CDK でプロジェクトを作ったことがある ▪ TypeScript の概要がわかる JAWS-UG東京 Presents 400 / #jawsug_tokyo 6
  7. Amplify Gen2 概要 ▪ AWS CDK との連携が改善。 ▪ これにより、ホットデプロイを活用した Sandbox

    が誕生。 ▪ Webフロントエンドの場合、 TypeScript のみで開発可能。 – リソースを TypeScript で定義。 – CDK リソースを意識せずにそのままデプロイ。 – CDK リソースの追加も可能。 JAWS-UG東京 Presents 400 / #jawsug_tokyo 8
  8. AI Kit の generation をデプロイ ▪ 今回は AI Kit の

    generation をデプロイするためにやること – リソースの実装 – Amplify のデプロイコマンド実行 (git push) – 見えない力による CDK リソース生成 – CDKでクラウドへデプロイ JAWS-UG東京 Presents 400 / #jawsug_tokyo 10
  9. AI Kit の generation をデプロイ ▪ 今回は AI Kit の

    generation をデプロイするためにやること – リソースの実装 – Amplify のデプロイコマンド実行 (git push) – 見えない力による CDK リソース生成 – CDKでクラウドへデプロイ JAWS-UG東京 Presents 400 / #jawsug_tokyo 11 CDKリソースへ変換 CLIコマンドとして動作 CDKの実行 Amplifyリソースの解釈 AppSync Bedrock 呼び出し
  10. CDK のデプロイの概要 cdk deploy を実行したら ▪ 子プロセスで cdk.json の app

    プロパティが実行される JAWS-UG東京 Presents 400 / #jawsug_tokyo 13 cdk.json
  11. CDK のデプロイの概要 cdk deploy を実行したら ▪ 子プロセスで cdk.json の app

    プロパティが実行される – bin/foo-cdk.ts で cdk.App が生成され – lib/foo-cdk-stack.ts で cdk.Stack が生成される。 ▪ Stack に各種リソースを格納する。 JAWS-UG東京 Presents 400 / #jawsug_tokyo 14 bin/foo-cdk.ts lib/foo-cdk-stack.ts
  12. CDK のデプロイの概要 cdk deploy を実行したら ▪ 子プロセスで cdk.json の app

    プロパティが実行される – bin/foo-cdk.ts で cdk.App が生成され – lib/foo-cdk-stack.ts で cdk.Stack が生成される。 ▪ Stack に各種リソースを格納する。 – 実行結果として cdk.out が出力され、 CloudAssembly クラスの オブジェクトが得られる。 ▪ cdk.out と CloudAssembly を使って deploy が実行される JAWS-UG東京 Presents 400 / #jawsug_tokyo 15
  13. CLI コマンド (ampx) としての実装 読み始め ▪ まずはコマンドのエントリーポイント ▪ yargs を使ったオプション解釈

    ▪ 該当するオプションの handler を実行 (PipelineDeployCommand) JAWS-UG東京 Presents 400 / #jawsug_tokyo 20
  14. CLI コマンド (ampx) としての実装 デプロイ手段として CDK の呼び出し ▪ デプロイ手段の生成 →

    createPipelineDeployCommand ▪ BackendDeployerFactory / CDKDeployer によって、 CDKによるデプロイが実装される。 ▪ 呼び出しは抽象化されているので、 CDK以外のデプロイ手段も 使えるようになる (ロマン)。 JAWS-UG東京 Presents 400 / #jawsug_tokyo 21
  15. この時点で CDK Toolkit の準備 ▪ BackendDeployerFactory から 呼び出している。 ▪ Toolkit

    と CloudAssemblySourceBuilder を 呼び出し。 JAWS-UG東京 Presents 400 / #jawsug_tokyo 22
  16. Amplify リソースの読み込み ▪ CDKDeployer から tsx の tsImport を呼び出して、 プロジェクトのリソースを

    読み込み。 ▪ 先に見た、 cdk.json の app プロパティ実行に相当。 – data/resource.ts 内で Data カテゴリの型を解決。 JAWS-UG東京 Presents 400 / #jawsug_tokyo 26
  17. Amplify リソースの読み込み ▪ CDKDeployer から tsx の tsImport を呼び出して、 プロジェクトのリソースを

    読み込み。 ▪ 先に見た、 cdk.json の app プロパティ実行に相当。 – data/resource.ts 内で Data カテゴリの型を解決。 ▪ CloudAssembly の生成準備。 JAWS-UG東京 Presents 400 / #jawsug_tokyo 27
  18. Amplify リソースを CDK リソースへ ▪ 読み込んだ Amplify リソースを CDK リソースへ変換していく。

    ▪ 今回は AI Kit Generation について見ていく。 – Data カテゴリなので AppSync を使って Bedrock と連携 ▪ AppSync のスキーマ作成 ▪ スキーマを Bedrock 呼び出しに必要な AppSync の CDK リソースへ変換 JAWS-UG東京 Presents 400 / #jawsug_tokyo 28
  19. Amplify リソースを CDK リソースへ 準備編 ▪ backend.ts の defineBackend から

    各種 Factory などを通して CDK の Stack 作成処理へ。 JAWS-UG東京 Presents 400 / #jawsug_tokyo 31
  20. Amplify リソースを CDK リソースへ 準備編 ▪ backend.ts の defineBackend から

    各種 Factory などを通して CDK の Stack 作成処理へ。 ▪ CDK の Stack にたどり着く。 JAWS-UG東京 Presents 400 / #jawsug_tokyo 32
  21. Amplify リソースを CDK リソースへ カテゴリ別処理 ▪ 各カテゴリのリソースの処理開始。 ▪ Dataカテゴリ: AppSync

    の GraphQL Schema へ変換。 JAWS-UG東京 Presents 400 / #jawsug_tokyo 36 地道な文字列変換によって GraphQL Schema を作っている。 packages/data-schema/src/SchemaProcessor.ts
  22. Amplify リソースを CDK リソースへ AI Kit Generation ▪ Bedrock を呼び出すための

    CDK リソース変換。 ▪ ここはコードを少し深掘り。 JAWS-UG東京 Presents 400 / #jawsug_tokyo 38
  23. Amplify リソースを CDK リソースへ AI Kit Generation のリソース ▪ Webコンソールで確認したものの一部

    ▪ AppSync データソース – GenerationBedrockDataSourceGenerateSummaryDataSource ▪ 関数 – QueryGenerateSummaryDataResolverFn JAWS-UG東京 Presents 400 / #jawsug_tokyo 39
  24. JAWS-UG東京 Presents 400 / #jawsug_tokyo 47 packages/amplify-graphql-generation- transformer/src/resolvers/invoke-bedrock- resolver-fn.template.js 現在

    AI Kit Generation は Cloude のみ対応。 ここのフォーマットを切り替えできれば、 他のモデルも使えるかも?
  25. まとめ ▪ コード読むの楽しい! ▪ Amplify や CDK のコードが成長する中で、どのように構造が変化しているか、 どういう抽象化を取り入れているか、を見てみると、 それぞれのプロダクトの特徴が見えてきそう。

    – Amplify は デプロイ方法、 機能カテゴリ、などの抽象化 etc… – CDK は Toolkit 化による CLI と 機能の分離 etc… JAWS-UG東京 Presents 400 / #jawsug_tokyo 54
  26. Amplify Boost Up #08 Amplify AI Kit オンライン ハンズオン JAWS-UG東京

    Presents 400 / #jawsug_tokyo 58 https://aws-amplify-jp.connpass.com/event/350962/ オンラインでやります! “Deep Search” チャットアプリを作りましょう!