Slide 1

Slide 1 text

©アイレット株式会社 第四開発事業部 第三開発セクションリーダー 西田 駿史 2024/03/01 AWSのサーバーレスで とりあえず開発をはじめてみた時に 無知ゆえに陥りがちなこと

Slide 2

Slide 2 text

講師⾃⼰紹介 2 n ⻄⽥ 駿史 • 第四開発事業部 第三開発S セクションリーダー • SES ⇒ SIer ⇒ エンジニア、PM、マネジャー • 2019年4⽉アイレット⼊社 • 登壇久しぶりなので頑張ります🔥 • 最近AWS、GC両⽅全冠しました👑👑 danishi

Slide 3

Slide 3 text

アジェンダ 3 n今⽇話すこと • AWSのサーバーレスで開発をした時のハマりどころいくつか • どうやってサーバーレスの制約を回避するか ※バックエンドをAPI Gateway + Lambda + DynamoDBでSPAの仕組みを 作った時の経験を元に話します

Slide 4

Slide 4 text

AWSのサーバーレスで とりあえず開発をはじめてみた時に 無知ゆえに陥りがちなこと 4

Slide 5

Slide 5 text

サーバーレスじゃない時(LAMPとか) 5 チャレンジング (無茶)な要件 トリッキーな 実装 開発中の 仕様変更、追加要望 だいたいなんとかなる(なお現場は) 重たいバッチを ぶん回す

Slide 6

Slide 6 text

サーバーレスの時 6 サーバーレスアーキテクチャは メリットも多いが制約も多い チャレンジング (無茶)な要件 重たいバッチを ぶん回す (⼯夫や制約を受け⼊れないと) なんとかならない トリッキーな 実装 開発中の 仕様変更、追加要望

Slide 7

Slide 7 text

Lambdaを使う時の制約 7 n Lambdaの実⾏環境は起動ごとに⽴ち上がって(再利⽤もされるが)終わると破棄される n ⼀時ファイルを作って他のプログラムと共有するような実装はデータストアサービスと組 みわせなければできない (Lambdaだけでは)状態を持てないためステートレスな仕組みにする必要がある 最⻑15分の実⾏時間の制限がある n 15分で終わり切る処理しか作れない⇒バッチ処理に不向き n Step FunctionsやSQSを利⽤して処理を分割して実⾏する n GlueやECSなど処理時間の制約が厳しくないサービスを利⽤する ※他にも同時実⾏数とかコールドスタートとか

Slide 8

Slide 8 text

API Gatewayを使う時の制約 8 n リクエストを受けてから29秒以内にレスポンスを返さないと504エラー 最⻑29秒で統合タイムアウト n Lambdaの送受信ペイロード上限が6MB n ⼤きなファイルを直接POSTできない n Step FunctionsやSQSと組み合わせて⾮同期に。(CSV Imp/Expとか要注意) リクエスト、レスポンスのサイズ制限 n S3を利⽤する • AWS SDK for JavaScriptからS3にアップロード、APIにはパスだけ渡す • レスポンスはS3の署名付きURLを返す

Slide 9

Slide 9 text

DynamoDBを使う時の制約 9 簡単にLambdaから呼び出せるからよくDBに選定されがち。でもちょっと待ってNoSQLは曲者。 IUUQTEPDTBXTBNB[PODPNKB@KQBNB[POEZOBNPECMBUFTUEFWFMPQFSHVJEFCQHFOFSBMOPTRM EFTJHOIUNMCQHFOFSBMOPTRMEFTJHOWTSFMBUJPOBM

Slide 10

Slide 10 text

DynamoDBを使う時の制約 10 それでもパフォーマンスが良いので⼒技でなんとかなることもあるけど DynamoDBが適さないところでは素直に他のDBを使おう。最近出たZero-ETLが光明になるか。 n PK、SKおよびLSI、GSIを設定していない、できない箇所では検索(クエリ)及びソートが DynamoDBの機能では(効率的に)できない。 • 検索とソートの属性を合わせる。複合検索、複合ソートは不可。 • フィルターを使ってもコスト、速度は上がらない。 • ページングは次の検索キーを返すためフィルターやプログラムで結果を捏ねると使えない n 論理削除の実装が難しい n JOINがないのでN+1問題発⽣しがち、回避のために⾮正規化するのも⾟い n トランザクションはあるが100アイテムまで n 連番キーはホットスポットになるためアンチパターン

Slide 11

Slide 11 text

まとめ 11

Slide 12

Slide 12 text

まとめ 12 n サーバーレスアーキテクチャはメリットも多いが制約も多い n サービスの特性、制約をよく理解して、他のサービスと組み合わせる n できるだけ上流⼯程で防ぐ、下流でも柔軟さを確保したプロジェクト推進を