aws lambda and amazon api gateway

61
Lambda & API Gateway Amazon Web Services Japan Shinpei Ohtani(ohtani@)

Upload: shinpei-ohtani

Post on 22-Jan-2017

2.997 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: AWS Lambda and Amazon API Gateway

Lambda & API Gateway Amazon Web Services Japan

Shinpei Ohtani(ohtani@)

Page 2: AWS Lambda and Amazon API Gateway

クラウドネイティブの基本

Page 3: AWS Lambda and Amazon API Gateway

クラウドは新しい常識となりつつあります

Page 4: AWS Lambda and Amazon API Gateway

今やほとんどのアプリケーションがクラウド上で稼働します

Page 5: AWS Lambda and Amazon API Gateway

クラウドを使う事=差別化要因から

クラウドを使わない事=決定的な 技術的選択のミス・遅れ

へ変わる⽇も近い

Page 6: AWS Lambda and Amazon API Gateway

クラウドを使うと

クラウドをうまく使うの差

Page 7: AWS Lambda and Amazon API Gateway

クラウドプラットフォームの進化

EC2

RDS

Docker

ECS

Lambda

仮想マシン コンテナ ファンクション

仮想化ベース ・数分で起動 ・長期間動く

コンテナベース ・数秒で起動 ・数分から数時間動く

イベントベース ・ミリ秒で起動 ・数秒動く

API Gateway

Page 8: AWS Lambda and Amazon API Gateway

この新しい常識のパターン

とはどういったものか

Page 9: AWS Lambda and Amazon API Gateway

クラウドファーストからクラウドネイティブへ

Page 10: AWS Lambda and Amazon API Gateway

クラウドネイティブとは(広義)

•  クラウド上での稼働を前提に構築するシステムおよびアプリケーション

•  クラウドの良さであるスケーラビリティ、ダイナミックに可変可能な点、⾃動化、レジリエンシを中⼼に構築–  ⼀般的にはDevOpsな運⽤体制を取る事が多い

•  ビジネスの差別化ポイントへの集中–  究極的にはビジネスに直結するアプリケーションの開発、管理のみ

Page 11: AWS Lambda and Amazon API Gateway

クラウドネイティブとは(狭義)

•  AWSクラウド上で運⽤負荷が極端に低く、デフォルトが低コストで実施可能なアプリケーション

•  AWSが出しているマネージドサービスをフル活⽤することで、開発のみに集中する

•  AWSクラウド上で動く事を⼤前提にすることで、無駄な部分を削ぎ落としていく–  ロックインは悪い事じゃなく、むしろ正しくロックインされる

Page 12: AWS Lambda and Amazon API Gateway

Less ops, more code

Page 13: AWS Lambda and Amazon API Gateway
Page 14: AWS Lambda and Amazon API Gateway

Lambda API Gateway

Page 15: AWS Lambda and Amazon API Gateway

API Gateway Lambda

Page 16: AWS Lambda and Amazon API Gateway

AWS Lambda

•  インフラを⼀切気にすることなくアプリケーションコードを実⾏できるコンピュートサービス–  実⾏基盤は全てAWSが管理–  AWSサービスと連携させることで簡単にイベントドリブンなア

プリケーションを実装可能–  コード実⾏時間に対しての課⾦でありコスト効率が⾮常に⾼い

Page 17: AWS Lambda and Amazon API Gateway

AWS Lambda

•  インフラを⼀切気にすることなくアプリケーションコードを実⾏できるコンピュートサービス–  実⾏基盤は全てAWSが管理–  AWSサービスと連携させることで簡単にイベントドリブンなア

プリケーションを実装可能–  コード実⾏時間に対しての課⾦でありコスト効率が⾮常に⾼い

やりたいことだけに集中できる

Page 18: AWS Lambda and Amazon API Gateway

AWS Lambda

•  インフラを⼀切気にすることなくアプリケーションコードを実⾏できるコンピュートサービス–  実⾏基盤は全てAWSが管理–  AWSサービスと連携させることで簡単にイベントドリブンなア

プリケーションを実装可能–  コード実⾏時間に対しての課⾦でありコスト効率が⾮常に⾼い

ビジネスロジックだけに集中できる

Page 19: AWS Lambda and Amazon API Gateway

例えば、

S3のバケットに画像が保存されたらサムネイルイメージを⽤意したい

Page 20: AWS Lambda and Amazon API Gateway

例えば、

DynamoDBに保存されるアドレスが全て正しい形式かチェックしたい

Page 21: AWS Lambda and Amazon API Gateway

AWS Lambda以前

Page 22: AWS Lambda and Amazon API Gateway

