Top Banner
AWS Lambda でででで でででででで DB でで API
22

AWS Lambdaで作ったサーバーレスDBレスAPI

Jan 07, 2017

Download

Engineering

Taiki Sakamoto
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: AWS Lambdaで作ったサーバーレスDBレスAPI

AWS Lambda で作ったサーバーレス DB レス API

Page 2: AWS Lambdaで作ったサーバーレスDBレスAPI

このスライドは• 22 枚です

Page 3: AWS Lambdaで作ったサーバーレスDBレスAPI

ホームページ作った (WIP)

• React/Redux + API• コードはhttps://github.com/sambaiz/sambaiz.net(星を押すと運勢が上がる)• 個人のホームページなのでなるべく節約したかった

Page 4: AWS Lambdaで作ったサーバーレスDBレスAPI

必要な API

• GET /articles?p= – 記事一覧 ( 日付の降順、ページング )

• GET /articles/{id}– 記事詳細

Page 5: AWS Lambdaで作ったサーバーレスDBレスAPI

登場するサービス

Page 6: AWS Lambdaで作ったサーバーレスDBレスAPI

EC2

• サーバー

Page 7: AWS Lambdaで作ったサーバーレスDBレスAPI

RDS

• RDB• Amazon 謹製の Aurora が使える• MySQL 5.7 も使える

Page 8: AWS Lambdaで作ったサーバーレスDBレスAPI

一般的な API

• EC2 がリクエストを受け取る• RDS を見にいく• レスポンスを返す

Page 9: AWS Lambdaで作ったサーバーレスDBレスAPI

EC2 を使うと• 監視が必要 ( こわい)• そんなにリクエストこなくて無駄になるリソース(コスト)

Page 10: AWS Lambdaで作ったサーバーレスDBレスAPI

Lambda

• イベント駆動で関数を実行できる• Node.js 4.3.2 が使えるようになった• リクエスト数とコンピューティング時間で課金

Page 11: AWS Lambdaで作ったサーバーレスDBレスAPI

API Gateway

• Lambda を呼んだりする API を作れる

Page 12: AWS Lambdaで作ったサーバーレスDBレスAPI

サーバーレス API

• API Gateway がリクエストを受け取る• Lambda が RDS を見にいく• レスポンスを返す

Page 13: AWS Lambdaで作ったサーバーレスDBレスAPI

RDS を使うと• それなりにコストがかかる ( 個人の感想 )

Page 14: AWS Lambdaで作ったサーバーレスDBレスAPI

S3

• ストレージ• Bucket と Key から Object を保存したり取得したり

Page 15: AWS Lambdaで作ったサーバーレスDBレスAPI

サーバーレスで DB レスな API

• API Gateway がリクエストを受け取る• Lambda が S3 を見にいく– 見にいくオブジェクトはマスタデータを更新

/ 削除したときに自動的に生成しておく• レスポンスを返す

Page 16: AWS Lambdaで作ったサーバーレスDBレスAPI

S3 を使うと• ワイルドカードが使えない– 前方一致は使える

• listObject で取れる順序が辞書順固定

Page 17: AWS Lambdaで作ったサーバーレスDBレスAPI

ワイルドカードが使えない• id と date からなるオブジェクトがあるとして、 Key 名を article-{date}-{id} のようにすると、 article-1-* のようにはとれないので困る• でも前方一致は使えるので、例えば、 article-{date} で listObject すれば、 date のものをまとめて取得することはできる

Page 18: AWS Lambdaで作ったサーバーレスDBレスAPI

listObject で取れる順序が辞書順固定• 今回のように日付の降順で取りたいような場合工夫が必要function orderByDateDesc(date) { let n = (new Date().getTime() + "").length; return (Array(n+1).join("0") + (Math.pow(10,n) – new Date(date).getTime())).slice(-1 * n) } const ID_DATE_KEY = (id, date) => `${ID_DATE_KEY_PREFIX}-${orderByDateDesc(date)}-${id}.json`;

Page 19: AWS Lambdaで作ったサーバーレスDBレスAPI

やること (PUT)

Article bucket Gen bucket

{key}.json (metadat

a)

{key}.md (article detail)

article-id-{id}.json

article-id-date-

{date}-{id}.json

Article-page{pag

e}.json

article-origin-key-to-id-date-{key}.json

実際に API で読むもの

Page 20: AWS Lambdaで作ったサーバーレスDBレスAPI

やること (DELETE)

Article bucket Gen bucket

{key}.json (metadat

a)

DELETED

article-id-{id}.json

article-id-date-

{date}-{id}.json

Article-page{pag

e}.json

article-origin-key-to-id-date-{key}.json

Page 21: AWS Lambdaで作ったサーバーレスDBレスAPI

感想• 結果には満足している

Page 22: AWS Lambdaで作ったサーバーレスDBレスAPI