俺のLambda
2015/11/19 JAWS-UG アーキテクチャ専門支部 クラウドネイティブ分科会 CDP議論会 #3

“Lambdaしばり”
moto <j3tm0t0>
JSON.stringify(me)
{
"id": "j3tm0t0",
"name": "Motokatsu Matsui",
"jobs": ["Programmer",
"Infra engineer",
"Cloud engineer",
undefined
],
"favorites":{
"AWS": [ "Lambda", "API Gateway"]
}
}
Twitter FB
過去に Lambda で作った物
Lambdacast
• S3 + Lambda を利用したPodcast(Videocast)配信の仕組み

S3にファイルをアップロードすると自動的に RSS feed を更新する

(ファイルはCloudFront経由での配信となる)
• EC2で *** のストリームを保存(録音)してS3にアップロード

→ スマホ等に自動配信
• 昨年のアドベントカレンダー

Qiita: AWS Lambda を CoffeeScript で書いてみた

http://qiita.com/j3tm0t0/items/1d79f393709ad3f1dcca
CloudFrontキャッシュ無効化
• S3のファイル更新時にCloudFrontのInvalidationを実施する
• Qiita: S3更新時にCloudFrontのInvalidationを実施する・改

http://qiita.com/j3tm0t0/items/00c49346c8e7fd89ff5e



元ネタ SPINF さんのブログ

AWS LambdaでS3更新時にCloudFrontのInvalidationを実施する

http://www.supinf.co.jp/tech/2014/12/05/s3-invalidate/
Server-less Contents Delivery
パターン
Slack bot その1
• 特定の bucket にファイルをアップロードすると

Lambda から Slack のチャンネルに通知が飛ぶ

(Slack Incoming Webhookを使用)
Slack bot その2
• Slack Outgoing Webhook

→ API Gateway に POST

→ Lambda で処理する
• いわゆる Chatops 的なツールを
量産できる!
Slack bot その3
• SORACOMのイベントハンドラーから Lambda が実行できます!

https://dev.soracom.io/jp/docs/event_handler/
• 通信容量が一定の容量を超えたら Slack に通知

Qiita: SORACOM Air のイベントハンドラーと AWS Lambda を連携してみる

http://qiita.com/j3tm0t0/items/71fe2d52397c5f37359b
Bot as a Service パターン
Twilio連携
• Twilioから固定電話に転送する際、日勤帯のみ転送し、時間外は自動
アナウンスを流すプログラム
• Twilio -> API Gateway -> Lambda
exports.handler = (event, context) ->
d = new Date
# UTC 1:00 - 7:59 = JST 10:00 - 16:59
if d.getUTCHours() in [1..7]
xml = '''
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Dial callerId="+8150xxxxxxxx">
<Number>+813xxxxxxxx</Number>
</Dial>
</Response>
'''
else
xml = '''
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say language="ja-jp">
株式会社 ◯◯◯◯ にお問い合わせいただき、誠に
ありがとうございます。
当窓口は、午前10時から午後5時までの受付とな
ります。
</Say>
</Response>
'''
context.succeed xml
Server-less API backend

パターン
アレゲな何か
• 構成的には Lambda -> SQS -> CloudWatch -> AutoScaling(spot)

外部から取得した情報に応じて必要時のみEC2を起動して処理する
• 定期的に実行したくて色々な試みをしてましたが、

re:Invent 2015 でスケジュール実行が実装されて全てが過去の物に
• それまでの紆余曲折は↓の記事にまとまってます

Qiita: Lambda を cron 的に使う Ver 2015.09

http://qiita.com/j3tm0t0/items/0e1320060791993a9d1a
Minimize Instance Usage
パターン
考えるポイント
Reactive vs Proactive
処理のトリガーが外部

(S3/AWS IoT/API Gatewayなど)

or
Lambda が自発的にキックされる

(タイマー実行)
どこにLambdaを入れるか
デバイス

↓

AWS IoT

↓

Lambda

(データの下処理)

↓

DynamoDB

(処理結果だけを保存)
デバイス

↓

AWS IoT

↓

DynamoDB

(とにかくrawデータを保存)

↓

Lambda

(何か別の処理)
Let’s
Discuss!

俺のLambda