"時間の流れ"
という無限リストを扱う
AWS Lambda
JAWS-UG 千葉支部 Vol.5

∼秋のAWS Lambda & API Gateway 祭り!!∼
2015-09-08
クラスメソッド株式会社
都元ダイスケ
自己紹介
✦ よく訓練されたアップル信者、都元です。
✦ Webアプリ屋出身のAWS屋
✦ Javaやってます
✦ AWS歴約4年(since 2011夏)
✦ Twitter @daisuke_m
✦ 人間CloudFormer
✦ 自動デプロイ芸人
今日は
✦ 秋のAWS Lambda & API Gateway 祭り!!
✦ ただし、本セッションはAPI Gateway成分ゼロです。
✦ Lambdaのみでがんばります。
✦ Lambdaが出てくるのも遅くぁwせdrftgyふじこ
バッチ処理
✦ リアルタイム処理の対義語。
✦ ここでは、HTTPリクエストに応答するための
処理以外のもの。
✦ 例えばこんなお仕事を担う。
✦ 毎週/毎日、通知のメールを送りたい。
✦ 毎月、締め処理のバッチを走らせたい。
都元の問題提起編
AWS上に、HAでスケーラブルな
バッチサーバを構成してください。
冗長バッチサーバ問題
定期バッチの課題
✦ 障害等で発火できなかったトリガはどうする?
✦ 毎分発火すべきトリガで、0:31までは発火でき
ていた。今、息を吹き返したのが0:33.30。
✦ 0:32と0:33、発火漏れ。
戦略
✦ 何事もなかったように、0:34から再開。
✦ 即座に2回発火し、0:34からは予定通り。
✦ 何度撃ち漏らしていても、即座に1回だけ発火し、
0:34からは予定通り。
✦ etc.
一方AWSは
✦ Design for failure (障害を見越した設計)
✦ EC2インスタンス単品での可用性を担保しよう
としない。
✦ 言い換えると、高可用性(HA)を要求するシステ
ムに対しては、Multi-AZを要求する。
✦ Multi-AZ分散すると、スケーラビリティも。
cronバッチサーバ
✦ 可用性のために2台冗長でバッチサーバを構築。
✦ 2回発火してくれてベンリでオトク!?
✦ バッチ処理が増えたので4台にスケール。
✦ 4サーバで同じ処理を並走してくれるので、

1台当たりの稼働率は変わらないのでオトク!?
バッチサーバの責務を分割
✦ ジョブスケジューラ (JS)
✦ 規定されたリズムに従ってトリガを発火
✦ 発火した結果、何が行われるかは関知しない
✦ ジョブワーカー (JW)
✦ 発火したトリガを受けて、処理を実行
✦ トリガが発火した理由には関知しない
改めてHAとスケーラビリティ
✦ JWのMulti-AZ化は簡単。
✦ SQSを使ったProducer / Consumerパターン
✦ クセモノはJS側だった。
都元の解答編
Solution 1 - Brian
✦ トリガのCRUDを担う
RESTful API
✦ 複数台で冗長化
✦ 多重発火防止はDBを仲介した
セマフォで実現
✦ トリガに従って、SNSトピッ
クにメッセージを投げるだけ。
Brianの実装と問題点
✦ QuartzというJava製OSSジョブスケジューラ。
✦ 複雑だが高機能なので、そこそこ実装は楽。
✦ RDBを利用したセマフォ(クラスタ機能)
✦ 複雑で、RDBからDynamoDBに差し替える等は困難
✦ misfire instruction機能
✦ RDSのfailoverによる可用性の低下がある。
✦ JSに2台、JWに2台。金のバカ食い。
✦ cron + sh-scriptであれば1台で済んでたのに。
Solution 2 - Jimmy
✦ トリガは毎秒で固定
✦ 複数台で冗長化
✦ 多重発火防止はDynamoDBを
仲介したセマフォで実現
✦ トリガに従って、SNSトピッ
クにメッセージを投げるだけ。
Jimmyが吐くメッセージ
{

"timestamp": 1438825770,

"firedTimestamp": 1438825770,

"recovery": false,

"version": "0.1-SNAPSHOT"

}
Jimmyの実装と課題
✦ 中身は実はQuartzを利用。(なんだかんだよく出来てる)
✦ ただしクラスタは利用せず、気ままに毎秒発火。
✦ DynamoDBへのConditional Putを利用して、書き込みに
成功したインスタンスにSNSメッセージ送信の権利を。
✦ 全インスタンス(通常2台)でビーチ・フラッグス!
✦ 欲しいのは毎秒じゃない問題。
✦ "0 0 9-18 ? * MON-FRI"
無限リスト
✦ 無限の大きさを持つリスト。
✦ 手続き型プログラミングで考えると、この手の
リストを処理しようとすると無限ループやメモリ
破綻に繋がる。
✦ 関数型プログラミングで考えると、この手のリ
ストは、最終的にfilterかreduceされる。
無限リスト利用例
✦ [0, 1, 2, 3, 4, 5, …] という無限リスト。

