Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Clojure on AWS Lambda 2016-05-31 fumihiko hata
Slide 2
Slide 2 text
自己紹介 @hatappo server side engineer Java, Ruby, stylerecipe, inc. ファッション相談&ファッションレシピのモバイルアプリ「sutarepi」
Slide 3
Slide 3 text
モバイルアプリ「sutarepi」 ● コーディネートやファッションについて、プロのスタイリストに相談。 ● 手持ちの洋服からコーディネートを考えるためのレシピ。これもプロのスタイリ ストが作成してる。 サービス
Slide 4
Slide 4 text
使っている技術 client side iOS App with Titanium → Android app & new iOS app is comming soon. server side PHP5, CodeIgniter AWS, WindowsAsure
Slide 5
Slide 5 text
サーバーサイド ● もともと外注。自分が入社するくらいに内製に切り替わった。 ● データ設計 ○ カーディナリティが 1 のカラムがたくさんある。 ■ created_by や updated_by といったカラムが散見されるが、固定文字列がただただ入ってい たり ○ ステータス系のカラムが多く、複雑で不明瞭な状態遷移。 ● テストコード ■ ない。まれに見かけるが、プロダクトのコードと同じファイルにあったりする。 ● パッケージ管理 ■ ない。最近のPHPだとcomposerとか。
Slide 6
Slide 6 text
商品Crawling ● 提携ECサイトの商品情報を毎日クローリングし、格納している。 ○ コーディネートの作成や、相談の回答に使用できる。 ○ ファッション・レシピの素材に使用できる。
Slide 7
Slide 7 text
商品Crawling::相談
Slide 8
Slide 8 text
商品Crawling::レシピ
Slide 9
Slide 9 text
商品Crawling クローリング処理は、(また別の開発会社の)外部システム上で稼働し、日次でCSVが納 品され、弊社のDBにインポートされる。 しかし、クローリングから漏れている商品が、ある。 ● 商品情報を手動で追加&編集する方法がなかった。 → AWS LambdaとAPI Gatewayで作ることに。
Slide 10
Slide 10 text
AWS Lambda AWS Lambda は、コードを AWS Lambda にアップロードすると、サービスが AWS インフラストラクチャを使用してコードの実行を 代行するコンピューティングサービスです。コードをアップロードして、Lambda 関数と呼ばれる関数を作成することで、AWS Lambda がコードを実行するサーバーのプロビジョニングおよび管理を行います。AWS Lambda は次のように使用できます。 https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html
Slide 11
Slide 11 text
AWS API Gateway 簡単に API の作成、配布、保守、監視、保護が行えます。AWS マネジメントコンソールで数回クリックするだけで、 Amazon Elastic Compute Cloud (EC2) で稼働中のワークロードや、AWS Lambda で稼働中のコード、または任意の ウェブアプリケーションといった、バックエンドからのデータ、ビジネスロジック、機能にアクセスする、アプリケーション の玄関として振る舞う API を作成できます。 100 万回の API 呼び出しの受信につき 4.25 USD のレートに、データの送出の費用がギガバイト単位で加算されま す。 https://aws.amazon.com/jp/api-gateway/
Slide 12
Slide 12 text
商品Crawling::マニュアル登録 1. 管理画面に、商品を入力&編集画面(new) 2. 登録したい商品ページを入力すると、 3. スクレイピングAPIサーバ(new)にURLを送信。 4. APIサーバはリクエストされた商品ページをスクレイピングして返す。 5. 画面は、レスポンスをフォームに入力。 既存のサーバのコードにこれ以上機能を追加したくなかったので、スクレイピング機能 自体は分離した。
Slide 13
Slide 13 text
No content
Slide 14
Slide 14 text
商品Crawling:: クローラ ● 商品情報(〜数十万件/ECサイト)を網羅的にクローリングするバッチもリライトする ことに。 → これも AWS Lambdaで作ることに。
Slide 15
Slide 15 text
商品Crawling:: クローラ 1. Lambadは crontab のようなスケジュール起動が可能。 2. 既に作ったスクレイピング機能のAPIサーバのLambdaの実装を拡張。 3. 2ステップ a. 提携ECサイトから商品ページの URLを収集する。 b. 上記収集したURLを順にアクセスしていって、商品情報を収集し DynamoDBに永続する。 4. Lambdaは実行時間が300秒を超えるとTimeoutする。 → 経過秒数を確認しながら、Timeoutする少し前に次のLambda Functionを起動し て処理がチェーンするように。 (こちらはまだ開発中・・・)
Slide 16
Slide 16 text
● ちょっと、無理があったかも。 ● 仕組みが結構複雑に。 ● Lambda Functionをチェーンするところでなにか起きると無限ループになったり、変 なプロセスが残ったりするかも。。 とりあえず、Clojure on Lambda でサーバアプリケーションもバッチ処理も書けることは 分かった。
Slide 17
Slide 17 text
Tools ● Clojure ○ https://github.com/mhjort/lein-clj-lambda Lambda functionの作成や更新(デプロイ) ○ https://github.com/trieloff/lein-aws-apigateway API Gatewayの設定のImport/Export ○ https://github.com/uswitch/lambada Lambda Functionを簡単に作るためのマクロ ● ClojureScript ○ https://github.com/nervous-systems/cljs-lambda ● Node.js ○ https://github.com/serverless/serverless
Slide 18
Slide 18 text
良かった所 ● デプロイが楽。AWSのAPI叩くだけ。(herokuの方が楽かもしれないが) ● サーバもバッチもLambdaでやれる(ような)。 ● サーバの管理が不要。 ● 安い。アクセスがなければ課金されない。 ○ 課金時間の最小単位 ■ EC2: 3,600,000ms ■ Lambda: 100ms (1/3万6000)
Slide 19
Slide 19 text
良くなかった所(1)::First call penalty ● コンテナの起動が必要な1リクエスト目がとても遅い。特にJVM。
Slide 20
Slide 20 text
良くなかった所(1)::First call penalty http://numergent.com/2016-01/AWS-Lambda-Clojure-and-ClojureScript.html
Slide 21
Slide 21 text
良くなかった所(1)::First call penalty ● メモリ割り当てを増やせばある程度は対処できるが、それだと値段も上がる。
Slide 22
Slide 22 text
良くなかった所(2)::Testing API Gateway ● API Gatewayをモックするローカルツールがないので、テスト難しい。 (Lambdaは単なる関数なので、ローカルでテストは容易) ただし、設定をswaggerでExport/Importできるので何かできるかも。 あるいは、そのうちAWS側から出てきそう。
Slide 23
Slide 23 text
No content
Slide 24
Slide 24 text
良くなかった所(3)::パッケージ容量制限 ● Lambda 関数デプロイパッケージのサイズ 50 MB ● デプロイパッケージに圧縮できるコードのサイズ 250 MB ● リクエストあたりの最大実行時間 300 秒 → 長いバッチ処理は素ではできない。 ● 同時実行数上限のデフォルト値 100 ■ ※ 申請で拡張可能。 https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/limits.html
Slide 25
Slide 25 text
まとめ Clojureを小さく導入するのに Lambda が便利(AWSを使っている場合に限る)。 ただし、制限が多い。
Slide 26
Slide 26 text
以上です。 ありがとうございました。