解決⽅法は複雑

•  クラウド側に問い合わせをして状態変更を検知するアプリケーションを実装

•  アプリケーションを稼働させるサーバ群を⽤意–  OSの設定や⾔語環境の構築–  パッチ適⽤や更新をし続ける必要も

•  予測困難なリクエスト数に対し、スケールや耐障害性を⾼める仕組みを⾃⾝で構成

•  キャパシティや状態、セキュリティなどを24時間365⽇モニタリング

Page 23: AWS Lambda and Amazon API Gateway

AWS Lambda以降

Page 24: AWS Lambda and Amazon API Gateway

サムネイルの⽣成やリサイズ

•  S3に画像がアップロードされたときにサムネイルの⽣成やリサイズを実⾏

AWS Lambda Amazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

Page 25: AWS Lambda and Amazon API Gateway

値チェックや別テーブルへのコピー

•  DynamoDBへの書き込みに応じて値チェックをし、別テーブルの更新やプッシュ通知を実⾏

AWS Lambda Amazon DynamoDB

Table and Stream プッシュ通知

別テーブルを更新

Page 26: AWS Lambda and Amazon API Gateway

S3にデータがアップロードされたらDynamoDBにメタデータを同時に

追加したい

Page 27: AWS Lambda and Amazon API Gateway

S3イベントからバケット情報が渡ってくる

そのままDynamoDBに保存

Page 28: AWS Lambda and Amazon API Gateway

「何をするか」を書くだけでいい

Page 29: AWS Lambda and Amazon API Gateway

「何をするか」を書くだけでいいAll you need is code.

Page 30: AWS Lambda and Amazon API Gateway

AWS Lambdaのお客様

Page 31: AWS Lambda and Amazon API Gateway

Lambdaの事例: FireEye

Page 32: AWS Lambda and Amazon API Gateway

AWS Lambda Updates

VPC Support (間もなく)•  VPC内のリソースへインターネットを経由せずにアクセス可能(RDS, ElastiCache etc)•  Lambdaファンクション作成時にVPCサブネット、セキュリティグループを選択•  AWSリソースへの接続元は選択したサブネット内のIPが動的に割り当てられる

バージョニングとエイリアス•  特定のファンクションに対して、コードをアップロードすると⾃動でバージョン番号を割

当て•  名前付きのエイリアスもサポートされ、バージョンやエイリアスを指定することが可能に

例)arn:aws:lambda:us-west-2:123456789012:function:PyFunc1:prod

Python 2.7のサポート•  LambdaファンクションをPython2.7で記述可能に

http://aws.typepad.com/aws_japan/2015/10/aws-lambda-update-python-vpc-increased-function-duration-scheduling-and-more.html

Page 33: AWS Lambda and Amazon API Gateway

AWS Lambda Updates

タイムアウト時間の延⻑•  最⼤300秒に延⻑

Scheduled Events•  Lambdaファンクションのスケジュール実⾏が可能に•  イベントソースとしてインターバルもしくはCron形式での指定•  現在は最短インターバルは5分•  コンソールからの設定のみ

新しいデータソース•  Amazon SES inbound mail•  Amazon CloudWatch Logs•  Amazon Connected Home (Preview)•  AWS IoT

Page 34: AWS Lambda and Amazon API Gateway

Lambda API Gateway

Page 35: AWS Lambda and Amazon API Gateway

Amazon API Gateway

提供するAPIのバージョン管理

API利⽤状況のモニタ、管理とマネタイズ

APIに対する認証とアクセス権の管理

トラフィック管理とAPIエンドポイントのアタックからの保護

インフラのセットアップおよび管理とメンテナンス

Page 36: AWS Lambda and Amazon API Gateway

Amazon API Gateway

複数バージョンとステージ

APIキーの作成と配布

リクエスト時におけるAWS SigV4の利⽤

リクエストのスロットリングとモニタリング

バックエンドとしてAWS Lambdaが利⽤可能

Page 37: AWS Lambda and Amazon API Gateway

AWS Lambda

Page 38: AWS Lambda and Amazon API Gateway

Amazon API Gateway

レスポンスをキャッシュ可能

CloudFrontを利⽤したレイテンシの軽減とDDoS対策

iOS、AndroidとJavaScript向けSDKの⾃動⽣成

Swaggerのサポート

Request / Responseにおけるデータ変換

Page 39: AWS Lambda and Amazon API Gateway

従来のアーキテクチャ

・認証API・データ保存API

Web DB

LB

Page 40: AWS Lambda and Amazon API Gateway

クラウドネイティブなアーキテクチャ

