builderscon2017/ここが辛いよサーバーレス。だが私は乗り越えた
#builderscon2017
@yamitzkyさん
Python
Scala
JavaScript
機械学習
の人
SW-4502-0393-0145
akix.icon感想
実運用されている構成を丁寧に解説してもらえたので分かりやすくてよかった
WAFに乗せるとどこでも動いていいよね、というのがおもしろかった
-.icon
サーバーレスの全体図
今日話す範囲の定義
Function as a Service
AWS Lambda
Google Cloud Functions
Aszure
Managed
S3
ホムペ配信とか
Kinesis
API Gateway
今日は全体を含めていく感じ
JX通信社のサーバーレスログ基盤事例
ログ基盤・APIで1年半ほど運用
Kinesis
API Lambda
S3
Athena
BigQuery
サーバーレスの特徴
従来のアプリケーションに比べてインフラ・リソースに対する関心が少なくて済む
リクエスト時にだけリソースを確保すればいいので安くなる傾向がある
マネージドを組み合わせてアプリケーションを組み立てる
リソースを事前確保しない、実行時にリソース確保
最初の問題
$ sip install numpy
Unable import moduleみたいなエラーが出る
「Macで数学的計算をする」->「numpy」という組み合わせが間違ってる
FaaSは普通Linuxで作られている
numpyはコンパイルが必要なライブラリ
コンパイルが必要なものをMac/Windowsで作ってもLinuxでは動かない
Dockerを使おう
アプリケーションはDocker上で作り、生成物は$ docker cpしてデプロイ
Apexやserverlessなどのデプロイツールを使うとより良い
Apexがオススメ
イメージにAmazon Linuxのドッカーイメージを使うと最高
CやRustやGoなどのコンパイルしたバイナリでもLambda上で動かせる
つまり、Linux上でコンパイルするのが大事!!
サーバーレスはマネージドを組み合わせる
S3/DynamoDBはOSSではない
CIやローカル開発で困る
マネージドをシミュレーションしたOSSを使う
DynamoDB Local
fake-s3
etc.
この手のがDockerイメージとして提供されている
DynamoDB本番で使うようなUXが得られる
本家をテストに使っちゃダメなの?
☞ 問題があったりする
お金
権限
ネットワーク
デバッグのしやすさ
ローカルに存在しないAPI Gatewayをどうデバッグするか
☞今まで通りのフレームワークでつくる
WAFをLambdaで動かすアダプターを使う
既存のフレームワークon Lambda
awslabs/aws-serverless-express
slank-awsgi
Miserlou/Zappa
ここまでのまとめ
Dockerを活用して、ローカルとサーバーレス環境の差分を減らそう
既存のフレームワークに乗っけてAPIを作ろう
Lambdaは突然の死がある
Lambda 突然の死対策
Lambdaでもローカルでも動くようにしておけば、オンプレでも動くようになる
WAFやWSGIの上に乗せればグッド
Kinesis突然のエラー
1週間祈ったら直った
エラーのあるレコードが1週間経ったらスキップされた
マネージドの障害は存在しうる
障害に備え有償サポートに契約しておくとよい
真に乗り越えるサーバーレス
マネージドゆえの限界
現実「サーバーレス=クラウド祭り」になってる
Building Serverless Apps with Docker
https://blog.docker.com/2016/06/building-serverless-apps-with-docker/
マネージドとサーバーレスの使い分けが大事
Q&A
同時実行数の上限とかを考えなきゃいけないのはどう乗り越えているか
アラートをCloudwatchで監視
実行数超えそうになったらどうするかはAWSの人にお願いする
お願いすると上げられるはずだが、まだぶち当たったことはない
計算リソースは別のデータセンターに移せるのは分かったが、障害あった時にDBとかはどうするか?
DynamoDBとか使ってると、障害起きるとどうしょうもない面はある
どこまで許せるかを考えると、例えばキャッシュとして利用できるとかなら良いかとか
リージョンにまたがっての障害はあまり無いので、環境変数でリージョン変えられるようにするとかはやってる