aws lambda and amazon api gateway

Post on 22-Jan-2017

2.999 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Lambda & API Gateway Amazon Web Services Japan

Shinpei Ohtani(ohtani@)

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

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

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

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

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

へ変わる⽇も近い

クラウドを使うと

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

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

EC2

RDS

Docker

ECS

Lambda

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

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

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

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

API Gateway

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

とはどういったものか

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

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

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

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

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

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

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

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

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

Less ops, more code

Lambda API Gateway

API Gateway Lambda

AWS Lambda

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

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

AWS Lambda

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

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

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

AWS Lambda

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

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

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

例えば、

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

例えば、

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

AWS Lambda以前

解決⽅法は複雑

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

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

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

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

AWS Lambda以降

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

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

AWS Lambda Amazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

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

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

AWS Lambda Amazon DynamoDB

Table and Stream プッシュ通知

別テーブルを更新

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

追加したい

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

そのままDynamoDBに保存

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

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

AWS Lambdaのお客様

Lambdaの事例: FireEye

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

AWS Lambda Updates

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

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

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

Lambda API Gateway

Amazon API Gateway

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

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

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

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

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

Amazon API Gateway

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

APIキーの作成と配布

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

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

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

AWS Lambda

Amazon API Gateway

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

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

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

Swaggerのサポート

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

従来のアーキテクチャ

・認証API・データ保存API

Web DB

LB

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

Lambda(ロジック)

API Gateway DynamoDB(データ保存)

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

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

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

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

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

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

API作成の流れ

1.  新規APIセットを作成

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

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

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

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

ことが可能

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

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

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

Pet Store

/pets

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

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

事例

まとめ

API GatewayとLambdaの活かし⽅

Microservices

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

Cloud “glue”

External interface wrapper

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

外部サービスA

外部サービスB

外部サービスC

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

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

Cloud “Servlet container” without EC2

Sync invocation

Async invocation

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

PC

モバイル

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

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

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

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

M2M interface

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

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

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

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

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

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

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(); }); };

top related