これをサイズN個にフィルタしてからloopすると、

N回ループが自在に作れる。
✦ ↑の無限リストに階乗関数(!n)をmapすると

[1, 1, 2, 6, 24, …]
✦ さらに逆数を返す関数(1/n)をmapして

[1/1, 1/1, 1/2, 1/6, 1/24, …]
✦ 全要素の総和を求めると、ネイピア数(e≠2.718)
時の流れという無限リスト
✦ 太古の昔から、永遠の未来までをつなぐリスト
✦ Jimmyは、その要素を1つ1つ取り出して表現
(represent)しているだけです。
✦ と考えると、Jimmyのメッセージをフィルター
して、SQSに突っ込めば良いのではないか。
✦ という設計思想でJimmyを作ってみました。
ああ、やっと
Lambdaが出てきた
20150908 ”時間の流れ” という無限リストを扱うAWS Lambda
20150908 ”時間の流れ” という無限リストを扱うAWS Lambda
こうだったらいいのにな
✦ パラメータをコンストラクタで受け取って汎用化
✦ 1つのコードパッケージで複数のLambdaを展開
Lambdaに要望
✦ デプロイパラメータを指定できるようにしてくだ
さい。
✦ できればそのパラメータはcontextから読めると
いいです。
小細工チャレンジ (1)
✦ Lambda Functionにタグがあれば…。
✦ GetFunctionとか呼び出してタグの情報をパラ
メータとして利用できるのではないか?
Functionにタグ無かったwww
っうぇwwwっうぇww
小細工チャレンジ (2)
$ aws lambda get-function-configuration --function-name
jimmy
{
"FunctionName": "jimmy",
"CodeSize": 8283395,
"MemorySize": 128,
"FunctionArn": "arn:aws:lambda:xx:xx:function:jimmy",
"Handler": "JimmyMessageFilterHandler",
"Role": "arn:aws:iam::xxxx:role/lambda-poweruser",
"Timeout": 60,
"LastModified": "2015-08-21T01:52:15.348+0000",
"Runtime": "java8",
"Description": "0 0 9-18 ? * MON-FRI"
}
"Description": "0 0 9-18 ? * MON-FRI"
アッー!
という不幸な事件を
起こさないためにも
なにとぞ。

More Related Content

PDF
API Gatewayで re:Inventのセッション探し
PDF
AWS LambdaとAPI Gatewayでサーバレスなシステム構築に踏み出してみる
PDF
PHPという概念が存在しない退屈な世界 - AWS LambdaでWebAPP編
PPTX
20160312 Jaws Days 2016 API Gateway+Lambda
PDF
ドローンの安全運転をささえるLambda
PDF
Lambda × Mobileの可能性
PDF
AWSでAPI Gatewayから非同期でLambdaを起動してS3にファイルアップロードしようとしたらハマった話。
PDF
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
API Gatewayで re:Inventのセッション探し
AWS LambdaとAPI Gatewayでサーバレスなシステム構築に踏み出してみる
PHPという概念が存在しない退屈な世界 - AWS LambdaでWebAPP編
20160312 Jaws Days 2016 API Gateway+Lambda
ドローンの安全運転をささえるLambda
Lambda × Mobileの可能性
AWSでAPI Gatewayから非同期でLambdaを起動してS3にファイルアップロードしようとしたらハマった話。
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】

