サーバレスでやった
こと 2018
@sakapun
自己紹介
• 新潟市の農業ITをやっている会社から来ました
• フロントエンドチームとして入社してもうすぐ2
年
• 今はインフラチーム要員としても仕事してます。
今日の題材候補の概略
• 2018年前半の興味はVue
• Vueの初心者向けハンズオンをやった
• 中頃からインフラ人員となったので興味が別に
向いてきた
• サーバレス
• Docker
サーバレスってなに(今回の場合の文脈)
コード書いて動かしたいんだけど、サーバ借りたく
ないなぁというときなど、
サーバの管理不要でアプリケーションを動かすこと
サーバレスの代表的なプロダクト
• Google App Script ※
• AWS Lambda ※
• Google Cloud Functions
• Azure Function
※今日話しするやつ
今年関わったサーバレス〇〇
• 定食屋の日替わりメニューを通知してくれる
ボット
• バイナリデータから画像を加工する
• CORSを回避するためのプロクシ
お手軽なサーバレス
Google App Script
初め方
• スプレッドシート > ツール > スクリプトエディタ
日替わり定食くん
https://bit.ly/2DZjhx0
元URL(https://gist.github.com/sakapun/8657f331224414a05e1cf285ca7d49dc)
日替わり定食くんの解説
• Google App Script製
• スクレイピングを定期実行
• スクレイピング結果をGoogle spreadsheetに保
存し、差分があるかを確認
• 差分があったらチャットワークに通知
解説しておきたいTips、環境変数的なやつ
スケジュール実行
• 1時間おきにした場合、何分に発動するかはラン
ダム。一度決まったらその時間に発動する
Google App Scriptの良いとこ
• Googleアカウントあれば作り始められる
• Spreadsheetをデータソースとして使える
• 定期実行ができる
• APIにもできる
Google App Scriptの辛いところ
• 書き方が独特
• モジュールの入れ方
• 環境変数の扱い方
• Fetchの方法
• JSの文法としては古い
• Array.xxxが全然使えない
• Array Function使えない
• Async、Awaitない
• コードのバージョン管理どうするの?
どうやって乗り越えるか
妥協する
Google App Scriptとの付き合い方
• 書き方が独特 → 慣れる
• Array.xxx がない → lodashライブラリを入れる
• Array Function、asyncがない → 諦める
• バージョン管理が無い(僕は知らない)
→ バージョン管理しなきゃいけないぐらい巨大
なものを書かない
使い所評価
• 単体で動かせて
• 個人で管理できるレベルで
• 他と連携しない
ものにならば、手軽で良い
個人用途ではめっちゃおすすめです。
AWS Lambdaの話
対応言語
New!
New!
AWS Lambda 2018年時点での制約
• 1処理は15分以内(2018年10月発表のため、日本語ド
キュメントはまだ治っていない)
• メモリ量の割当:128MB~3008MB(64MB単位)
• メモリ量=CPUの処理速度にもなる
やってみてわかった環境の差異の話
• Macでモジュールをインストールした場合だと
Lambda上で動かないことがある…
• NodeでCanvasで画像を作る処理
• Windowsだとそもそも通常のzipで固めたものが
動かない…。(AWSは推奨zipツールを使えと言っています)
どうやって乗り越える?
• EC2でzipを作る
• Lambdaの実行環境を模したDocker Image内で作
る
• Lambci/build-nodejs8.10
• Lambci/build-python3.7
やってわかったライブラリ周り
• いつも使ってるライブラリが使いたくなる。
• ライブラリもまとめてzipにして上げる必要がで
る。
• Pythonだとライブラリのサイズがでかい
• 1Lambdaの容量はMax50MB
• PandasとかGdalとか30MB以上になる
最近の発表でライブラリ周りの改善が!
• Lambda Layers
• よく使うライブラリとか先に上げて置くと呼び
出せる
• 公式からとりあえずのサンプル的な位置づけで
PythonのNumpy、Scipyが提供されている
欲しいパッケージだけ集める便利なの作った
• GitlabのCIを使う
• 環境変数に欲しいモジュール名を書いてCIを回
す
• 2分後ぐらいにzipで落とせる!
• https://gitlab.com/sakapun/package-builder
フレームワーク使うという選択肢
• デプロイのために結構強い権限が必要になる。
• 会社のアカウントで振られているIAMだとでき
ない人もいるかも…
AWS SAM
(Server Application model)
Serverless Framework
• テンプレートの数が豊富!
• モダンなJSやTypescriptなんかも選択できる
• 設定ファイルわかりにくい
• 今年仕事で使うことはなかった
• terraform以外の管理方法が増えるのが懸念
まとめ
• ちょっとしたサブシステムには、サーバレス
使っていい感じにできた
• システム全体をサーバレスにするのはなかなか
しんどそう…

サーバレスでやったこと2018