Slide 1

Slide 1 text

「AWS PDK」聞いたことありますか? 第33回 JAWS-UG札幌 クラウド女子会コラボ 勉強会 2024-02-02 株式会社ゆめみ 藤原 麻希 1

Slide 2

Slide 2 text

About me { "Name": "Maki Fujiwara", "Location": "Hokkaido Sapporo", "BelongsTo": ["YUMEMI"], "Communities": [ "JAWS-UG Sapporo", "JAWS-UG CDK 支部", "Cloudflare Meetup CTS", "Cloudflare Meetup online", "AWS Carnival", "AWS Cafeteria" ] } 2

Slide 3

Slide 3 text

Background Web系 サーバーサイド エンジニア PHP AWS CDK TypeScript AWSテックリード AWS育成リード クラウド推進 AWS認定資格取得 キャンペーン 3

Slide 4

Slide 4 text

Hobby AWS What's New のチェック AWS CDK AWS Amplify Hono Cloudflare SmartHome IoT SAUNA 4

Slide 5

Slide 5 text

JAWS DAYS 2024 2023-03-02(土) 池袋サンシャインシティ 展示ホールA 5

Slide 6

Slide 6 text

宣伝 JAWS DAYS 2024 セッション登壇 AWS認定 Specialtyレベルで満点取った時の勉強法 パネルディスカッション 子育てエンジニアパネルディスカッション ~コーディングとおむつ替えの狭間で~ 6

Slide 7

Slide 7 text

AWS CDK AWS Cloud Development Kit 7

Slide 8

Slide 8 text

AWS PDK AWS Project Development Kit The AWS Project Development Kit (PDK) provides building blocks for common patterns together with development tools to manage and build your projects. 8

Slide 9

Slide 9 text

GitHub Repository 元は aws-prototyping-sdk と呼ばれていたもの Contains useful CDK and Projen constructs vended in multiple languages 9

Slide 10

Slide 10 text

Getting started The AWS PDK lets you define your projects programmatically via the expressive power of type safe constructs available in one of 3 languages (typescript, python or java). This approach yields many benefits, including: 10

Slide 11

Slide 11 text

Getting Start many benefits Ability to set up new projects within seconds, with all boilerplate already pre- configured. Receive updates to previously bootstrapped projects when new versions become available i.e: updated dependencies or lint configurations. Build polyglot monorepos, with build caching, cross-language build dependencies, dependency visualization and much more. Leverage codified patterns which vend project and infrastructure (CDK) code. 11

Slide 12

Slide 12 text

Getting Start 一言でいうと よくあるCDKのプロジェクトを秒で作成できる(更新できる)Building Blocks 12

Slide 13

Slide 13 text

Monorepo すべてのコードを1リポジトリに集約するスタイル 例) Webサイト API実装 APIドキュメント(Swagger, ) インフラリソースのIaC(CDK) AWS構成図 認証周りの設定 共有型情報 DB Schema定義 13

Slide 14

Slide 14 text

Prerequisites Git Node.js 18 以上 (nvm, nodenv, docker など) Package Manager (npm, yarn, pnpm お好みで) Projen scaffolding ツール 日本では人気なさそう、海外だとCDK Daysで今でも発表ネタに awscdk-app-ts や awscdk-construct で使ったことがある方も ts, python, java, next.js, react などのテンプレートも増えている AWS CDK (TypeScript, Python, Java) 現状PDK側の対応がこの3言語 14

Slide 15

Slide 15 text

Who is developing it? Apache-2.0 license Copyright © 2023 Amazon Web Services, Inc. 15

Slide 16

Slide 16 text

16

Slide 17

Slide 17 text

Packageの種類 monorepo api website (Static website, React) infra (AWS CDK) Pipeline (CDKPipelines) Identity (Cognito) pdk-nag (cdk-nagよりマイルドな設定) Diagram (Drawio, Graphviz) 17

Slide 18

Slide 18 text

Packages > API models libraries runtime Lambda handler documentation (OpenAPI, ) infrastructure (Diagram) Authorizations API Keys React Query Hooks Mocking Response (自動生成) 18

Slide 19

Slide 19 text

プロジェクト開始時の作業 projenrc ファイルに必要最低限の設定だけ書いてビルドすると、 数秒でPackageが生成される mkdir my-project && cd my-project # プロジェクト作成 pdk new --package-manager=pnpm monorepo-ts # projenrc に追加したいパッケージの情報を追加 vim projenrc.ts # ビルド pdx build build | npx nx run-many --target=build --output-style=stream --nx-bail > NX Successfully ran target build for 0 projects 19