What's hot (20)

PPTX
はじめてのAWS Lambda
PDF
What's new with Serverless
PDF
Introduction to AWS X-Ray
PDF
AWS LambdaとDynamoDBがこんなにツライはずがない #ssmjp
PDF
AWSのサーバレス関連アップデートを10分で紹介します
PDF
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
PDF
Going Serverless, Building Applications with No Servers
PPTX
AWS Lambda + Go
PDF
AWS Lambdaで作るクローラー/スクレイピング
PDF
AWS Lambda / Amazon API Gateway Deep Dive
PDF
AWS LambdaでEC2を管理しよう(JAWS-UG 大阪 in AWS Cloud Roadshow 2015)
PDF
Tune Up AWS Lambda
PDF
Serverless Architecture on AWS (20151201版)
PDF
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
PPTX
Amazon AlexaとServerless
PPTX
Serverless frameworkを使ってみた話 at #nseg #90
PDF
JAWSDAYS2016 Technical Deep DIVE
PDF
サーバーレスアーキテクチャのすすめ(公開版)
PDF
AWSでアプリ開発するなら 知っておくべこと
PDF
サーバーレスの今とこれから
はじめてのAWS Lambda
What's new with Serverless
Introduction to AWS X-Ray
AWS LambdaとDynamoDBがこんなにツライはずがない #ssmjp
AWSのサーバレス関連アップデートを10分で紹介します
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
Going Serverless, Building Applications with No Servers
AWS Lambda + Go
AWS Lambdaで作るクローラー/スクレイピング
AWS Lambda / Amazon API Gateway Deep Dive
AWS LambdaでEC2を管理しよう(JAWS-UG 大阪 in AWS Cloud Roadshow 2015)
Tune Up AWS Lambda
Serverless Architecture on AWS (20151201版)
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
Amazon AlexaとServerless
Serverless frameworkを使ってみた話 at #nseg #90
JAWSDAYS2016 Technical Deep DIVE
サーバーレスアーキテクチャのすすめ(公開版)
AWSでアプリ開発するなら 知っておくべこと
サーバーレスの今とこれから
Ad

Viewers also liked (20)

PDF
フルマネージドのポイントシステム
PDF
AWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
PDF
クラウドネイティブ化する未来
PDF
Jawsug chiba API Gateway
PDF
20150908 jaws ug-chiba_lt
PDF
AWS Blackbelt 2015シリーズ AWS Lambda
PDF
20150226_JAWS_UG札幌
PDF
20150425 JAWS-UG Okinawa
PDF
LambdaとMobileの美味しいかもしれない関係
PPTX
Lambdaについて
PDF
JavaのLambdaの裏事情
PDF
20150928楽しいlambda
PDF
AWS Lambda のご紹介 2015 JAWS沖縄
PPTX
管理統制もLambdaで!
PPTX
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
PDF
AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05
PDF
速習 AWS Lambda
PDF
Serverlessなものを使ってサービスを作っている話
PDF
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
PDF
AWS Lambda にまつわるおいしい話
フルマネージドのポイントシステム
AWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
クラウドネイティブ化する未来
Jawsug chiba API Gateway
20150908 jaws ug-chiba_lt
AWS Blackbelt 2015シリーズ AWS Lambda
20150226_JAWS_UG札幌
20150425 JAWS-UG Okinawa
LambdaとMobileの美味しいかもしれない関係
Lambdaについて
JavaのLambdaの裏事情
20150928楽しいlambda
AWS Lambda のご紹介 2015 JAWS沖縄
管理統制もLambdaで!
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05
速習 AWS Lambda
Serverlessなものを使ってサービスを作っている話
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
AWS Lambda にまつわるおいしい話
Ad

