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
40分で分かる DynamoDBでのApp開発
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
oranie
October 03, 2019
Technology
580
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
40分で分かる DynamoDBでのApp開発
DevDay Tokyo 2019での発表資料です。実際のセッションではサンプルコードと一緒に解説をした旨了承ください。
oranie
October 03, 2019
More Decks by oranie
See All by oranie
Amazon DynamoDB Deep Dive at AWS Loft Tokyo 2023/9/28
oranie
0
250
Amazon DynamoDB Deep Dive
oranie
0
87
Apache Cassandra on AWS
oranie
1
810
Other Decks in Technology
See All in Technology
PLaMoを毎日の開発で使い育てていく
pfn
PRO
0
180
[MIRU26] Open-Vocabulary Intention-Guided Object Detection in Diverse Scenes
keio_smilab
PRO
0
110
Issue設計から始める仕様駆動開発 / 20260731 Mizuki Hirata
shift_evolve
PRO
1
110
侵入は突然に 〜 IoTマルウェアと悪用される家庭の機器 ~ / When Intrusion Strikes: IoT Malware and the Abuse of Home Devices
nttcom
0
1.3k
AIエージェントの知識表現と推論に なぜグラフが使われるのか - 記号的AIの復権とニューラルAIとの統合
yohei1126
1
260
セキュリティ研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
33
28k
組織にどうSREを根付かせるか?〜IVRyの場合〜
abnoumaru
0
290
【Google Cloud Next Tokyo'26】Gemini Enterprise と Oracle AI Database で実現する、業務データ活用を実現する AI エージェント実装
shisyu_gaku
0
180
Cursor Meetup Sapporo - Cursor物語 続編
cocacola917
0
100
認知負荷をGemini で溶かす — GKE 基盤「Orbit」における AI エージェントの実践
sansantech
PRO
1
200
第3回しろおびセキュリティスポンサーセッション
log0417
0
120
BigQuery を検索ソースとした AI Agent の作り方って 〇〇 通りあんねん
satohjohn
0
150
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Facilitating Awesome Meetings
lara
57
7.1k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
400
Become a Pro
speakerdeck
PRO
31
6k
Claude Code のすすめ
schroneko
67
230k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Odyssey Design
rkendrick25
PRO
2
740
A Tale of Four Properties
chriscoyier
163
24k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
240
Embracing the Ebb and Flow
colly
88
5.1k
Transcript
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. 40分で分かる DynamoDBでのApp開発 Follow @DynamoDB on
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. 自己紹介 • 成田 俊 id:oranie • 経歴 – 前職のWeb系会社でインフラエンジニアを担当、主にMySQLや Cassandraの運用などに携わる – Cassandra summit JPN 2014, 2017 スピーカー登壇 • AWSJでの担当 – NoSQLサービス、DynamoDBをメインに技術支援を担当
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. © 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Amazon Confidential and Trademark はじめに
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. • Introduction to Amazon DynamoDB • ちょっとしたAppをどう作ったか見てみる • CIをどうするか • まとめ 今日の流れ
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. • あくまでも開発はじめ • どのライブラリを使うかとか開発環境構築について • 好きな環境、好きな言語でaws-sdkをベースに好きなlibを • Amazon DynamoDB Accelerator (DAX)クライアントを使うか • 2019/9/30 時点でJava、Javascript、.NET、Python、Goがサ ポート • データモデリングのベストプラクティス、Tips、パターン • Advanced Design Pattern Amazon DynamoDBなどのコンテンツ を是非 今日細かく話さないこと
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. © 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Amazon Confidential and Trademark Introduction to Amazon DynamoDB
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. Amazon DynamoDB Fully managed nonrelational database for any scale 高速で一貫した性能 事実上無制限のスループット ストレージ容量も制限なし 通信と保存データの暗号化 柔軟な権限管理 PCI, HIPAA, FIPS140-2など認証 SLAの提供 メンテナンスフリー サーバレス Auto scaling バックアップ/リストア Global tables
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved.
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. メンテナンスフリー もしこれらを管理するコストが無ければ他に何が出来るか? セキュリティ OSパッチ適用 DBパッチ適用 アクセスコントロール 監査 暗号化 コンプライアンス対応 耐久性 サーバ, ラック, データセンタ維持 HW障害に伴うデータコピー バックアップ・リストア 可用性 高可用性を実現する設計 モニタリング クロスリージョンレプリケーション 性能 パフォーマンスチューニング インデックス設計、作成 In-memory上でキャッシュ維持 拡張性 キャパシティプランニング ホスト構築、投入作業 障害ホストの修復、撤去作業
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. Table構造 Table Items Attributes Partition Key Sort Key 必須 Key-value access pattern データの分布を決定 オプション Model 1:N relationships Queryによる幅広い探索で利用 All items for key ==, <, >, >=, <= “begins with” “between” “contains” “in” sorted results counts top/bottom N values
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. Partation keyのみ sort key なし Partition Key
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. Partation keyと sort key両方あり Sort Key Partition Key
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. NoSQL Workbench for Amazon DynamoDB(preview) • Data modeler • Visualizer • Operation builder の3つの機能を提供 GUIによるデータモデルの構築、視覚化、デー タ操作を支援 Win/Mac共に対応 オペレーションと同じ処理をするコードを生成 する機能も対応(現在Python,Javascript,Javaに 対応予定)
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. Operation builder Build operationsでは • Update Item • Put Item • Delete Item • Query • Scan • TransactWriteItems の操作が可能 それぞれの操作で必要なオプションを設定する 事も可能 複数条件などの設定も可能
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. © 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Amazon Confidential and Trademark Sample App 解説
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. デモアプリ全体構成 Amazon DynamoDB AWS Lambda Amazon API Gateway AWS Cloud ※Chalice frameworkで作成
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. チャットを実現させるために • Commentの書き込み • 最新25件のComment取得 • 全てのComment取得 • 時系列位置を指定して取得 という操作と、データ構造としてリアルタイムチャットなの で時系列を表現するデータと名前、コメントデータがあれば 簡単なリアルタイムチャットが実現出来る、と仮定 デモについて
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. 例えばRedisだったら • Stream型 XADD、XRANGE、XREVRANGE を使うと今想定 している機能は実現出来る • 実装例 : xadd(chatroom_id, *, name, name_value, comment, comment_value): • SortedSetでも実現は可能 • 実装例:zadd(chatroom_id(key), unixtime(score),コメントデータ (member)) • Primary keyはchatroom_idをkeyとして書き込む 実現するには?
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. DynamoDB • RedisのStream型、SortedSet型と同じような形式をそのまま当 てはめて表現することも出来るが、DynamoDBの特性を活かし より書き込みに対してスケーラブルなパターンを今回想定 実現するには?
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. Table ‘name’: name, ← PK ‘time’: now, ← SortKey 'comment': comment, 'chat_room': chat_room DynamoDB側のモデリング解説 GSI ‘name’: name, ‘time’: now, ← SortKey 'comment': comment, 'chat_room': chat_room ← PK Tableの構造だけではchat_room指定のQuery探索が出来ないので別途GSIを作成 • あえてchatroom_idをpartition keyには採用しない • 今回はカーディナリティが高いnameをpartition keyに採用
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. DynamoDB側のモデリング解説(Table)
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. DynamoDB側のモデリング解説(GSI)
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. Table ‘name’: name, ‘time’: now, ← SortKey 'comment': comment, 'chat_room': chat_room ← PK 書き込みが少ない時は問題無いが、多くなってきた時に単一 chat_roomへの負荷が多いとスロットリングに引っかかる可 能性が はじめからGSI側のモデリングで良いのでは?
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. Table ‘name’: name, ← PK ‘time’: now, ← SortKey 'comment': comment, 'chat_room': chat_room DynamoDB側のモデリング解説 GSI ‘name’: name, ‘time’: now, ← SortKey 'comment': comment, 'chat_room': chat_room ← PK もし読み込みが増えてきたらGSIをDynamoDB StreamsとRedisを組み合わせて 負荷をオフロードする事で永続化と参照負荷対応を分離する、全文検索なら Elasticsearchに入れるなどユースケース違いも対応
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. • Commentの書き込み • putItem:念の為existing check付与 • 最新25件のComment取得 • Query: chatroom id指定かつ時系列降順最大25件の条件付き • 全てのComment取得 • Query:chatroom idのみ指定 • 位置を指定して取得 • Query:chatroom id 指定かつ時系列の指定時刻より少ないものを 指定 実際のコードで確認を デモについて簡単な解説
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. Redisなどとの組み合わせパターン Amazon DynamoDB Amazon ElastiCache AWS Lambda DynamoDB Streamsの更 新データを取得 更新データを元にXADD or ZADDなど コメント書き込み コメント読み込み やPub/Sub
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. def handler(event, context): 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 new = event['Records'][0]['dynamodb']['NewImage’] 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 〜 userId = new['UserId']['S'] newScore = new['Score']['N'] gameId = new['GameId']['N'] t_stats = '{"userId":"%s", "newScore":"%s", "gameId":"%s"}¥n' % (userId,newScore,gameId,) print(t_stats) rc.zadd(gameId,newScore,userId) print("ranking data is ",rc.zrange(gameId,0,1)) response = boto3.client('kinesis').put_record( StreamName = 'ranking', Data = t_stats, PartitionKey = userId, ) Lambda側実装例 handlerが受け取ったdynamodb streamsの eventから、新しいデータを取り出す 新しいデータをredisに書き込む dynamodb streamsのeventを別のStreamsに投 げる事でData Lakeに連携させる事も容易に可能
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. © 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Amazon Confidential and Trademark CIをどうするか
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. CI(テスト)をどうするか? App DDB Table Build project Container App Build project Container OK ? NG ?
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. CI(テスト)をどうするか? • Table名をbuild projectご とに分ける • 並列に実行されるbuildが少 なければ問題なし • 多いとアカウントあたりの limitに抵触するかもしれない • DynamoDBでの制限、API 固 有の制限などに記述 App DDB Table Build project Container App Build project Container DDB Table
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. CI(テスト)をどうするか? App DDB Local Build project Container Container App+DDB Local App+DDB Local App+DDB Local App+DDB Local development / pull req STG release
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. CI(テスト)をどうするか? • CodeBuild、CircleCI、 GithubActionsでそれぞれ 同じテストを実行するため のサンプルを紹介 • AppとDynamoDB Localの コンテナを同一build projectで同時起動 • 同一コンテナ内に DynamoDB localプロセス を同居 App DDB Local Build project Build project Container Container Container App DDB Local
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. © 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Amazon Confidential and Trademark まとめ
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. • DynamoDB開発でデータモデリング、Item操作の記述に 迷ったらNoSQL Workbench for Amazon DynamoDBでテス トを • DynamoDB StreamsなどでDynamoDBと他のコンポーネン トを組み合わせるなどもアーキテクティングでは重要 • CIなどDynamoDB Localで担保する部分との使い分けでより リーズナブルに まとめ
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved.
© 2019, Amazon Web Services, Inc. or its affiliates. All
rights reserved. アンケートご協⼒のお願い お⼿持ちの受講票のアンケート⽤QRコードから アンケートにお答えいただくと、記念品を差し上げております。 ※イメージです プレゼントの引き換えは、神⽥明神の会場出⼝付近(屋外)までお越しください IT情報安全守護
2019 年 10 ⽉ 1 ⽇〜11 ⽉ 5 ⽇開催 amzn.to/AWSInnovateJP
申し込み受付中 AWS 最新アップデート / コンテナ / AIML / AWS アンチパターン / 認定試験対策講座など 60セッション オンラインで参加できるカンファレンス、全 60 セッション 10/9, 10/15 ライブ配 信 AWS エキスパートへの Q&A 修了証明書の発⾏ 業務時間に視聴
2019 年 10 ⽉ 1 ⽇〜11 ⽉ 5 ⽇開催 amzn.to/AWSInnovateJP
Application Development Container Serverless オンラインで参加できるカンファレンス、全 60 セッション おすすめセッション
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved. Thank you!
© 2019, Amazon Web Services, Inc. or its Affiliates. All
rights reserved.