Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AWSを活用したマルチテナントSaaSの設計と実践~実践編~CDKハンズオン
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
mu7889yoon / Yuta Nakamura
April 05, 2025
Technology
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AWSを活用したマルチテナントSaaSの設計と実践~実践編~CDKハンズオン
mu7889yoon / Yuta Nakamura
April 05, 2025
More Decks by mu7889yoon / Yuta Nakamura
See All by mu7889yoon / Yuta Nakamura
今だから言える(?) Q Developer Pro のクレジットが神ってた話
mu7889yoon
0
120
API Gateway→Lambda→AgentCore を再考する
mu7889yoon
0
22
MCPで決済に楽にする
mu7889yoon
1
210
Lambdaを使い倒す
mu7889yoon
0
110
~Everything as Codeを諦めない~ 後からCDK
mu7889yoon
3
1.5k
Stately
mu7889yoon
1
160
AWS Neuron周辺のre:Cap
mu7889yoon
0
160
JAWS-UG大阪 忘年勉強会 FSF AWSあるある
mu7889yoon
0
170
[標準語ver]JAWS-UG-CDK支部 #22 大阪でもCDKしたいねん
mu7889yoon
0
40
Other Decks in Technology
See All in Technology
GoとSIMDとWasmの今。
askua
3
510
PHP と TypeScript の型システム比較:AI 時代の「型」は誰のためにあるのか? #frontend_phpcon_do / frontend_phpcon_do_2026
shogogg
1
260
個人の発見を、組織の知恵に 〜生成AI活用を"探索"から"組織の仕組み"へ〜
kintotechdev
3
1.1k
関西に縁あるMicrosoft MVPsが語るCopilotの未来
kasada
0
1.2k
AI駆動開発が変える、大規模開発の前提 ーHuman in the Loop から Human on the Loop へ / AIE2026
visional_engineering_and_design
27
17k
AI活用を推進するために ファインディが下した、一つの小さな決断
starfish719
0
260
ITエンジニアを取り巻く環境とキャリアパス / A career path for Japanese IT engineers
takatama
4
1.8k
ブロックチェーン / Blockchain
ks91
PRO
0
110
そのPoC、何を検証したつもりでしたか? AIプロダクトの価値検証で陥った落とし穴
techtekt
PRO
0
150
Chart.js が簡単に使えるようになっていたので OGP 画像生成に使った話
kamekyame
0
170
データ基盤をDataformで整えた話 〜 開発環境を添えて 〜
takapy
0
130
2026.06.13_AI時代に事業会社が「SIer出身エンジニア」を求める理由 / Why Businesses Seek Engineers with a System Integrator Background in the AI Era
jumtech
0
810
Featured
See All Featured
Navigating Weather and Climate Data
rabernat
0
210
Ethics towards AI in product and experience design
skipperchong
2
300
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
210
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
Balancing Empowerment & Direction
lara
6
1.1k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
300
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
200
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
240
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
Un-Boring Meetings
codingconduct
0
310
Transcript
© SEEDS Co., Ltd. All rights reserved. CDKハンズオン 株式会社シーズ 中村 勇太
JAWS-UG 京都支部 × KyotoLT AWSを活用したマルチテナントSaaSの設計と実践
© SEEDS Co., Ltd. All rights reserved. 株式会社シーズ - クラウドソリューション事業部
FROM 経歴 2024年3月 大阪電気通信大学 卒業 2024年4月 株式会社シーズ 入社 好きなAWSサービス Amazon Lightsail / AWS Step Functions 中村 勇太 Yuta Nakamura 2
© SEEDS Co., Ltd. All rights reserved. ハンズオン環境構築 IaC /
CDKについて CDKハンズオン SaaSハンズオン環境構築(先にデプロイだけします!) 目次 3
© SEEDS Co., Ltd. All rights reserved. 4 ハンズオン環境構築
© SEEDS Co., Ltd. All rights reserved. 5 ハンズオン環境構築 1/2
https://github.com/aws-samples/sagemaker-studio-code-editor-template us-west-2のLaunch Stackをクリックする 参考:https://qiita.com/moritalous/items/656793cd97e1e967f045
© SEEDS Co., Ltd. All rights reserved. 6 ハンズオン環境構築 1/2
360にしてください
© SEEDS Co., Ltd. All rights reserved. 7 IaC /
CDKとは
© SEEDS Co., Ltd. All rights reserved. 8 IaCとは 1/2
Infrastructure as Code(IaC)とは、インフラストラクチャの構成をコードとして管理する アプローチです。 手動でのインフラ構築やGUIツールを使った設定に代わり、テキストファイルやコードを 使ってインフラの構成を定義します。
© SEEDS Co., Ltd. All rights reserved. 9 IaCとは 2/2
一般的に知られているEC2を作成する方法に、コンソールにログインして作成する方法 がありますが、IaCを用いて作成することもできます。
© SEEDS Co., Ltd. All rights reserved. 10 IaCのメリット •
再現性 : 同じコードから常に同じ環境が構築される • バージョン管理 : GitなどでIaCコードを管理が可能になる • 自動化 : デプロイメントプロセスの自動化が容易になる • ドキュメント化 : IaCコード自体がドキュメントとなる • スケーラビリティ : 環境の複製や拡張が容易
© SEEDS Co., Ltd. All rights reserved. 11 AWSにおけるIaC AWS
CloudFormation(CFn) YAML/JSONでAWSリソースを記述、幅広くリソースを管理できる。 AWS SAM CFnをベースに、AWS Lambda中心にサーバレスな構成を記述できる。 AWS CDK コンストラクトによる部品化に加えて条件分岐、ループといった プログラミングの恩恵を享受できる。 https://d2908q01vomqb2.cloudfront.net/da4b9237bacccdf19c0760cab7aec4a8359010b0/2017/08/09/aws_sam_introduction-1024x286.png
© SEEDS Co., Ltd. All rights reserved. 12 CDKとは AWS
CDK (Cloud Development Kit) は、プログラミング言語(TypeScript、Python、 Java、C#など)を使ってAWSリソースを定義できるオープンソースのIaCフレームワーク です。 CDKで書かれたコードは最終的にCFnに変換されてデプロイされます。
© SEEDS Co., Ltd. All rights reserved. 13 CDKのメリット •
プログラミング言語の利用 : 馴染みのある言語でAWSリソースを定義 • 型安全性 : コンパイル時にエラーを検出(TypeScriptなど) • 抽象化 : 高レベルの構成要素(Construct)を使用可能 • 再利用性 : コンポーネントの再利用が容易 • IDE統合 : コード補完やリファクタリング、AIエージェントの機能が使える
© SEEDS Co., Ltd. All rights reserved. 14 CDK ハンズオン
© SEEDS Co., Ltd. All rights reserved. CDK触ったことある人 🙋
© SEEDS Co., Ltd. All rights reserved. 16 CDKハンズオンの構成 シンプルなCreateとReadができる
サーバレスなアプリケーション
© SEEDS Co., Ltd. All rights reserved. 17 ハンズオン環境へのアクセス 1/2
Amazon SageMaker AIのコンソールにアクセス
© SEEDS Co., Ltd. All rights reserved. 18 ハンズオン環境へのアクセス 2/2
© SEEDS Co., Ltd. All rights reserved. 19 CDKハンズオンのコードの用意 >
git clone https://github.com/papi-tokei/cdk-sample.git Code Editorでフォルダを開く → > cd cdk-sample > npm i
© SEEDS Co., Ltd. All rights reserved. 20 リポジトリのファイル構成 ├──
README.md ├── bin │ └── cdk-sample.ts ├── cdk.json ├── lambda │ ├── get.py DBに読み取りをするコード │ └── post.py DBに書き込みをするコード └── lib └── cdk-sample-stack.ts 今回メインで見ていくコード > npx cdk bootstrap // CDK初めてだよという方は実行してください
© SEEDS Co., Ltd. All rights reserved. 21 リポジトリのファイル構成 ├──
README.md ├── bin │ └── cdk-sample.ts ├── cdk.json ├── lambda │ ├── get.py DBに読み取りをするコード │ └── post.py DBに書き込みをするコード └── lib └── cdk-sample-stack.ts 今回メインで見ていくコード > npx cdk bootstrap // CDK初めてだよという方は実行してください さっそく見てみましょう (git stashすればなんとかなります)
© SEEDS Co., Ltd. All rights reserved. 22 cdk-sample-stack.ts L11-16
- DynamoDB作成 // DynamoDBのテーブルを作成する const table = new dynamodb.Table(this, 'SampleTable', { partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING }, tableName: 'SampleTable', removalPolicy: cdk.RemovalPolicy.DESTROY, });
© SEEDS Co., Ltd. All rights reserved. 23 cdk-sample-stack.ts L18-26,
L38-40 - Lambda(Get)作成 // Lambda関数を作成する(GET用) const getLambda = new lambda.Function(this, 'GetLambda', { runtime: lambda.Runtime.PYTHON_3_9, handler: 'get.handler', code: lambda.Code.fromAsset('lambda'), environment: { TABLE_NAME: table.tableName, }, }); === 略 === // DynamoDBテーブルへのアクセス権限を Lambda関数に付与する // GET Lambdaに対してテーブルの読み取り権限を付与 table.grantReadData(getLambda);
© SEEDS Co., Ltd. All rights reserved. 24 cdk-sample-stack.ts L44-51
- API Gateway作成 1/3 // API Gatewayを作成する const api = new apigateway.RestApi(this, 'SampleApi', { restApiName: 'Sample Service', apiKeySourceType: apigateway.ApiKeySourceType.HEADER, }); // APIキーを作成する const apiKey = api.addApiKey('ApiKey');
© SEEDS Co., Ltd. All rights reserved. 25 cdk-sample-stack.ts L53-64
- API Gateway作成 2/3 // 使用量プランを作成し、 APIキーと紐づける const usagePlan = api.addUsagePlan('UsagePlan', { name: 'BasicUsagePlan', throttle: { rateLimit: 10, burstLimit: 2, }, }); usagePlan.addApiKey(apiKey); usagePlan.addApiStage({ stage: api.deploymentStage, });
© SEEDS Co., Ltd. All rights reserved. 26 cdk-sample-stack.ts L66-70
- API Gateway作成 3/3 // API GatewayとLambda関数を紐づける const getIntegration = new apigateway.LambdaIntegration(getLambda); api.root.addMethod('GET', getIntegration, { apiKeyRequired: true, // Require API key });
© SEEDS Co., Ltd. All rights reserved. 27 デプロイ >
npx cdk synth // CFnテンプレートを生成 > npx cdk bootstrap // cdkが初めての方は実行してください(再掲) > npx cdk deploy // デプロイ この内容でデプロイしてOKか聞かれますので y で返答してください。
© SEEDS Co., Ltd. All rights reserved. 28 コンソールから確認
© SEEDS Co., Ltd. All rights reserved. 29 API キーのチェック
⚠このAPIキーはこの後使用します ⚠
© SEEDS Co., Ltd. All rights reserved. 30 APIエンドポイントのチェック ✅
CdkSampleStack ✨ Deployment time: 1.69s Outputs: CdkSampleStack.SampleApiEndpoint = https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod/ Stack ARN: arn:aws:cloudformation:ap-northeast-1:123456789012:stack/CdkSampleSt ack/xxxxxxx-xxxx-xxxxxxx
© SEEDS Co., Ltd. All rights reserved. 31 動作チェック >
curl -X POST '<ここにエンドポイントを入れる>' \ -H 'Content-Type: application/json' \ -H 'x-api-key: <ここにAPIキーを入れる>' \ -d '{"name":"TARO", "age":55}' > curl -X GET '<ここにエンドポイントを入れる>' \ -H 'x-api-key: <ここにAPIキーを入れる>'
© SEEDS Co., Ltd. All rights reserved. 32 EX) Lambdaのアーキテクチャを
Graviton(ARM64)に 1/2 // Lambda関数を作成する(GET用) const getLambda = new lambda.Function(this, 'GetLambda', { runtime: lambda.Runtime.PYTHON_3_9, handler: 'get.handler', architecture: lambda.Architecture.ARM_64, // ここを追加 code: lambda.Code.fromAsset('lambda'), environment: { TABLE_NAME: table.tableName, }, }); GravitonはAmazonが独自設計したARMベースのプロセッサ 高いパフォーマンスと低コスト、低消費電力が特徴
© SEEDS Co., Ltd. All rights reserved. 33 EX) Lambdaのアーキテクチャを
Graviton(ARM64)に 2/2 > npx cdk diff // 手元のCFnとデプロイされたCFnの差分を表示 Resources [~] AWS::Lambda::Function GetLambda GetLambdaXXXXXX └─ [+] Architectures └─ ["arm64"] [~] AWS::Lambda::Function PostLambda PostLambdaXXXXXX └─ [+] Architectures └─ ["arm64"]
© SEEDS Co., Ltd. All rights reserved. 34 CDKハンズオン環境の削除 >
npx cdk destroy 削除していいか聞かれますので y で返答してください。
© SEEDS Co., Ltd. All rights reserved. 35 SaaS ハンズオン環境構築
© SEEDS Co., Ltd. All rights reserved. 36 CDKハンズオンのコードを用意 >
git clone https://github.com/papi-tokei/saas-reference-architecture-ecs-deploy.git Code Editor上でフォルダを開く → > cd saas-reference-architecture-ecs-deploy > npm i
© SEEDS Co., Ltd. All rights reserved. 37 SaaSハンズオン環境構築 1/4
lib/saas-reference-architecture-ecs-deploy-stack.ts L28-34 build: { commands: [ 'cd scripts', './build-application.sh', './install.sh <ここにメールアドレスを入れる >' ], }, ⚠必ず受信できるメールアドレスを入力してください ⚠
© SEEDS Co., Ltd. All rights reserved. 38 SaaSハンズオン環境構築 2/4
> npx cdk deploy この内容でデプロイしてOKか聞かれますので y で返答してください。
© SEEDS Co., Ltd. All rights reserved. 39 デプロイ中にまとめ 座学編から一部抜粋
© SEEDS Co., Ltd. All rights reserved. 40 SaaSハンズオン環境構築 3/4
© SEEDS Co., Ltd. All rights reserved. 41 SaaSハンズオン環境構築 4/4
© SEEDS Co., Ltd. All rights reserved. 42 ありがとうございました! コメントやワイワイは
#jawsug でお待ちしております
© SEEDS Co., Ltd. All rights reserved. 43 [付録] cdk
deployの裏で何が動いているのか