SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
AWS LambdaとAPI Gatewayでサーバレスなシステム構築に踏み出してみる
Report
Takashi Makino
Follow
代表取締役 at 株式会社アットウェア
Oct. 2, 2015
•
0 likes
•
13,695 views
1
of
29
AWS LambdaとAPI Gatewayでサーバレスなシステム構築に踏み出してみる
Oct. 2, 2015
•
0 likes
•
13,695 views
Download Now
Download to read offline
Report
Software
AWS LambdaとAPI Gatewayでサーバレスなシステム構築に踏み出してみる
Takashi Makino
Follow
代表取締役 at 株式会社アットウェア
Recommended
Lambda × Mobileの可能性
yuki0211s
4.7K views
•
29 slides
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
JOYZO
5.5K views
•
118 slides
Serverless Architecture on AWS (20151201版)
Keisuke Nishitani
4.7K views
•
94 slides
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
Ryu Yamashita
1.8K views
•
118 slides
AWSで実現するクラウドネイティブなアプリ開発のポイント
Keisuke Nishitani
22.6K views
•
102 slides
AWS Lambda Updates
Keisuke Nishitani
4K views
•
54 slides
More Related Content
What's hot
Serverless Architecture on AWS(20151023版)
Keisuke Nishitani
15.2K views
•
87 slides
Serverless Architecture on AWS(20151121版)
Keisuke Nishitani
6.2K views
•
88 slides
PHPという概念が存在しない退屈な世界 - AWS LambdaでWebAPP編
Yoshihiro Ohsuka
4K views
•
19 slides
20150908 ”時間の流れ” という無限リストを扱うAWS Lambda
都元ダイスケ Miyamoto
5.1K views
•
29 slides
20160312 Jaws Days 2016 API Gateway+Lambda
Kazuki Ueki
6.1K views
•
35 slides
画像処理をAWS LambdaのPythonで!
Tomotsune Murata
6.2K views
•
25 slides
What's hot
(20)
Serverless Architecture on AWS(20151023版)
Keisuke Nishitani
•
15.2K views
Serverless Architecture on AWS(20151121版)
Keisuke Nishitani
•
6.2K views
PHPという概念が存在しない退屈な世界 - AWS LambdaでWebAPP編
Yoshihiro Ohsuka
•
4K views
20150908 ”時間の流れ” という無限リストを扱うAWS Lambda
都元ダイスケ Miyamoto
•
5.1K views
20160312 Jaws Days 2016 API Gateway+Lambda
Kazuki Ueki
•
6.1K views
画像処理をAWS LambdaのPythonで!
Tomotsune Murata
•
6.2K views
AWSにおける モバイル向けサービス及び事例紹介(20151211)
Keisuke Nishitani
•
4.4K views
Androidを中心に紐解くIoT
Keisuke Nishitani
•
6.1K views
Introducing Serverless Computing (20160802)
Keisuke Nishitani
•
6.1K views
Serverless Revolution
Keisuke Nishitani
•
2.7K views
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
Keisuke Nishitani
•
1.1K views
Big DataとContainerとStream - AWSでのクラスタ構成とストリーム処理 -
Amazon Web Services Japan
•
5.5K views
AWS Lambda Update
Keisuke Nishitani
•
7.3K views
AWSでAPI Gatewayから非同期でLambdaを起動してS3にファイルアップロードしようとしたらハマった話。
Takehiro Suemitsu
•
15.7K views
クラウド時代のソフトウェアアーキテクチャ
Keisuke Nishitani
•
1.3K views
Scale Your Business without Servers
Keisuke Nishitani
•
2K views
CloudFrontのリアルタイムログをKibanaで可視化しよう
Eiji KOMINAMI
•
2.2K views
はじめてのAWS Lambda
Masaki Misawa
•
1K views
モバイル開発を支えるAWS Mobile Services
Keisuke Nishitani
•
28.3K views
AWS LambdaとDynamoDBがこんなにツライはずがない #ssmjp
Masahiro NAKAYAMA
•
56.1K views
Similar to AWS LambdaとAPI Gatewayでサーバレスなシステム構築に踏み出してみる
Lambdaについて
Ara Jo
312 views
•
18 slides
Jawsday2015 lambda(なにができるの? EC2はもう不要?)
Shiraishi Masayuki
763 views
•
19 slides
lambda-lgtm
Yoshiaki Yoshida
3K views
•
19 slides
俺のLambda
Motokatsu Matsui
1.9K views
•
19 slides
LambdaとMobileの美味しいかもしれない関係
Hiraku Komuro
1K views
•
47 slides
20200528_AWSでサーバーレスなLINEBotLIFFアプリ環境をIaCな感じで構築するよ!.pdf
Sumihiro Kagawa
78 views
•
54 slides
Similar to AWS LambdaとAPI Gatewayでサーバレスなシステム構築に踏み出してみる
(20)
Lambdaについて
Ara Jo
•
312 views
Jawsday2015 lambda(なにができるの? EC2はもう不要?)
Shiraishi Masayuki
•
763 views
lambda-lgtm
Yoshiaki Yoshida
•
3K views
俺のLambda
Motokatsu Matsui
•
1.9K views
LambdaとMobileの美味しいかもしれない関係
Hiraku Komuro
•
1K views
20200528_AWSでサーバーレスなLINEBotLIFFアプリ環境をIaCな感じで構築するよ!.pdf
Sumihiro Kagawa
•
78 views
re:invent2018 総ざらえ
真乙 九龍
•
1.1K views
Transfer for sftp 20181212
Noguchi Takaaki
•
307 views
JAWS-UG 愛媛 第6回勉強会(Lambda)
Takahiro Kato
•
84 views
AWS Lambda + Go
Kentaro Kawano
•
869 views
Serverless services on_aws_dmm_meetup_20170801
Amazon Web Services Japan
•
3.6K views
GAS + SaaS時々 AWSで自動化
Mitsuhiro Yamashita
•
975 views
CloudFormation/SAMのススメ
Eiji KOMINAMI
•
1.4K views
Lambda勉強会
Shinji Miyazato
•
262 views
serverless framework + AWS Lambda with Python
masahitojp
•
1.1K views
Introducing C# in AWS Lambda
Atsushi Fukui
•
1.7K views
プログラマブルクラウドの薦め
Shinpei Ohtani
•
1.3K views
aws mackerel twilio_handson_public
Tomoaki Sakatoku
•
630 views
rails + serverengineで お手軽daemon
Akira Miki
•
2.3K views
Serverlessでサイト監視
shigeyuki azuchi
•
4K views
More from Takashi Makino
ITエンジニアのしあわせ考
Takashi Makino
906 views
•
21 slides
Dockerでらくらく開発・運用を体感しよう
Takashi Makino
3.2K views
•
27 slides
GASろう
Takashi Makino
846 views
•
20 slides
LMS on the Cloud
Takashi Makino
736 views
•
12 slides
JJUG CCC 2014 Fall LT
Takashi Makino
1.2K views
•
17 slides
ソフトウェア開発の見える化
Takashi Makino
1.1K views
•
27 slides
More from Takashi Makino
(9)
ITエンジニアのしあわせ考
Takashi Makino
•
906 views
Dockerでらくらく開発・運用を体感しよう
Takashi Makino
•
3.2K views
GASろう
Takashi Makino
•
846 views
LMS on the Cloud
Takashi Makino
•
736 views
JJUG CCC 2014 Fall LT
Takashi Makino
•
1.2K views
ソフトウェア開発の見える化
Takashi Makino
•
1.1K views
HTTPとサーブレット
Takashi Makino
•
1.7K views
心はソフトウェアエンジニア、仕事は経営者のすゝめ
Takashi Makino
•
1.3K views
SIerにおくる、アジャイルプロセスの実践
Takashi Makino
•
1.1K views
Recently uploaded
socialcast.pdf
ストランダー
15 views
•
30 slides
LTは検証の場.pptx
ssuserfcafd1
232 views
•
10 slides
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
耕二 阿部
17 views
•
59 slides
ハイエンド〜ローエンドまで、「Enlighten」による効率的リアルタイムグローバルイルミネーション|CEDEC2023
Silicon Studio Corporation
27 views
•
48 slides
【JSTQB_ALTM】シラバス第3章
ssusercd6d02
26 views
•
27 slides
Ansible入門.pptx
洵貴 佐川
196 views
•
13 slides
Recently uploaded
(6)
socialcast.pdf
ストランダー
•
15 views
LTは検証の場.pptx
ssuserfcafd1
•
232 views
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
耕二 阿部
•
17 views
ハイエンド〜ローエンドまで、「Enlighten」による効率的リアルタイムグローバルイルミネーション|CEDEC2023
Silicon Studio Corporation
•
27 views
【JSTQB_ALTM】シラバス第3章
ssusercd6d02
•
26 views
Ansible入門.pptx
洵貴 佐川
•
196 views
AWS LambdaとAPI Gatewayでサーバレスなシステム構築に踏み出してみる
1.
AWS LambdaとAPI Gatewayでサー バレスなシステム構築に踏み出してみる @makinog3 1
2.
アジェンダ p AWS Lambdaって? n おきまりのHello Lambda! n さらに、イベントドリブンアプリケーション p S3への書き込みイベントで発動 p SNSでメールも送ってみる p Amazon
API Gatewayって? n API GatewayからLambdaを叩く 2
3.
AWS Lambdaって? p 「イベント発⽣生時にお客様のコードを実⾏行行し、 コンピューティングリソースを⾃自動的に管理理す るコンピューティングサービス」 3 イベント 発動 ユーザ
アプリケーション
4.
イベントって? 4 Amazon S3 バケットのオブジェクト Amazon SNS から送信された通知 Amazon
Kinesis ストリームが受信した メッセージ Amazon DynamoDB テーブルの更新
5.
5 ようは なんかメッセージが飛んできたり データの更新とかがあったら プログラムを実行するしくみ あぁ、電子メールの.forwardとかRDBのトリガーで動くストアドプロシジャみたいなもんね
6.
何がうれしいのか<教科書的に> p ⾯面倒なインフラの構築とかしないでも、スケー ラブル(!?)でイベントドリブンなアプリ ケーションを作れる n 数ミリ秒で起動 n 負荷に応じて勝⼿手にスケール n 処理理できるリクエストの数に制限なし p S3、DynamoDBの更更新に合わせたカスタム処 理理ができる n S3にアップロードされたファイルのメタデータを DynamoDBに登録するとか p 完全従量量課⾦金金 n 意外とEC2は⾼高いよね 6
7.
世の中、良良いことばかりじゃない p 状態を保持できない(ステートレス) n データ(セッションとか)を保持する必要がある場 合は、DynamoDBなどに書く n AWS Lambdaが λ(ラムダ関数)たるところ p (今のところ)Node.jsかJava
8のコードのみ n Node.jsの関数かJavaのクラスのメソッドを発動 p 発動する関数/メソッドのシグネチャは決まってるので、既 存のコードが*そのまま*使えるわけではない n Java 8のラムダとは無関係 :-‐‑‒P 7
8.
AWS Lambdaの実態? p コンテナとして実装されてるっぽい n なので、状態を保持できない p /tmpへの書き込みはできても、永続化はされない n なので、起動が速い! p ImageMagickは使える n S3に画像ファイルがアップロードされたのを契機に サムネイルを作るとかが想定されている? p exec()とかできちゃうっぽい n 必要なライブラリを全て静的リンクして、gcc動かし ちゃってる⼈人とか 8
9.
まずは お決まりのHello Lambda 9 Lambdaの典型的な利利⽤用 パターンの雛形のコー ドが⽤用意されている
10.
LambdaにNode.js関数を設定 10 後で使う API Gatewayが Tokyoリージョンで は使えないので、 Oregonあたりにし ときましょう Execution Roleの設定 (後述) 呼び出される 関数名
11.
LambdaのRole p Execution Role n Lambda関数から
AWSのリソースへ アクセスするための権限 n 例例えば、Lambda関数の 中からSNSにメッセージ を投げるならSNSへの 書き込み権限が必要 p Invocation Role(イベントにより異異なる) n イベントソースがLambda関数を実⾏行行するための権限 n Lambda関数がイベントソースを取得するための権限 11
12.
こんな感じ 12 イベントの情報 (イベントソースによっ て内容は異異なる) CloudWatchに 記録される Lambda関数の 戻り値
13.
Hello LambdaのTEST 13
14.
S3にファイルが追加されたらSNS でメールを送る 14 S3 SNS Lambda 同じリージョン にします
15.
S3にバケットを作る 15
16.
SNSでメールを送る 16 送信許諾の確認 メールが届きます
17.
S3で発動するLambda関数を作る 17
18.
18 console.log('Loading function'); var aws
= require('aws-sdk'); var s3 = new aws.S3({ apiVersion: '2006-03-01' }); var sns = new aws.SNS({ accessKeyId: ‘ACCESS_KEY_ID', secretAccessKey: ’SECRET_ACCESS_KEY', region: ’REGION' }); exports.handler = function(event, context) { //console.log('Received event:', //JSON.stringify(event, null, 2)); // Get the object from the event and // show its content type var bucket = event.Records[0].s3.bucket.name; var key = event.Records[0].s3.object.key; var params = { Bucket: bucket, Key: key }; s3.getObject(params, function(err, data) { if (err) { console.log(err); var message = "Error getting" + " object " + key + " from bucket " + bucket; console.log(message); context.fail(message); } else { sns.publish({ Message: 'Got object ' + key + ' (' + data.ContentType + ') from bucket ' + bucket, Subject: '[ykcloud] Got object', TopicArn: ’TOPIC_ARN' }, function(err, data){ if(err) throw err; else context.fail('Unable’ + ' to send e-mail'); }); console.log('CONTENT TYPE:’, data.ContentType); context.succeed(data.ContentType); } }); };
19.
今⽇日のお題を思い出す… p 「AWS LambdaとAPI Gatewayでサーバレ スなシステム構築に踏み出してみる」 19 AWS
Lambdaでサーバレスな Webアプリを作りたい LambdaをWebブラウザから 直接呼び出すのはメンドイ できなくは ないけど… そこでAmazon API Gateway !
20.
Amazon API Gatewayって? p Lambdaを含むAWSの各サービスやインター ネット上で公開されているサービスに対して、 REST
APIを提供することができる n AWSのコンソールから簡単につくれる n スケーラブル n AWSの認証メカニズム(IAM)が利利⽤用できる n APIをJavaScriptやAndroid、iOSアプリケーショ ンから使うためのSDKが作れる 20
21.
/prod/hello /prod/hello APIの構成 21
/prod/hello GET PUT POST DELETE : Stages Stages 本番環境とかテスト環境とかに 使い分けることを想定 Stage毎にCloudWatchの設定 や、キャッシュの設定ができる 作成したAPIはStageにデプロ イすることで公開される Resources Methods
22.
HelloLambdaのAPIを作ってみる 22
23.
HelloLambdaのAPIを作ってみる 23
24.
APIのテスト 24
25.
APIの公開 25
26.
ではWebブラウザから叩いてみる 26 JSON JSON S3にHTMLファイルと置いといて、そこからダウンロードするようにすれば、 EC2とか無しで、Webアプリケーションの運用ができる ※ただし、CORSの設定が必要 http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html
27.
27 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Hello
Lambda</title> <script type="text/javascript" src="http://ajax.googleapis.com/ ajax/libs/jquery/2.1.0/jquery.min.js"></script> <script type="text/javascript"> $(function(){ $("#response").html("Response Values"); $("#button").click( function(){ var url = $("#url_post").val(); var JSONdata = { key1: $("#key1").val(), key2: $("#key2").val(), key3: $("#key3").val() }; $.ajax({ type : 'post', url : url, data : JSON.stringify(JSONdata), contentType: 'application/JSON', dataType : 'JSON', scriptCharset: 'utf-8', success : function(data) { // alert(JSON.stringify(data)); $("#response").html(JSON.stringify(data)); }, error : function(data) { alert("error"); // alert(JSON.stringify(data)); $("#response").html(JSON.stringify(data)); } }); }) }) </script> </head> <body> <h1>Post to HelloLambda API Gateway</h1> <p>URL: <input type="text" id="url_post" name="url" size="100" placeholder="Your API Gateway URL"></p> <p>Key1: <input type="text" id="key1" size="30" placeholder="Key1 value"></p> <p>Key2: <input type="text" id="key2" size="30" placeholder="Key2 value"></p> <p>Key3: <input type="text" id="key3" size="30" placeholder="Key3 value"></p> <p><button id="button" type="button">post</button></p> <textarea id="response" cols=120 rows=10 disabled></ textarea> </body> </html>
28.
まとめ p AWS Lambdaで簡単なイベントドリブンアプ リケーションを作るのは、難しくない n S3、DynamoDBの更更新に合わせたカスタム処理理 n 複数のサービスとLambdaを組み合わせてチェーン p Amazon API
Gatewayとの組み合わせで、 サーバ/ミドルウェアなど⽤用意せずに、 RESTfulなWebアプリケーションを作れる n 本格的なモノを作るには、テスト⽅方法の確⽴立立とかが 課題か n ちょっとした裏裏⽅方、運⽤用を助けるツールとして使う のが良良い感じ p LambdaのコンソールからAPIを作った時に上⼿手く動かないのはよくわからない… 28
29.
リファレンス p AWS Lambda公式ドキュメント(英語のみ)
http://docs.aws.amazon.com/lambda/latest/dg/welcome.html p Amazon API Gateway公式ドキュメント(英語のみ) http://docs.aws.amazon.com/apigateway/latest/developerguide/ welcome.html 29