Slide 20

Slide 20 text

projenrc.ts import { MonorepoTsProject } from "@aws/pdk/monorepo"; import { DocumentationFormat, Language, Library, ModelLanguage, TypeSafeApiProject, } from "@aws/pdk/type-safe-api"; import { javascript } from "projen"; // rename variable to monorepo for better readability const monorepo = new MonorepoTsProject({ name: "my-project", packageManager: javascript.NodePackageManager.PNPM, projenrcTs: true, }); 20

Slide 21

Slide 21 text

const api = new TypeSafeApiProject({ parent: monorepo, outdir: "packages/api", name: "myapi", infrastructure: { language: Language.TYPESCRIPT, }, model: { language: ModelLanguage.SMITHY, options: { smithy: { serviceName: { namespace: "com.aws", serviceName: "MyApi", }, }, }, }, runtime: { languages: [Language.TYPESCRIPT], }, documentation: { formats: [DocumentationFormat.HTML_REDOC], }, library: { libraries: [Library.TYPESCRIPT_REACT_QUERY_HOOKS], }, handlers: { languages: [Language.TYPESCRIPT], }, }); 21

Slide 22

Slide 22 text

// Web サイトを追加 const website = new CloudscapeReactTsWebsiteProject({ parent: monorepo, outdir: "packages/website", name: "website", typeSafeApi: api, }); // インフラを追加 const infra = new InfrastructureTsProject({ parent: monorepo, outdir: "packages/infra", name: "infra", cloudscapeReactTsWebsite: website, typeSafeApi: api, }); // 忘れないように注意 cdk.synth() のようなもの monorepo.synth(); 22

Slide 23

Slide 23 text

|_ model/ - contains the Interface Definition Language (IDL) where you define your API. |_ handlers/ - contains the generated lambda stubs for your API operations |_ generated/ |_ runtime/ - generated types, client, and server code in the languages you specified |_ infrastructure/ - generated infrastructure |_ documentation/ - generated documentation in the formats you specified |_ library/ - generated libraries if specified |_ typescript-react-query-hooks - react hooks to call the API 23

Slide 24

Slide 24 text

各パッケージの開発・デプロイ cd packages/infra pdk deploy:dev 24

Slide 25

Slide 25 text

Project dependency graph 25

Slide 26

Slide 26 text

Cloud Diagram 26

Slide 27

Slide 27 text

Cloud Diagram 27

Slide 28

Slide 28 text

Draw.io 28

Slide 29

Slide 29 text

API Explorer 29

Slide 30

Slide 30 text

AWS PDK 導入前のつらみ TypeScriptはフロントエンド界隈でよく使われている技術が多い 慣れていないと快適な開発環境を整備するのは結構大変 初回だけと言いつつプロジェクト開始時にやることたくさん Node.jsバージョン, Workspace, TSConfig, Prettier, ESLint, 各種.ignoreファイル... これらを統一管理メンテナンスしていくのは意外と手間 30

Slide 31

Slide 31 text

AWS PDK 導入メリット 1 Projenで一括管理 各Packageに生成される共通ファイル TSConfig (tsconfig.json, tsconfig.dev.json) pnpm (pnpm-lock.yaml, pnpm-workspace.yaml) Prettier (.prettierignore, .prettierrc.json) ESLint (.eslintrc.json) 各種.ignore (.gitignore, .npmignore) package.json 31

Slide 32

Slide 32 text

AWS PDK 導入メリット 2 ベストプラクティス集 Packageは先人たちの知恵が詰め込まれたベストプラクティス集 ひと通り動く初期設定が済んだ状態がすぐに手に入る 必要なところだけカスタマイズ設定を追記 32

Slide 33

Slide 33 text

AWS PDK 導入メリット 3 TypeSafe API TypeScript 前提にすると → WebもBackend APIもインフラも、全てTypeScriptに統一できるメリット◎ 他の言語(Python, Java)でも同様のメリットが得られる (未検証) → API Reference を見る限り、型を有効活用した開発体験ができそう → AWS CDK で対応済み言語は、今後対応される可能性? 33

Slide 34

Slide 34 text

所感 PoCやPrototype, ミニマムスタートのプロジェクト向き? まだ v0.23.2 (Stable ではない) 先に AWS CDK に入門して少し慣れてからがいいかも? 爆速で環境構築ができる Package間の依存関係の可視化ができる アーキテクチャ図の生成にも期待 AWS CDKベースで生まれ変わる Amplify Gen2 との使い分けは? 34

Slide 35

Slide 35 text

35

Slide 36

Slide 36 text

Q&A 36