Wantedly API Gateway速習会
Wantedlyで各週で速習会をやっています
- 外部に公開していく、ということで社外の方にも参加してもらっています
講師
- Yohei Sugigami
- WantedlyでiOSエンジニアやってます
- Advent CalendarでServerless記事を書きました
環境準備5分、Lamba/API Gatewayの説明15分、ワークショップ20分、Serverless説明5分・WS40分
Lambdaとは
- クラウドコンピューティング
- 計算資源がネットの向こうにある
- Lambda Functionをデプロイするだけで動作
開発チームは本質的なプロダクトの開発にフォーカスできる
- 運用上のコストがコードだけに
利用可能言語
- node.js 0.10.36
- Java8
- Python2.7
制限
- 最大300秒
- 50MB
- 入出力6MB
- メモリ1.5GB
実行方法
- 1秒あたり数千リクエストまで自動スケール
- 無限呼び出し防止
- 同時実行数がデフォルト100で制限
- 変更可能
- Lambdaコードのロード
- 価格
- 処理時間×メモリ確保量+データ転送
- 100ms単位
- 128MB~1536MB
- RAMに比例してCPUもUP
- 128MB*100万回→0.2USD
- 1GB*100万回→1.68USD
- Hello worldのjsで30MBくらい
- 無料枠: 100万回・400000GB /月
- 1年たっても無料枠が消えない
- Pros
- 安価
- リクエスト単位なので、デプロイ自体はタダ
- 環境いくら用意してもかからない
- 運用メンテコストが低い
- 自動スケール、限界が高い
- Cons
- した2つはServerlessで解決できそう
- ユースケース
API Gateway
- 簡単にAPIの作成、配布、保守、監視、保護が行える
- プロキシみたいな
- 基本機能
- オプション
- 値段
- 100万回で4.25USD
- 10TB分まで0.14USD/GB、以降割引(CFと同じ)
- キャッシング(オプション) 0.5GBは0.2USD/月
Serverless
- '15 8月にJAWS
- '15 12月にissueを全部無視して、下位互換のないServerlessにリニューアル
- 3日前に0.1.0リリース、0.0系とのマイグレーションができないくらい破壊的変更があった
- 互換についてはかなりアグレッシブ
Project Structure
- _meta
- resources ... CFnテンプレート
- variables ... STG環境での設定など
- admin.env
- AWScreds
- package.json
- デプロイするときのライブラリ
- s-project.json
- Lambdaの設定 メモリ容量など
ロジック
- handler.jsでなく、lib/配下
- エンドポイント複数について、なるべくLambdaは同じ方がキャッシュが利きやすい
- データが大きすぎるとロードが長くなるのでバランスを見て
3818 2016-01-21 19:34 npm i -g serverless 3820 2016-01-21 19:37 serverless 3821 2016-01-21 19:37 serverless -v 3822 2016-01-21 20:03 serverless project create 3825 2016-01-21 20:04 mkdir serverless-study 3826 2016-01-21 20:04 cd serverless-study 3827 2016-01-21 20:04 serverless project create 3828 2016-01-21 20:07 cd serverless-2k0ri 3830 2016-01-21 20:09 serverless component create 3831 2016-01-21 20:10 serverless function run nodejscomponent/api/hello 3839 2016-01-21 20:12 serverless function create 3845 2016-01-21 20:18 serverless function run nodejscomponent/api/fetch 3846 2016-01-21 20:19 serverless function run nodejscomponent/api/hello 3848 2016-01-21 20:20 serverless dash deploy 3850 2016-01-21 20:21 serverless dash deploy 3851 2016-01-21 20:21 serverless env list 3853 2016-01-21 20:22 serverless env set 3854 2016-01-21 20:22 serverless env list 3856 2016-01-21 20:24 serverless run nodejscomponent/api/hello 3857 2016-01-21 20:24 serverless function run nodejscomponent/api/hello 3859 2016-01-21 20:24 serverless function run nodejscomponent/api/hello 3860 2016-01-21 20:25 serverless set env 3861 2016-01-21 20:25 serverless env list 3863 2016-01-21 20:25 serverless function run nodejscomponent/api/hello 3866 2016-01-21 20:26 serverless function run nodejscomponent/api/hello 3867 2016-01-21 20:26 serverless dash deploy 3870 2016-01-21 20:31 sls function run nodejscomponent/api/fetch 3872 2016-01-21 20:32 npm i benscholler/serverless-serve -S 3874 2016-01-21 20:33 sls serve start
- コケた時は
- LambdaかAPIGか、という切り分けからスタート
- エラーメッセージが少ない、"undefined"が返ることさえある
- まだまだServerlessはbreaking changeが起こり得る
- おもしろい技術なのでウォッチする価値はあり
こういう設計のAPIが今後出てくるのではないかなと
APIGはパブリックです
- EDoSを受けると多額の課金が発生する
- 消すか、スロットリング設定ををするか、limitをかけましょう
serverlessは今のところdestroyはなし
slsはAPIG抜きのLambdaだけのデプロイにも使える
- ちょっとでかい、という人はLambdaを送りつけるgulpを作ってる人もいる
対抗WAF:
apex/apex
- goも動くよ
- nodeからバイナリ実行させている
- 1300スターくらい付いてる