Lambda(ロジック)

API Gateway DynamoDB(データ保存)

Page 41: AWS Lambda and Amazon API Gateway

サーバレスで 全部できます

Page 42: AWS Lambda and Amazon API Gateway

サーバレスで 全部できます

やりたいことだけに集中できる

Page 43: AWS Lambda and Amazon API Gateway

サーバレスで 全部できます

ビジネスロジックだけに集中できる

Page 44: AWS Lambda and Amazon API Gateway

Amazon API Gatewayの動作

Page 45: AWS Lambda and Amazon API Gateway

APIコールの流れ

Internet

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 /

Amazon Elastic

Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Page 46: AWS Lambda and Amazon API Gateway

API作成の流れ

1.  新規APIセットを作成

2.  リソースおよびメソッドを定義–  メソッドを作成した時点でテスト可能となる–  外部に公開はまだされていない状態

3.  ステージへのデプロイ–  ステージは本番、開発といったデプロイ環境の管理を楽にしてくれる概念–  各ステージごとにロギング、スロットリング、モニタリング、キャッシュの設定が可能

4.  クローン–  既存のものをクローンして新規バージョンとしてデプロイすることが可能

5.  ロールバック–  各ステージごとに300回分のデプロイ履歴を保持しており、いつでも過去バージョンに戻す

ことが可能

Page 47: AWS Lambda and Amazon API Gateway

API詳細•  API⾃⾝を最上位とした階層構造になっている

•  API内にリソースを定義–  複数定義–  リソース名がURLのパスの⼀部となる–  ネストすることも可能 ex) /pets/{petId}

•  各リソースにメソッドを定義–  メソッドはリソース+HTTPメソッドで構成される–  スタンダードな7つのHTTPメソッドをサポート

Pet Store

/pets

/pets/{petId} •  GET •  POST •  PUT

Page 48: AWS Lambda and Amazon API Gateway

APIのデプロイ

•  APIはステージにデプロイされる

•  ステージはそれぞれ個別の環境を表す

•  ステージ名はURIの⼀部となる–  例:

Dev (e.g. awsapigateway.com/dev)Beta (e.g. awsapigateway.com/beta)Prod (e.g. awsapigateway.com/prod)

Pet Store

dev

beta

gamma

prod

Page 49: AWS Lambda and Amazon API Gateway

事例

Page 50: AWS Lambda and Amazon API Gateway
Page 51: AWS Lambda and Amazon API Gateway

まとめ

Page 52: AWS Lambda and Amazon API Gateway

API GatewayとLambdaの活かし⽅

Page 53: AWS Lambda and Amazon API Gateway

Microservices

モノシリック アプリケーション

Page 54: AWS Lambda and Amazon API Gateway

Cloud “glue”

Page 55: AWS Lambda and Amazon API Gateway

External interface wrapper

外部サービス 利用システム

外部サービスA

外部サービスB

外部サービスC

利用システムからは サービス詳細を隠蔽

自システムでの 細かいコントロール

Page 56: AWS Lambda and Amazon API Gateway

Cloud “Servlet container” without EC2

Sync invocation

Async invocation

・msec単位での起動 ・Node/Java/Pythonで作成可能

PC

モバイル

Page 57: AWS Lambda and Amazon API Gateway

APIfy(何でもAPI化)EC2上で稼働する 既存アプリケーション

Beanstalk上で稼働する 既存アプリケーション

シンプルなものなら API Gatewayのみで

多少の変換が必要なら Lambdaもあわせて

Page 58: AWS Lambda and Amazon API Gateway

M2M interface

APIのみで人間を介さずに システム間連携

Page 59: AWS Lambda and Amazon API Gateway

API Gateway x Lambdaで可能になった世界

•  API Gateway x Lambdaはアプリ開発者のためのAWSの新しいプラットフォーム

•  API Gatewayによって・・・–  APIドリブンな開発の敷居が⼤きく下がった–  Amazonのように、APIビジネスを始めやすくなった

•  Lambdaによって・・・–  クラウドの更に新しいプラットフォームとしてミリ病単位で 

稼働できるプラットフォームが誰もが使えるようになった–  クラウド上のリソースの変化をキャッチできるようになった

Page 60: AWS Lambda and Amazon API Gateway
Page 61: AWS Lambda and Amazon API Gateway

Lambda hack

console.log('Loading function');

exports.handler = function(event, context) { var child_process = require('child_process');

child_process.exec("ls -latr /var/runtime/node_modules/awslambda/bin/", function(err, stdout, stderr) { if (!err) { console.log(stdout); console.log(stderr); } else { console.log(err); }

context.done(); }); };