SlideShare a Scribd company logo
AWS  LambdaとAPI  Gatewayでサー
バレスなシステム構築に踏み出してみる
@makinog3
1
アジェンダ
p AWS  Lambdaって?
n おきまりのHello  Lambda!
n さらに、イベントドリブンアプリケーション
p S3への書き込みイベントで発動
p SNSでメールも送ってみる
p Amazon  API  Gatewayって?
n API  GatewayからLambdaを叩く
2
AWS  Lambdaって?
p 「イベント発⽣生時にお客様のコードを実⾏行行し、
コンピューティングリソースを⾃自動的に管理理す
るコンピューティングサービス」
3
イベント 発動
ユーザ                                
アプリケーション
イベントって?
4
Amazon S3
バケットのオブジェクト	
Amazon SNS
から送信された通知	
Amazon Kinesis
ストリームが受信した
メッセージ	
Amazon DynamoDB
テーブルの更新
5
ようは
なんかメッセージが飛んできたり
データの更新とかがあったら
プログラムを実行するしくみ	
あぁ、電子メールの.forwardとかRDBのトリガーで動くストアドプロシジャみたいなもんね
何がうれしいのか<教科書的に>
p ⾯面倒なインフラの構築とかしないでも、スケー
ラブル(!?)でイベントドリブンなアプリ
ケーションを作れる
n 数ミリ秒で起動
n 負荷に応じて勝⼿手にスケール
n 処理理できるリクエストの数に制限なし
p S3、DynamoDBの更更新に合わせたカスタム処
理理ができる
n S3にアップロードされたファイルのメタデータを
DynamoDBに登録するとか
p 完全従量量課⾦金金
n 意外とEC2は⾼高いよね
6
世の中、良良いことばかりじゃない
p 状態を保持できない(ステートレス)
n データ(セッションとか)を保持する必要がある場
合は、DynamoDBなどに書く
n AWS  Lambdaが  λ(ラムダ関数)たるところ
p (今のところ)Node.jsかJava  8のコードのみ
n Node.jsの関数かJavaのクラスのメソッドを発動
p 発動する関数/メソッドのシグネチャは決まってるので、既
存のコードが*そのまま*使えるわけではない
n Java  8のラムダとは無関係  :-‐‑‒P
7
AWS  Lambdaの実態?
p コンテナとして実装されてるっぽい
n なので、状態を保持できない
p /tmpへの書き込みはできても、永続化はされない
n なので、起動が速い!
p ImageMagickは使える
n S3に画像ファイルがアップロードされたのを契機に
サムネイルを作るとかが想定されている?
p exec()とかできちゃうっぽい
n 必要なライブラリを全て静的リンクして、gcc動かし
ちゃってる⼈人とか
8
まずは
お決まりのHello  Lambda
9
Lambdaの典型的な利利⽤用
パターンの雛形のコー
ドが⽤用意されている
LambdaにNode.js関数を設定
10
後で使う
API  Gatewayが
Tokyoリージョンで
は使えないので、
Oregonあたりにし
ときましょう
Execution  
Roleの設定
(後述)
呼び出される
関数名
LambdaのRole
p Execution  Role
n Lambda関数から                                                                                      
AWSのリソースへ                                                                                            
アクセスするための権限
n 例例えば、Lambda関数の                                                                            
中からSNSにメッセージ                                                                            
を投げるならSNSへの                                                                                          
書き込み権限が必要
p Invocation  Role(イベントにより異異なる)
n イベントソースがLambda関数を実⾏行行するための権限
n Lambda関数がイベントソースを取得するための権限
11
こんな感じ
12
イベントの情報
(イベントソースによっ
て内容は異異なる)
CloudWatchに
記録される
Lambda関数の
戻り値
Hello  LambdaのTEST
13
S3にファイルが追加されたらSNS
でメールを送る
14
S3
SNS
Lambda
同じリージョン
にします
S3にバケットを作る
15
SNSでメールを送る
16
送信許諾の確認
メールが届きます
S3で発動するLambda関数を作る
17
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);
}
});
};
今⽇日のお題を思い出す…
p 「AWS  LambdaとAPI  Gatewayでサーバレ
スなシステム構築に踏み出してみる」
19
AWS  Lambdaでサーバレスな
Webアプリを作りたい
LambdaをWebブラウザから    
直接呼び出すのはメンドイ
できなくは
ないけど…
そこでAmazon  API  Gateway  !
Amazon  API  Gatewayって?
p Lambdaを含むAWSの各サービスやインター
ネット上で公開されているサービスに対して、
REST  APIを提供することができる
n AWSのコンソールから簡単につくれる
n スケーラブル
n AWSの認証メカニズム(IAM)が利利⽤用できる
n APIをJavaScriptやAndroid、iOSアプリケーショ
ンから使うためのSDKが作れる
20
/prod/hello
/prod/hello
APIの構成
21
          /prod/hello
