1 of 17

API-Gateway+LambdaでサーバーレスWeb APIを作って実際どうだったか

susumuis

2017/11/21 BPLL

2 of 17

おまえだれよ?

Webエンジニア(2004年頃〜)

ただのメイドカフェ好き(2015年〜)

メイドカフェでノマド会主催者(2016/11〜)

株式会社ビープラウドの人(2016/12〜)

Pythonでデータ分析、機械学習系のことがちょっとだけ分かる人(2017年〜)

3 of 17

メイドカフェでノマド会とは

メイドカフェは最高のノマド環境であることを伝える

平日日中にメイドカフェに集まって「仕事をする」会

たまに夜や土日にもする

メイドカフェを貸し切ることも

独自メイドカフェイベントやった!

メイドカフェで勉強会や読書会も開催予定!←New

4 of 17

メイドカフェでノマド会とは

5 of 17

あるサイトの想定トラフィック量

■想定最大風速: 460 [access/second]

■月間平均: 18.5 [access/second]

6 of 17

もし普通に構成したら

- Load Balancer, APサーバー, memcached, DBサーバー2台... 5〜10万/月くらい?

7 of 17

よくあるサーバーレスWeb APIの構成で提案

Aurora

API Gateway

Lambda

※性能はクエリキャッシュに期待する

8 of 17

サーバーレスの見積もり方 (API 呼び出し回数が大きく響く!)

APIGateway: 4.25 USD / 100万回 + データの送出 0.14 USD/GB (最初の10TB)

- 18.5 PV / sec * 2 API Call / PV�� → 4.25USD * 40 * 3600 * 24 * 30 / 100万 = 408.0 USD / mon� - + データ送出分の料金 3KB / req として 0.14 * 288GB = 40 USD

- 合計 USD: 448 = 5万くらい(呼び出し回数が大きく響く!)

Lambda: 割当メモリ1GB-秒あたり 0.00001667 USD、(無料枠 400,000 GB-秒)

- 割当メモリが512MBで、1APIが平均0.2秒でレスポンスしたとする� - 480万 GB-秒 / mon

→ 440万 * 0.00001667 = 73 USD / mon

合計:6万円くらい ←あまり安くない!  ただしこれは、最大時想定なので、平均すると半分として提出

9 of 17

(先にネタバラシ)実際は。。。繁忙期・閑散期がある

- 15USD で収まってしまった!! ※API Gateway Lambda部分

- なぜ?想定の1/30しかPVがなかった

- プログラミング努力の結果:見積もりの10倍高速!!� => Lambda分無料枠内に収まってしまった

10 of 17

どんなプログラミング技術を採用したか?

- Python 3.6

- Zappa + Flask

- SQLAlchemy (クエリービルダーとして + 接続プールとして。 ORMとして)�

- とはいえ、その時々で最適な技術は変わっている可能性があるので注意!

11 of 17

待って!Lambda + RDS はアンチパターン?

  • ざっくり言うと:
    • VPC 10秒の壁がある (ENI生成)
    • スケールしない
    • Dynamoを使え!

12 of 17

大丈夫!

Lambda

Aurora

token / SSL

IAM Role

pool

... 2桁msec達成できた!

20PV/sec さばけた!\(^o^)/

13 of 17

開発で辛かったこと

- Zappaに任せればAWSをいい感じに設定してくれる? → No!!

- 権限周り:IAM設定が鬼!

- コマンドが延々エラー(;´Д`) どこで上手く行かなかったか分からない

- AWSの設定(Consoleポチポチ)を完全にコードに残すことは難しい Aさんはできたのにな...

- かといってCloud Formation、Ansibleでの完全構築自動化は1回限りの構築ではPayしない

→想定工数の、30%増しくらいになった。。。「プログラミング工数」以外での工数が多かった

14 of 17

リリース後どうなった?

- オープン後50日� エラーステータス: 0回� 一度もAlarm鳴らず!!平均レスポンス速度:� 55msec - 65msec� 瞬間最大: 7500 req / min

- アクセスが多いほど安定!?

リリース前はこのあたりでわりとブーブー鳴った!! (‘o’;

瞬間最大風速の瞬間、APIは高速になっている!!

15 of 17

サーバーレスを使う時の注意 (開発工数↑ / 保守工数↓)

開発工数: IAMの知識が豊富に必要になる

が、普通のエンジニアはそこそんなに詳しくないはず� → プログラミング以外のところで工数増大!

サーバー代金: 一見安くなさそう!

呼び出し回数でほぼ正確に見積り可能!� スケールアウトを考慮すると、結果安めになると思う� (←「言ってもそんなに行かないでしょう?」。。。。保証出来ないから言えない

大規模の場合、ネットワーク構築コストを考えるとマシかも!

保守コスト: とても楽! ミドルウェアやOSレベルのメンテ・監視不要はでかい!!

16 of 17

サーバーレスを案件で採用するなら

- これをやったら赤字: - 開発を従来サーバー想定で見積もり(←要件定義と並行だったりするとふわっとしてる)� - 保守をサーバーレス想定で見積もり(←開発の中盤以降に見積もるとわりと正確に見積もれる)

- でも、お客さんにとって良いものサーバーレスが適用できるなら積極的に利用したい

- 保守コスト低下分、設計・開発にオーバーヘッドがかかることを理解してもらう

- 日頃から AWS, GCP, Azure を使って、使い方に慣れておく- 特にIAM(権限)周りを重点的に理解する

17 of 17

質疑応答

Q. LambdaなのになぜConnection Poolができるのか�A. Lambdaとはいえ内部的にはEC2があるんだろう、なので生きてくる

Q: 開発のオーバーヘッドは繰り返したら減るの?�A: 同じ技術を使うなら。� ただし次々に新しい技術が出ているので、それを利用しようとしたら同じ