メール受信も api gateway と lambda で!〜サービス連携でpaasを拡張〜

24
1 メメメメメメ API Gateway メ Lambda メメメメメメメメメ PaaS メメメメ JAWS-UG メメメメメメメメメメメ CDP メメメ #1 2015/9/17 メメ メ

Upload: -

Post on 09-Jan-2017

3.572 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

1

メール受信もAPI Gateway と Lambda

で!〜サービス連携で PaaS を拡張〜JAWS-UG アーキテクチャ専門支部

CDP 議論会 #12015/9/17 大栗 宗

Page 2: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

2

お前だれよ?• 大栗 宗 (@maroon1st)• 秋葉原でブログ書いてます• シガー、パイプ、ウィスキー• 好きな AWS サービス:

RDS 、 SSM 、 IAM• 好きな CDP :

Complex Searcher パターン (Incubator)

Page 3: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

3

メール受信も API Gateway ?https しか使えないでしょ?

Page 4: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

4

AWS がダメなら外部サービスを使えばいいじゃない!

SendGrid なら受信も可能Inbound Parse Webhook があ

る!

Page 5: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

5

SendGrid• 言わずと知れたクラウドベースのメール

インフラストラクチャ。• 世界中のメールの 3%( 月間 130 億通 ) を

配信する大規模サービス。• 日本国内では構造計画研究所が代理店を

行っている。

Page 6: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

6

Inbound Parse Webhook• SendGrid には 2 種類の Webhook (イ

ベント通知とメール受信)がある。• Inbound Parse Webhook は SendGrid

が代わりにメールを受信してくれて、 Webhook として通知してくれる。

• なお Free プランでも使用可能 (Bronzeプランはダメ )

Page 7: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

7

こんな感じで実装

Page 8: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

8

SendGrid から API Gateway

Page 9: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

9

SendGrid から API Gateway• Webhook では、メールの生データを

multipart にして POST してくる。• 後ろに Lambda があるため JSON 形式で

データを渡す必要がある。• Integration Request で POST データを

変換する必要がある。

Page 10: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

10

SendGrid から API Gateway• Content-Type が multipart/form-data

で Mapping template を作る。• データ内にダブルクオートがあるため

BASE64 エンコードして JSON 化する。#set($inputParams = $util.base64Encode($input.path('$'))){ "body": "$inputParams"}

Page 11: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

11

API Gateway から Lambda

Page 12: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

12

API Gateway から Lambda• Node.js 力さえあれば、後は簡単。• event.body を BASE64 デコードして中

身を処理。

• Node.js の SendGrid ライブラリがある。(https://github.com/sendgrid/sendgrid-nodejs)

var postDoby = new Buffer(event.body, 'base64').toString();

Page 13: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

13

API Gateway から Lambda• 後は好きな処理をして、バックエンドへ。• データが大きい場合は、処理に時間がか

かるので、 Lambda のメモリサイズの調整や添付ファイルを処理しないなどの対応が必要かも。

Page 14: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

14

メール受信から AWS への連携

Page 15: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

15

そういえば、これ

Page 16: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

16

で出来るよ

Page 17: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

17

Zapier の対応サービス• なんでも出来そうな勢い

Page 18: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

18

外部サービスを上手く使おう

Page 19: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

19

今回のアーキテクチャ提案で重要なこと2つ

Page 20: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

20

1. プロトコル変換

Page 21: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

21

プロトコル変換• API Gateway で自分が使いやすい形式に

変換。• VTL(Velocity Template Language) で

データフォーマットを変えられる。

Page 22: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

22

2. リアクティブシステム

Page 23: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

23

リアクティブシステム• The Reactive Manifesto( http

://www.reactivemanifesto.org/ ) で提唱されている、即応性 (Responsive) 、耐障害性 (Resilient) 、弾力性 (Elastic) 、メッセージ駆動 (Message Driven) を兼ね備えたシステム。

• 代表的な例として Lambda がある。

Page 24: メール受信も API Gateway と Lambda で!〜サービス連携でPaaSを拡張〜

24

まとめ• 外部サービスを使えば https 以外も API

Gateway + Lambda で処理可能。• API Gateway はプロトコル変換ができる。• Lambda を使うとユーザ側の待機リソー

スが不要になる。