Más contenido relacionado La actualidad más candente (20) Similar a Serverless Architecture on AWS(20151023版) (20) Más de Keisuke Nishitani (10) Serverless Architecture on AWS(20151023版)3. ⾃自⼰己紹介
{
"Name" : "⻄西⾕谷圭介",
"Twitter" : "@Keisuke69",
"Profile" : {
"Role" : "Solution Architect",
"Customers": [
"Web Services",
"Start-up"
],
"Services" : [
"Amazon API Gateway”,
"AWS Lambda”,
"All Mobile Services"
]
}
}
19. サーバレスアーキテクチャ
JavaScript/ネイティブアプリによるUI実装
JavaScriptおよび静的コンテンツはS3に保存して配
信
• CloudFront経由の配信
ロジックはAPI化
• API Gatewayを利利⽤用
• バックエンドとしてLambdaを利利⽤用
JavaScript/iOS・AndroidはAPIを呼び出し
• Viewの構築は各クライアント上で⾏行行う
Lambdaファンクションから各AWSサービスを利利⽤用
API GW/LambdaともにEC2を利利⽤用した
システムへのアクセスも当然可能
Lambda
API Gateway
AWSサービス
クラウドサービスを活⽤用することでサーバ(EC2)を利利⽤用せずに構成するアーキテクチャ
S3
CloudFront
解決される課題
不不要(各サービスが適切切にハンドリング)
不不要
インフラ構築 → 不不要
インフラの運⽤用管理理
• キャパシティ
• スケール
• デプロイ
• 耐障害性
• モニタリング
• ロギング
• セキュリティパッチの適⽤用
ビジネスの差別化には直接繋がらない機能のアプリ実装
• 認証
• スロットリング
• スケーラビリティの確保
29. easy ten
Mobile app that helps you learn
10 new, foreign words a day
Users have learned
170 000 000+
new words
1 200 000+
downloads
• Featured in 85+ countries
• Top 5 grossing apps overall (Russia)
• Top 8 grossing apps overall (Brazil)
38. サンプル:Forward AWS Events to External Endpoints
http://danilop.net/aws/2015/07/26/sns2ifttt/ | https://github.com/danilop/SNS2IFTTT
AWS
Lambda
Amazon
SNS
IFTTT via
the Maker
channel
Amazon
CloudWatch Events
Auto Scaling
46. イベントソース
現時点では以下のAWSサービスをサポート
• Amazon S3
• Amazon Kinesis
• Amazon DynamoDB Streams(Preview)
• Amazon Cognito
• Amazon SNS
• Alexa AppKit
• Amazon SWF
• Amazon SES inbound mail
• Amazon CloudWatch Logs
• Amazon Connected Home (Preview)
• AWS IoT
59. Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利⽤用したAPI定義
/users:
post:
summary: Registers a new user
consumes:
- application/json
produces:
- application/json
parameters:
- name: NewUser
in: body
schema:
$ref: '#/definitions/User’
x-amazon-apigateway-integration:
type: aws
uri: arn:aws:apigateway:us-east-1:lambda:path/2015-03-31...
credentials: arn:aws:iam::964405213927:role/pet_store_lambda_invoke
...
responses:
200:
schema:
$ref: '#/definitions/RegisterUserResponse'
60. Unauthenticated
APIコールの流流れ
Mobile apps AWS Lambda lambdaHandler
(アプリ)
Register
Login
API Gateway
Authenticated
Mobile apps AWS Lambda lambdaHandler
(アプリ)
ListPets
GetPet
API Gateway
Assume Role
CreatePet
Sigv4 Invoke with
caller credentials
Authorized by IAM
Cognito
DynamoDB
61. HTTPステータスコード
Register action
Login action
Create Pet action
Get Pet action
BadRequestException
BAD_REQUEST +
Stack Trace
InternalErrorException
INTERNAL_ERROR +
Stack Trace
lambdaHandler Amazon API
Gateway
responses:
"default":
statusCode: "200"
"BAD.*":
statusCode: "400"
"INT.*":
statusCode: "500"
62. ユーザ登録とログイン処理理
• POST
• ユーザ名/パスワードを受け取る
• パスワードを暗号化し、DynamoDBにユー
ザアカウントを保存
• Amazon Cognitoを呼び出してクレデンシャ
ルを⽣生成
• ユーザとクレデンシャルをレスポンス
/users
• POST
• ユーザ名とパスワードを受け取る
• DynamoDBにあるデータとマッチングして
ユーザを認証
• Amazon Cognitoを呼び出してクレデンシャ
ルを⽣生成
• テンポラリのクレデンシャルを返却
/login
64. クレデンシャルについて
Login APIの呼び出し
(認証不要)
Client API Gateway Backend
/login
Login
Action
ユーザマスタ
Credentials
verified
Get OpenID Token
クレデンシャルの取得
(リクエストの署名に
利用)
Identity ID +
Token
Get Credentials
Access Key +
Secret Key +
Session Token
/login
2
3
1
65. リソース
• POST
• Petモデルを受け取る
• DynamoDBに保存
• 新規PetIdを返却
• GET
• DynamoDBに保存されているPetのリスト
を返却
/pets
• GET
• Pet idをパスから読み取る
• Lambda functionへパスパラメータをパス
(Mapping Templateを利利⽤用)
• DynamoDBから該当IDのPet情報を取得
• Petのモデルを返却
/pets/{petId}
67. IAMロール例例
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:Scan",
"lambda:InvokeFunction",
"execute-api:invoke"
],
"Resource": [
"arn:aws:dynamodb:us-east-1:xxxxxx:table/test_pets",
"arn:aws:lambda:us-east-1:xxxxx:function:PetStore”,
"arn:aws:execute-api:us-east-1:xxxx:API_ID/*/POST/pets"
]
}
]
}
以下のサービスへのア
クセスを許可
• DynamoDB
• API Gateway
• Lambda
特定リソースのみアク
セスを許可
69. Petモデル
{
"properties":{
"petId":{
"type":"string",
"description":"The generated unique identifier
for the new pet"
},
"petType":{
"type":"string",
"description":"Free text pet type"
},
"petName":{
"type":"string",
"description":"Free text pet name"
},
"petAge":{
"type":"integer",
"format":"int32",
"description":"Age of the new pet"
}
},
"definitions":{
}
}
モデルはリソースごとに定義する
• 同⼀一リソースの全てのメソッドで利利⽤用
する
各メソッドのリクエストとレスポ
ンスで異異なるモデルを利利⽤用するこ
とも可能
• フォーマット変換など
76. AWS Mobile Hub (Beta)
1. 単⼀一の統合されたコンソール
2. 事前に⽤用意された機能群
3. サービスを⾃自動でプロビジョニング
4. ⾃自動⽣生成されたアプリケーション
つまり、数分でAWS上にアプリを構築
80. アプリへのプッシュ通知
• iOS/Android
• 1:1 もしくはトピック
Quickstart App demonstrates features
クイックスタートアプリでは以下の機能
をデモ
• 通知のEnable/Disable
• SNSを使ったトークンの⾃自動登録
• サブスクライブするトピックの選択
Powered by Amazon SNS
例例:Push通知
82. AWS Mobile Hub(BETA)
• AWSを使ったモバイルアプリの開発を簡単に
• ユーザサインインといった典型的ユースケースごとの
スターターコードを提供
• 関連サービスの設定と構築を⾃自動で
• AWS Management Consoleから利利⽤用可能
• 現在はUS-East-1のみ、東京リージョンと
ダブリンは近くサポート予定
• AWS Mobile Hub⾃自体のご利利⽤用は無料料
※利利⽤用する各サービスの費⽤用はかかります
86. 参考資料料
v API Gateway Secure Pet Store https://github.com/awslabs/api-gateway-secure-pet-store
v Keynote Videos on YouTube
v Breakout Sessions Videos on YouTube
v Architecture
v Big Data & Analytics
v Compute
v Databases
v Developer Tools
v DevOps
v Gaming
v IT Strategy & Migration
v Mobile Developer & IoT
v Networking
v Security & Compliance
v Spotlight
v Storage & Content Delivery
v Breakout Sessions Slides on SlideShare
v Breakout Sessions Audios on iTunes Podcast