Contenu connexe
Similaire à クラウドネイティブ化する未来 (20)
Plus de Keisuke Nishitani (14)
クラウドネイティブ化する未来
- 2. ⾃自⼰己紹介
{
"Name" : "西谷圭介",
"Twitter" : "@Keisuke69",
"Profile" : {
"Role" : "Solution Architect",
"Customers": [
"Web Services",
"Start-up"
],
"Services" : [
"AWS Lambda",
"Amazon API Gateway",
"All Mobile Services"
]
}
}
- 9. 従来の⼀一般的なWebアーキテクチャ
• Web/APサーバをEC2で構築
• ELBを配置し、スケーラブルな構成に
• Webサーバは冗⻑⾧長化
• DBはRDSによるMulti AZ構成、もしくはEC2上で構築
• EC2等のインフラは常時稼働
– オートスケーリングするとしても最低限必要な分は常
時起動
【課題】
• インフラ構築
• インフラの運⽤用管理理
– キャパシティ
– スケール
– デプロイ
– 耐障害性
– モニタリング
– ロギング
– セキュリティパッチの適⽤用
• ビジネスの差別化には直接繋がらない機能のアプリ実装
– 認証
– スロットリング
– スケーラビリティの確保
• etc
Web
DB
LB
- 10. API Gateway + Lambdaが実現する
サーバレスアーキテクチャ
Lambda
API Gateway
AWSサービス
クラウドサービスを活⽤用することでサーバ(EC2)を利利⽤用せずに構成するアーキテクチャ
S3
CloudFront
- 11. API Gateway + Lambdaが実現する
サーバレスアーキテクチャ
• JavaScript/ネイティブアプリによるUI実装
Lambda
API Gateway
AWSサービス
クラウドサービスを活⽤用することでサーバ(EC2)を利利⽤用せずに構成するアーキテクチャ
S3
CloudFront
- 12. API Gateway + Lambdaが実現する
サーバレスアーキテクチャ
• JavaScript/ネイティブアプリによるUI実装
• JavaScriptおよび静的コンテンツはS3に保存し
て配信
– CloudFront経由の配信
Lambda
API Gateway
AWSサービス
クラウドサービスを活⽤用することでサーバ(EC2)を利利⽤用せずに構成するアーキテクチャ
S3
CloudFront
- 13. API Gateway + Lambdaが実現する
サーバレスアーキテクチャ
• JavaScript/ネイティブアプリによるUI実装
• JavaScriptおよび静的コンテンツはS3に保存し
て配信
– CloudFront経由の配信
• ロジックはAPI化
– API Gatewayを利利⽤用
– バックエンドとしてLambdaを利利⽤用
Lambda
API Gateway
AWSサービス
クラウドサービスを活⽤用することでサーバ(EC2)を利利⽤用せずに構成するアーキテクチャ
S3
CloudFront
- 14. API Gateway + Lambdaが実現する
サーバレスアーキテクチャ
• JavaScript/ネイティブアプリによるUI実装
• JavaScriptおよび静的コンテンツはS3に保存し
て配信
– CloudFront経由の配信
• ロジックはAPI化
– API Gatewayを利利⽤用
– バックエンドとしてLambdaを利利⽤用
• JavaScript/iOS・AndroidはAPIを呼び出し
– Viewの構築は各クライアント上で⾏行行うLambda
API Gateway
AWSサービス
クラウドサービスを活⽤用することでサーバ(EC2)を利利⽤用せずに構成するアーキテクチャ
S3
CloudFront
- 15. API Gateway + Lambdaが実現する
サーバレスアーキテクチャ
• JavaScript/ネイティブアプリによるUI実装
• JavaScriptおよび静的コンテンツはS3に保存し
て配信
– CloudFront経由の配信
• ロジックはAPI化
– API Gatewayを利利⽤用
– バックエンドとしてLambdaを利利⽤用
• JavaScript/iOS・AndroidはAPIを呼び出し
– Viewの構築は各クライアント上で⾏行行う
• Lambdaファンクションから各AWSサービスを
利利⽤用
Lambda
API Gateway
AWSサービス
クラウドサービスを活⽤用することでサーバ(EC2)を利利⽤用せずに構成するアーキテクチャ
S3
CloudFront
- 16. API Gateway + Lambdaが実現する
サーバレスアーキテクチャ
• 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
- 17. API Gateway + Lambdaが実現する
サーバレスアーキテクチャ
• 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
• インフラ構築 → 不不要
• インフラの運⽤用管理理
– キャパシティ
– スケール
– デプロイ
– 耐障害性
– モニタリング
– ロギング
– セキュリティパッチの適⽤用
• ビジネスの差別化には直接繋がらない機能のアプリ実装
– 認証
– スロットリング
– スケーラビリティの確保
解決される課題
不不要(各サービスで適切切にハンドリング)
不不要
- 21. サーバレスアーキテクチャのメリット
• アプリの開発に多くのメリット
– バックエンド側のコードが減るため開発コストを最⼩小化
– バックエンド側のサーバが減るため運⽤用コストを最⼩小化
– AWSによってマネージされるため、スケーラビリティやキャパシティ、セキュリティの⼼心
配不不要
– ⾮非常にコスト効率率率化が⾼高いため、多くの場合コスト減が⾒見見込める
• 必要に応じてEC2も導⼊入できる安⼼心感
– 汎⽤用的なサービスでは実現の難しい、ビジネス固有の要件に関してはEC2を利利⽤用して実装
– EC2を利利⽤用する部分についてもCodeDeployやElastic Beanstalk、OpsWorks等で⾃自動化
• 開発者がビジネスにフォーカスできる
- 28. イベントソース
• 現時点では以下のAWSサービスをサポート
– Amazon S3
– Amazon Kinesis
– Amazon DynamoDB Streams(Preview)
– Amazon Cognito
– Amazon SNS
– Alexa AppKit
– Amazon SWF
• サーバレスなバックエンドとしての利利⽤用
– AWS SDKおよびAWS Mobile SDKを利利⽤用してLambdaファンクションを同
期呼び出し
– 簡単・スケーラブルなモバイルバックエンドとして
- 38. ユーザ登録とログイン処理理
• POST
• ユーザ名/パスワードを受け取る
• パスワードを暗号化し、DynamoDBにユーザア
カウントを保存
• Amazon Cognitoを呼び出してクレデンシャルを
生成
• ユーザとクレデンシャルをレスポンス
/users
• POST
• ユーザ名とパスワードを受け取る
• DynamoDBにあるデータとマッチングしてユー
ザを認証
• Amazon Cognitoを呼び出してクレデンシャルを
生成
• テンポラリのクレデンシャルを返却
/login
- 39. クレデンシャルについて
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.
- 40. リソース
• POST
• Petモデルを受け取る
• DynamoDBに保存
• 新規PetIdを返却
• GET
• DynamoDBに保存されているPetのリストを
返却
/pets
• GET
• Pet idをパスから読み取る
• Lambda functionへパスパラメータをパス
(Mapping Templateを利用)
• DynamoDBから該当IDのPet情報を取得
• Petのモデルを返却
/pets/{petId}
- 42. IAMロール例例
{
"Version": "2012-‐‑‒10-‐‑‒17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:*",
"execute-‐‑‒api:*",
"lambda:*"
],
"Resource": [
"*"
]
}
]
}
• 以下のサービスへのアク
セスを許可
– DynamoDB
– API Gateway
– Lambda
• 各サービスの全リソース
へのアクセスを許可
- 44. 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":{
}
}
• モデルはリソースごとに定義
する
– 同⼀一リソースの全てのメソッドで利利⽤用
する
• 各メソッドのリクエストとレ
スポンスで異異なるモデルを利利
⽤用することも可能
– フォーマット変換など