Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Clojure on AWS Lambda

hata
May 31, 2016

Clojure on AWS Lambda

AWS Lambda & API Gateway を Clojure で使ってみた。

(追記2019.11.26)
もうこの資料はだいぶ古いのであまり参考にはならないです。 AWS Lambda の仕様も変わっている(拡張している)部分がいくつかあります。今だと AWS Lambda の Custom Runtime を使ったり、 Graal で静的イメージにしたり、といった方法もポイントだと思います。

hata

May 31, 2016
Tweet

More Decks by hata

Other Decks in Programming

Transcript

  1. 使っている技術 client side iOS App with Titanium → Android app

    & new iOS app is comming soon. server side PHP5, CodeIgniter AWS, WindowsAsure
  2. サーバーサイド • もともと外注。自分が入社するくらいに内製に切り替わった。 • データ設計 ◦ カーディナリティが 1 のカラムがたくさんある。 ▪

    created_by や updated_by といったカラムが散見されるが、固定文字列がただただ入ってい たり ◦ ステータス系のカラムが多く、複雑で不明瞭な状態遷移。 • テストコード ▪ ない。まれに見かけるが、プロダクトのコードと同じファイルにあったりする。 • パッケージ管理 ▪ ない。最近のPHPだとcomposerとか。
  3. AWS Lambda AWS Lambda は、コードを AWS Lambda にアップロードすると、サービスが AWS インフラストラクチャを使用してコードの実行を

    代行するコンピューティングサービスです。コードをアップロードして、Lambda 関数と呼ばれる関数を作成することで、AWS Lambda がコードを実行するサーバーのプロビジョニングおよび管理を行います。AWS Lambda は次のように使用できます。 https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html
  4. 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/
  5. 商品Crawling:: クローラ 1. Lambadは crontab のようなスケジュール起動が可能。 2. 既に作ったスクレイピング機能のAPIサーバのLambdaの実装を拡張。 3. 2ステップ

    a. 提携ECサイトから商品ページの URLを収集する。 b. 上記収集したURLを順にアクセスしていって、商品情報を収集し DynamoDBに永続する。 4. Lambdaは実行時間が300秒を超えるとTimeoutする。 → 経過秒数を確認しながら、Timeoutする少し前に次のLambda Functionを起動し て処理がチェーンするように。 (こちらはまだ開発中・・・)
  6. 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
  7. 良くなかった所(3)::パッケージ容量制限 • Lambda 関数デプロイパッケージのサイズ 50 MB • デプロイパッケージに圧縮できるコードのサイズ 250 MB

    • リクエストあたりの最大実行時間 300 秒 → 長いバッチ処理は素ではできない。 • 同時実行数上限のデフォルト値 100 ▪ ※ 申請で拡張可能。 https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/limits.html