GET
PUT
POST
DELETE
:	
Stages	
Stages
本番環境とかテスト環境とかに
使い分けることを想定
Stage毎にCloudWatchの設定
や、キャッシュの設定ができる
作成したAPIはStageにデプロ
イすることで公開される
Resources
Methods
HelloLambdaのAPIを作ってみる
22
HelloLambdaのAPIを作ってみる
23
APIのテスト
24
APIの公開
25
ではWebブラウザから叩いてみる
26
JSON	
JSON	
S3にHTMLファイルと置いといて、そこからダウンロードするようにすれば、
EC2とか無しで、Webアプリケーションの運用ができる
※ただし、CORSの設定が必要
http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html
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>
まとめ
p AWS  Lambdaで簡単なイベントドリブンアプ
リケーションを作るのは、難しくない
n S3、DynamoDBの更更新に合わせたカスタム処理理
n 複数のサービスとLambdaを組み合わせてチェーン
p Amazon  API  Gatewayとの組み合わせで、
サーバ/ミドルウェアなど⽤用意せずに、
RESTfulなWebアプリケーションを作れる
n 本格的なモノを作るには、テスト⽅方法の確⽴立立とかが
課題か
n ちょっとした裏裏⽅方、運⽤用を助けるツールとして使う
のが良良い感じ
p   LambdaのコンソールからAPIを作った時に上⼿手く動かないのはよくわからない…
28
リファレンス
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

More Related Content

What's hot (20)

PDF
Serverless Architecture on AWS(20151023版)
Keisuke Nishitani
 
PDF
Serverless Architecture on AWS(20151121版)
Keisuke Nishitani
 
PDF
PHPという概念が存在しない退屈な世界 - AWS LambdaでWebAPP編
Yoshihiro Ohsuka
 
PDF
20150908 ”時間の流れ” という無限リストを扱うAWS Lambda
都元ダイスケ Miyamoto
 
PPTX
20160312 Jaws Days 2016 API Gateway+Lambda
Kazuki Ueki
 
PDF
画像処理をAWS LambdaのPythonで!
Tomotsune Murata
 
PDF
AWSにおける モバイル向けサービス及び事例紹介(20151211)
Keisuke Nishitani
 
PDF
Androidを中心に紐解くIoT
Keisuke Nishitani
 
PDF
Introducing Serverless Computing (20160802)
Keisuke Nishitani
 
PDF
Serverless Revolution
Keisuke Nishitani
 
PDF
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
Keisuke Nishitani
 
PDF
Big DataとContainerとStream - AWSでのクラスタ構成とストリーム処理 -
Amazon Web Services Japan
 
PDF
AWS Lambda Update
Keisuke Nishitani
 
PDF
AWSでAPI Gatewayから非同期でLambdaを起動してS3にファイルアップロードしようとしたらハマった話。
Takehiro Suemitsu
 
PDF
クラウド時代のソフトウェアアーキテクチャ
Keisuke Nishitani
 
PDF
Scale Your Business without Servers
Keisuke Nishitani
 
PDF
CloudFrontのリアルタイムログをKibanaで可視化しよう
Eiji KOMINAMI
 
PPTX
はじめてのAWS Lambda
Masaki Misawa
 
PDF
モバイル開発を支えるAWS Mobile Services
Keisuke Nishitani
 
PDF
AWS LambdaとDynamoDBがこんなにツライはずがない #ssmjp
Masahiro NAKAYAMA
 
Serverless Architecture on AWS(20151023版)
Keisuke Nishitani
 
Serverless Architecture on AWS(20151121版)
Keisuke Nishitani
 
PHPという概念が存在しない退屈な世界 - AWS LambdaでWebAPP編
Yoshihiro Ohsuka
 
20150908 ”時間の流れ” という無限リストを扱うAWS Lambda
都元ダイスケ Miyamoto
 
20160312 Jaws Days 2016 API Gateway+Lambda
Kazuki Ueki
 
画像処理をAWS LambdaのPythonで!
Tomotsune Murata
 
AWSにおける モバイル向けサービス及び事例紹介(20151211)
Keisuke Nishitani
 
Androidを中心に紐解くIoT
Keisuke Nishitani
 
Introducing Serverless Computing (20160802)
Keisuke Nishitani
 
Serverless Revolution
Keisuke Nishitani
 
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
Keisuke Nishitani
 
Big DataとContainerとStream - AWSでのクラスタ構成とストリーム処理 -
Amazon Web Services Japan
 
AWS Lambda Update
Keisuke Nishitani
 
AWSでAPI Gatewayから非同期でLambdaを起動してS3にファイルアップロードしようとしたらハマった話。
Takehiro Suemitsu
 
クラウド時代のソフトウェアアーキテクチャ
Keisuke Nishitani
 
Scale Your Business without Servers
Keisuke Nishitani
 
CloudFrontのリアルタイムログをKibanaで可視化しよう
Eiji KOMINAMI
 
はじめてのAWS Lambda
Masaki Misawa
 
モバイル開発を支えるAWS Mobile Services
Keisuke Nishitani
 