Similar to 20150908 ”時間の流れ” という無限リストを扱うAWS Lambda (7)

PDF
AWS Lambda Update
PPTX
JAWS-UG 愛媛 第6回勉強会(Lambda)
PDF
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
PDF
AWS Black Belt Techシリーズ AWS Lambda Updates
PDF
AWSCLI Lambda
PDF
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
PDF
第18回 jaws ug札幌 勉強会 やってみたで終わらないlambdaな話
AWS Lambda Update
JAWS-UG 愛媛 第6回勉強会(Lambda)
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
AWS Black Belt Techシリーズ AWS Lambda Updates
AWSCLI Lambda
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
第18回 jaws ug札幌 勉強会 やってみたで終わらないlambdaな話

More from 都元ダイスケ Miyamoto (20)

PDF
認証の標準的な方法は分かった。では認可はどう管理するんだい? #cmdevio
PDF
アプリケーション動作ログ、
ERRORで出すか? WARNで出すか? #cmdevio2019
PDF
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
PDF
クラスメソッドにおける Web API エンジニアリングの基本的な考え方と標準定義 - Developers.IO 2018 (2018-10-05)
PDF
AWSクラウドデータストレージ総論
PDF
20170312 F.K様向け ライフパートナーM.M様のご提案
PDF
Spring Day 2016 - Web API アクセス制御の最適解
PDF
マイクロWebアプリケーション - Developers.IO 2016
PDF
Single Command Deployのための gradle-aws-plugin講座
PDF
体で覚えるSQS! DEVIO-MTUP11-TOKYO-007
PDF
20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編
PDF
20131210 CM re:Growth - Infrastructure as Code から Full Reproducible Infrastru...
PDF
20130516 cm課外授業8-aws
PDF
20121215 DevLOVE2012 Mahout on AWS
PDF
20121206 VOYAGE LT - 名前重要って言うけどさ
PDF
20120830 DBリファクタリング読書会第三回
PDF
java-ja 第1回 チキチキ『( ゜ェ゜)・;'.、ゴフッ』 - Strategy
PDF
DevLOVE Beautiful Development - 第一幕 陽の巻
PDF
DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy
PDF
とべとべ電設部勉強会20100717 DB meets Jiemamy
認証の標準的な方法は分かった。では認可はどう管理するんだい? #cmdevio
アプリケーション動作ログ、
ERRORで出すか? WARNで出すか? #cmdevio2019
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
クラスメソッドにおける Web API エンジニアリングの基本的な考え方と標準定義 - Developers.IO 2018 (2018-10-05)
AWSクラウドデータストレージ総論
20170312 F.K様向け ライフパートナーM.M様のご提案
Spring Day 2016 - Web API アクセス制御の最適解
マイクロWebアプリケーション - Developers.IO 2016
Single Command Deployのための gradle-aws-plugin講座
体で覚えるSQS! DEVIO-MTUP11-TOKYO-007
20140315 JAWS DAYS 2014 ACEに聞け! CloudFormation編
20131210 CM re:Growth - Infrastructure as Code から Full Reproducible Infrastru...
20130516 cm課外授業8-aws
20121215 DevLOVE2012 Mahout on AWS
20121206 VOYAGE LT - 名前重要って言うけどさ
20120830 DBリファクタリング読書会第三回
java-ja 第1回 チキチキ『( ゜ェ゜)・;'.、ゴフッ』 - Strategy
DevLOVE Beautiful Development - 第一幕 陽の巻
DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy
とべとべ電設部勉強会20100717 DB meets Jiemamy

20150908 ”時間の流れ” という無限リストを扱うAWS Lambda