aws lambda and amazon api gateway
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(); }); };