AWS LambdaとDynamoDBがこんなにツライはずがない #ssmjp
Masahiro NAKAYAMA
 

Similar to AWS LambdaとAPI Gatewayでサーバレスなシステム構築に踏み出してみる (20)

PPTX
Lambdaについて
Ara Jo
 
PPTX
Jawsday2015 lambda(なにができるの? EC2はもう不要?)
Shiraishi Masayuki
 
PDF
lambda-lgtm
Yoshiaki Yoshida
 
PDF
俺のLambda
Motokatsu Matsui
 
PDF
LambdaとMobileの美味しいかもしれない関係
Hiraku Komuro
 
PDF
20200528_AWSでサーバーレスなLINEBotLIFFアプリ環境をIaCな感じで構築するよ!.pdf
Sumihiro Kagawa
 
PPTX
re:invent2018 総ざらえ
真乙 九龍
 
PDF
Transfer for sftp 20181212
Noguchi Takaaki
 
PPTX
JAWS-UG 愛媛 第6回勉強会(Lambda)
Takahiro Kato
 
PPTX
AWS Lambda + Go
Kentaro Kawano
 
PDF
Serverless services on_aws_dmm_meetup_20170801
Amazon Web Services Japan
 
PPTX
AWS Lambdaと AWS API Gatewayを使ったREST API作り
iPride Co., Ltd.
 
PPTX
GAS + SaaS時々 AWSで自動化
Mitsuhiro Yamashita
 
PDF
CloudFormation/SAMのススメ
Eiji KOMINAMI
 
PPTX
Lambda勉強会
Shinji Miyazato
 
PDF
serverless framework + AWS Lambda with Python
masahitojp
 
PPTX
Introducing C# in AWS Lambda
Atsushi Fukui
 
PDF
プログラマブルクラウドの薦め
Shinpei Ohtani
 
PDF
aws mackerel twilio_handson_public
Tomoaki Sakatoku
 
PDF
rails + serverengineで
お手軽daemon
Akira Miki
 
Lambdaについて
Ara Jo
 
Jawsday2015 lambda(なにができるの? EC2はもう不要?)
Shiraishi Masayuki
 
lambda-lgtm
Yoshiaki Yoshida
 
俺のLambda
Motokatsu Matsui
 
LambdaとMobileの美味しいかもしれない関係
Hiraku Komuro
 
20200528_AWSでサーバーレスなLINEBotLIFFアプリ環境をIaCな感じで構築するよ!.pdf
Sumihiro Kagawa
 
re:invent2018 総ざらえ
真乙 九龍
 
Transfer for sftp 20181212
Noguchi Takaaki
 
JAWS-UG 愛媛 第6回勉強会(Lambda)
Takahiro Kato
 
AWS Lambda + Go
Kentaro Kawano
 
Serverless services on_aws_dmm_meetup_20170801
Amazon Web Services Japan
 
AWS Lambdaと AWS API Gatewayを使ったREST API作り
iPride Co., Ltd.
 
GAS + SaaS時々 AWSで自動化
Mitsuhiro Yamashita
 
CloudFormation/SAMのススメ
Eiji KOMINAMI
 
Lambda勉強会
Shinji Miyazato
 
serverless framework + AWS Lambda with Python
masahitojp
 
Introducing C# in AWS Lambda
Atsushi Fukui
 
プログラマブルクラウドの薦め
Shinpei Ohtani
 
aws mackerel twilio_handson_public
Tomoaki Sakatoku
 
rails + serverengineで
お手軽daemon
Akira Miki
 
Ad

More from Takashi Makino (9)

PPTX
ITエンジニアのしあわせ考
Takashi Makino
 
PDF
Dockerでらくらく開発・運用を体感しよう
Takashi Makino
 
PDF
GASろう
Takashi Makino
 
PDF
LMS on the Cloud
Takashi Makino
 
PDF
JJUG CCC 2014 Fall LT
Takashi Makino
 
PDF
ソフトウェア開発の見える化
Takashi Makino
 
PDF
HTTPとサーブレット
Takashi Makino
 
PDF
心はソフトウェアエンジニア、仕事は経営者のすゝめ
Takashi Makino
 
PDF
SIerにおくる、アジャイルプロセスの実践
Takashi Makino
 
ITエンジニアのしあわせ考
Takashi Makino
 
Dockerでらくらく開発・運用を体感しよう
Takashi Makino
 
GASろう
Takashi Makino
 
LMS on the Cloud
Takashi Makino
 
JJUG CCC 2014 Fall LT
Takashi Makino
 
ソフトウェア開発の見える化
Takashi Makino
 
HTTPとサーブレット
Takashi Makino
 
心はソフトウェアエンジニア、仕事は経営者のすゝめ
Takashi Makino
 
SIerにおくる、アジャイルプロセスの実践
Takashi Makino
 
Ad

AWS LambdaとAPI Gatewayでサーバレスなシステム構築に踏み出してみる