AWS Lambda を使ってみる

What for?

  • アプリケーションを実行するために、リソースの計画をして、サーバーを立てて、それを監視する必要があるが、それはだるい。
  • リソース管理や監視は全部Lambdaがやってくれるので、アプリケーション開発に集中できる。

どういうことができる?

  • イベントをトリガとして、プログラムを非同期実行できる
    • データ処理、ファイル処理、ストリーム処理、DB抽出、IoTバックエンドetc...
      • 画像のサムネイル作成、ビデオのコード変換、ファイルのインデックス作成、ログの処理、コンテンツの検証、およびリアルタイムでのデータの収集とフィルタリング、アプリケーションのアクティビティの追跡、注文のトランザクション処理、クリックストリーム分析、データクレンジング、メトリックスの生成、ログのフィルタリング、インデックス作成、ソーシャルメディア分析、および IoT デバイスデータのテレメトリと測定などなど
    • イベントにはプルイベント、プッシュイベント、スケジュールイベントがある
      • プルイベント: Lambdaが某のイベント発生をポーリングする
      • プッシュイベント: Lambdaに某がイベントを発行する
      • スケジュールイベント: cronのようなもの
  • API Gatewayを通して、HTTPS経由で同期実行することも可能

  • 言語は、Node.js, Java, Pythonが使える

  • 監視はCloudWatchでモニタリング可能
  • バージョン管理がある。

お値段は?

  • 2016/4/23時点で
    • リクエストのうち毎月最初の 1,000,000 件は無料
    • その後は 0.20 USD/1,000,000 件のリクエスト(0.0000002 USD/秒)

やってみる

  • とりあえずScheduled Eventで走らせてみる

  • Create New function

  • Step 1: Select blueprint はSkip
  • Step 2: Configure function
    • 名前つけて、言語選択して、Edit code inlineにコードを貼り付ける。
    • ロールは Basic execution roleでOK。その他はdefaultで。
  • 設定し終わったら Event source タブから、1分ごとのScheduled Event を設定する

  • Node.js でとりあえず以下のコードで実行してみる

console.log('Hello World');
  • Monitoring タブを確認したら、めっちゃHandler 'handler' missing on module 'index'エラーが出た
exports.handler = function (event, context) {
    context.succeed('Hello World');
};
  • ちゃんと書いた。問題なく1分ごとにlogが吐かれている。
  • 止めるときは、Event sourceをDisableにする

TODO

  • lambda本体はどこで動いてるの?
  • どのくらい調子に乗ると破産するかの肌感覚がほしい
  • プルイベントとプッシュイベントの違いは?
  • 外部サービスとの連携ってできるのかな?
  • なんで、Node.js, Java, Pythonなんだろう?
  • CloudWatch使ったことない
  • バージョン管理でGitあるって聞いた気がする
  • S3とか他のサービスと連携させてみたい
  • Lambda 停止時って、Event sourceの操作でいいの?
  • コードがカジュアルに書き換えられすぎて心配で吐きそう
  • カスタマイズのVPCって何?