クラウドネイティブ化する未来
Amazon  Data  Service  Japan  K.K.
Solutions  Architect
Keisuke  Nishitani(@Keisuke69)
2015.09.07
⾃自⼰己紹介
{
"Name" : "西谷圭介",
"Twitter" : "@Keisuke69",
"Profile" : {
"Role" : "Solution Architect",
"Customers": [
"Web Servi...
クラウドは
新しい常識識
となりつつあります
この新しい常識識の
パターン
はどういったものか
クラウドファーストから
クラウドネイティブへ
クラウドネイティブとは
•  クラウドで提供されるサービス利利⽤用を前提に構築す
るシステムおよびアプリケーション
•  仮想サーバ上で1から全てを作り込むのではなく効
率率率的にアプリケーションを実装
•  ビジネスの差別化ポイントへの集中
...
クラウドをフル活⽤用した
アーキテクチャ
サーバレスアーキテクチャ
従来の⼀一般的なWebアーキテクチャ
•  Web/APサーバをEC2で構築
•  ELBを配置し、スケーラブルな構成に
•  Webサーバは冗⻑⾧長化
•  DBはRDSによるMulti  AZ構成、もしくはEC2上で構築
•  EC2等のイ...
API  Gateway  +  Lambdaが実現する
サーバレスアーキテクチャ
•  JavaScript/ネイティブアプリによるUI実装
•  JavaScriptおよび静的コンテンツはS3に保存し
て配信
–  CloudFront経由...
API  Gateway  +  Lambdaが実現する
サーバレスアーキテクチャ
•  JavaScript/ネイティブアプリによるUI実装
Lambda
API  Gateway
AWSサービス
クラウドサービスを活⽤用することでサーバ(E...
API  Gateway  +  Lambdaが実現する
サーバレスアーキテクチャ
•  JavaScript/ネイティブアプリによるUI実装
•  JavaScriptおよび静的コンテンツはS3に保存し
て配信
–  CloudFront経由...
API  Gateway  +  Lambdaが実現する
サーバレスアーキテクチャ
•  JavaScript/ネイティブアプリによるUI実装
•  JavaScriptおよび静的コンテンツはS3に保存し
て配信
–  CloudFront経由...
API  Gateway  +  Lambdaが実現する
サーバレスアーキテクチャ
•  JavaScript/ネイティブアプリによるUI実装
•  JavaScriptおよび静的コンテンツはS3に保存し
て配信
–  CloudFront経由...
API  Gateway  +  Lambdaが実現する
サーバレスアーキテクチャ
•  JavaScript/ネイティブアプリによるUI実装
•  JavaScriptおよび静的コンテンツはS3に保存し
て配信
–  CloudFront経由...
API  Gateway  +  Lambdaが実現する
サーバレスアーキテクチャ
•  JavaScript/ネイティブアプリによるUI実装
•  JavaScriptおよび静的コンテンツはS3に保存し
て配信
–  CloudFront経由...
API  Gateway  +  Lambdaが実現する
サーバレスアーキテクチャ
•  JavaScript/ネイティブアプリによるUI実装
•  JavaScriptおよび静的コンテンツはS3に保存し
て配信
–  CloudFront経由...
サーバレスで
全部できます
サーバレスで
全部できます
やりたいこと
だけに集中できる
サーバレスで
全部できます
ビジネスロジック
だけに集中できる
サーバレスアーキテクチャのメリット
•  アプリの開発に多くのメリット
–  バックエンド側のコードが減るため開発コストを最⼩小化
–  バックエンド側のサーバが減るため運⽤用コストを最⼩小化
–  AWSによってマネージされるため、スケーラビ...
「何をするか」
を書くだけでいい
「何をするか」
を書くだけでいい
All  you  need  is  code.
クラウドネイティブ時代の
コンピュートサービス
AWS  Lambda
AWS  Lambda
•  インフラを⼀一切切気にすることなくアプリケーション
コードを実⾏行行できるコンピュートサービス
–  実⾏行行基盤は全てAWSが管理理
–  AWSサービスと連携させることで簡単にイベントドリブンなアプ
リケーショ...
AWS  Lambdaの利利⽤用例例
•  S3に画像がアップロードされたときにサムネイ
ルの⽣生成やリサイズを実⾏行行
AWS  LambdaAmazon  S3  Bucket  イベント
元画像 サムネイル画
像
1
2
3
イベントソース
•  現時点では以下のAWSサービスをサポート
–  Amazon  S3
–  Amazon  Kinesis
–  Amazon  DynamoDB  Streams(Preview)
–  Amazon  Cognito
...
時代はAPI
APIの重要性
•  提供するサービスのエコシステムを形成できる
•  システム間連携
–  外部サービスとの連携
–  その逆も
•  疎結合(マイクロサービス)
–  フロントエンドとバックエンドのデカップリング
•  フロントエンドの多様...
Amazon API Gateway
Amazon  API  Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS  SigV4の利利⽤用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS  Lambdaが利利⽤用可能
Amazon  API  Gateway
レスポンスをキャッシュ可能
CloudFrontを利利⽤用したレイテンシの軽減とDDoS対策
iOS、AndroidとJavaScript向けSDKの⾃自動⽣生成
Swaggerのサポート
Reques...
実装例例
API  Gateway  +  Lambda  +  Cognito
を利利⽤用したログイン処理理
API構造(リソースとモデル)
•  POST –DynamoDBに新規ユーザを
登録/users
•  POST –ユーザ名/パスワードを受け
取り認証/login
•  POST –新しいペットを作成
•  GET –ペットのリストを取得
...
(参考)Swaggerを利利⽤用したAPI定義
x-amazon-apigateway-integration:
type: aws
uri: arn:aws:apigateway:us-east-1:lambda:path/2015-03-3...
APIコールの流流れ
Internet
API
Gateway
AWS Lambda
Function
AWS
Amazon
CloudWatch
Monitoring
Amazon
CloudFront lambdaHandler
(アプリ)...
ユーザ登録とログイン処理理
•  POST
•  ユーザ名/パスワードを受け取る
•  パスワードを暗号化し、DynamoDBにユーザア
カウントを保存
•  Amazon Cognitoを呼び出してクレデンシャルを
生成
•  ユーザとクレデ...
クレデンシャルについて
Login APIの呼び出し
(認証不要)
Client API Gateway Backend
/login
Login
Action
ユーザマスタ
Credentials
verified
Get OpenID To...
リソース
•  POST
•  Petモデルを受け取る
•  DynamoDBに保存
•  新規PetIdを返却
•  GET
•  DynamoDBに保存されているPetのリストを
返却
/pets
•  GET
•  Pet idをパスから...
取得したクレデンシャルの利利⽤用
IAMロール例例
{
        "Version":  "2012-‐‑‒10-‐‑‒17",
        "Statement":  [
                {
                        "Effec...
モデル
•  リクエスト/レスポンスで扱われるデータのスキー
マを定義したもの
–  テンプレートとマッピングして使う
–  JSONスキーマで定義
•  モデルの情報を元にSDKを⽣生成
•  API内で複数メソッドをまたがってモデルを再利利...
Petモデル
{
"properties":{
"petId":{
"type":"string",
"description":"The generated unique identifier
for the new pet"
},
"pet...
モデル情報を元にしたSDK⽣生成
•  API定義から⾃自動で⽣生成
–  対象プラットフォームを選
択するだけ
•  名前を元に⽣生成
•  ネストされたアイテムは
親モデルの名前を引き継
ぐ
SDKの⽣生成
Conclusion
•  まずはサーバレスでの実装を検討
–  ビジネスの差別化に繋がりにくいにも関わら
ず⼿手間ヒマのかかる箇所はサービスを利利⽤用し
てオフロード
•  マネージドサービスだけでは難しい
箇所はEC2を使って実装
•  限...
クラウドネイティブ化する未来
クラウドネイティブ化する未来
Upcoming SlideShare
Loading in...5
×

クラウドネイティブ化する未来

218

Published on

2015年09月08日の「JAWS-UG 千葉支部 Vol.5 ~秋のAWS Lambda & API Gateway 祭り!!~」で発表した資料です。

Published in: Technology

クラウドネイティブ化する未来

  1. 1. クラウドネイティブ化する未来 Amazon  Data  Service  Japan  K.K. Solutions  Architect Keisuke  Nishitani(@Keisuke69) 2015.09.07
  2. 2. ⾃自⼰己紹介 { "Name" : "西谷圭介", "Twitter" : "@Keisuke69", "Profile" : { "Role" : "Solution Architect", "Customers": [ "Web Services", "Start-up" ], "Services" : [ "AWS Lambda", "Amazon API Gateway", "All Mobile Services" ] } }
  3. 3. クラウドは 新しい常識識 となりつつあります
  4. 4. この新しい常識識の パターン はどういったものか
  5. 5. クラウドファーストから クラウドネイティブへ
  6. 6. クラウドネイティブとは •  クラウドで提供されるサービス利利⽤用を前提に構築す るシステムおよびアプリケーション •  仮想サーバ上で1から全てを作り込むのではなく効 率率率的にアプリケーションを実装 •  ビジネスの差別化ポイントへの集中 –  究極的にはビジネスに直結するアプリケーションの開発、管理理のみ を⽬目指す
  7. 7. クラウドをフル活⽤用した アーキテクチャ
  8. 8. サーバレスアーキテクチャ
  9. 9. 従来の⼀一般的なWebアーキテクチャ •  Web/APサーバをEC2で構築 •  ELBを配置し、スケーラブルな構成に •  Webサーバは冗⻑⾧長化 •  DBはRDSによるMulti  AZ構成、もしくはEC2上で構築 •  EC2等のインフラは常時稼働 –  オートスケーリングするとしても最低限必要な分は常 時起動 【課題】 •  インフラ構築 •  インフラの運⽤用管理理 –  キャパシティ –  スケール –  デプロイ –  耐障害性 –  モニタリング –  ロギング –  セキュリティパッチの適⽤用 •  ビジネスの差別化には直接繋がらない機能のアプリ実装 –  認証 –  スロットリング –  スケーラビリティの確保 •  etc Web DB LB
  10. 10. 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
  11. 11. API  Gateway  +  Lambdaが実現する サーバレスアーキテクチャ •  JavaScript/ネイティブアプリによるUI実装 Lambda API  Gateway AWSサービス クラウドサービスを活⽤用することでサーバ(EC2)を利利⽤用せずに構成するアーキテクチャ S3 CloudFront
  12. 12. API  Gateway  +  Lambdaが実現する サーバレスアーキテクチャ •  JavaScript/ネイティブアプリによるUI実装 •  JavaScriptおよび静的コンテンツはS3に保存し て配信 –  CloudFront経由の配信 Lambda API  Gateway AWSサービス クラウドサービスを活⽤用することでサーバ(EC2)を利利⽤用せずに構成するアーキテクチャ S3 CloudFront
  13. 13. API  Gateway  +  Lambdaが実現する サーバレスアーキテクチャ •  JavaScript/ネイティブアプリによるUI実装 •  JavaScriptおよび静的コンテンツはS3に保存し て配信 –  CloudFront経由の配信 •  ロジックはAPI化 –  API  Gatewayを利利⽤用 –  バックエンドとしてLambdaを利利⽤用 Lambda API  Gateway AWSサービス クラウドサービスを活⽤用することでサーバ(EC2)を利利⽤用せずに構成するアーキテクチャ S3 CloudFront
  14. 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. 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. 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. 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 •  インフラ構築    →  不不要 •  インフラの運⽤用管理理 –  キャパシティ –  スケール –  デプロイ –  耐障害性 –  モニタリング –  ロギング –  セキュリティパッチの適⽤用 •  ビジネスの差別化には直接繋がらない機能のアプリ実装   –  認証 –  スロットリング –  スケーラビリティの確保 解決される課題 不不要(各サービスで適切切にハンドリング) 不不要
  18. 18. サーバレスで 全部できます
  19. 19. サーバレスで 全部できます やりたいこと だけに集中できる
  20. 20. サーバレスで 全部できます ビジネスロジック だけに集中できる
  21. 21. サーバレスアーキテクチャのメリット •  アプリの開発に多くのメリット –  バックエンド側のコードが減るため開発コストを最⼩小化 –  バックエンド側のサーバが減るため運⽤用コストを最⼩小化 –  AWSによってマネージされるため、スケーラビリティやキャパシティ、セキュリティの⼼心 配不不要 –  ⾮非常にコスト効率率率化が⾼高いため、多くの場合コスト減が⾒見見込める •  必要に応じてEC2も導⼊入できる安⼼心感 –  汎⽤用的なサービスでは実現の難しい、ビジネス固有の要件に関してはEC2を利利⽤用して実装 –  EC2を利利⽤用する部分についてもCodeDeployやElastic  Beanstalk、OpsWorks等で⾃自動化 •  開発者がビジネスにフォーカスできる
  22. 22. 「何をするか」 を書くだけでいい
  23. 23. 「何をするか」 を書くだけでいい All  you  need  is  code.
  24. 24. クラウドネイティブ時代の コンピュートサービス
  25. 25. AWS  Lambda
  26. 26. AWS  Lambda •  インフラを⼀一切切気にすることなくアプリケーション コードを実⾏行行できるコンピュートサービス –  実⾏行行基盤は全てAWSが管理理 –  AWSサービスと連携させることで簡単にイベントドリブンなアプ リケーションを実装可能 –  コード実⾏行行時間に対しての課⾦金金でありコスト効率率率が⾮非常に⾼高い •  Lambda  function –  JavaScript(Node.js)およびJavaで記述 –  サードパーティライブラリも利利⽤用可能
  27. 27. AWS  Lambdaの利利⽤用例例 •  S3に画像がアップロードされたときにサムネイ ルの⽣生成やリサイズを実⾏行行 AWS  LambdaAmazon  S3  Bucket  イベント 元画像 サムネイル画 像 1 2 3
  28. 28. イベントソース •  現時点では以下のAWSサービスをサポート –  Amazon  S3 –  Amazon  Kinesis –  Amazon  DynamoDB  Streams(Preview) –  Amazon  Cognito –  Amazon  SNS –  Alexa  AppKit –  Amazon  SWF •  サーバレスなバックエンドとしての利利⽤用 –  AWS  SDKおよびAWS  Mobile  SDKを利利⽤用してLambdaファンクションを同 期呼び出し –  簡単・スケーラブルなモバイルバックエンドとして
  29. 29. 時代はAPI
  30. 30. APIの重要性 •  提供するサービスのエコシステムを形成できる •  システム間連携 –  外部サービスとの連携 –  その逆も •  疎結合(マイクロサービス) –  フロントエンドとバックエンドのデカップリング •  フロントエンドの多様化 –  HTML5/JS –  モバイルアプリ •  IoTによる接続されるデバイスの多様化
  31. 31. Amazon API Gateway
  32. 32. Amazon  API  Gateway 複数バージョンとステージ APIキーの作成と配布 リクエスト時におけるAWS  SigV4の利利⽤用 リクエストのスロットリングとモニタリング バックエンドとしてAWS  Lambdaが利利⽤用可能
  33. 33. Amazon  API  Gateway レスポンスをキャッシュ可能 CloudFrontを利利⽤用したレイテンシの軽減とDDoS対策 iOS、AndroidとJavaScript向けSDKの⾃自動⽣生成 Swaggerのサポート Request  /  Responseにおけるデータ変換
  34. 34. 実装例例 API  Gateway  +  Lambda  +  Cognito を利利⽤用したログイン処理理
  35. 35. API構造(リソースとモデル) •  POST –DynamoDBに新規ユーザを 登録/users •  POST –ユーザ名/パスワードを受け 取り認証/login •  POST –新しいペットを作成 •  GET –ペットのリストを取得 /pets •  GET –特定IDのペットを取得/pets/{petId} 認証不不要 要認証
  36. 36. (参考)Swaggerを利利⽤用したAPI定義 x-amazon-apigateway-integration: type: aws uri: arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us- east-1:xxxxx:function:xxxx/invocations credentials: arn:aws:iam::*:user/* httpMethod: POST requestTemplates: application/json: | { "action" : "com.amazonaws.apigatewaydemo.action.ListPetsDemoAction", "body" : $input.json('$') } responses: "default": statusCode: "200" •  Swaggerを利利⽤用してAPI設定を全て⾏行行うことが可能 •  Amazon API Gateway Swagger Importerを利利⽤用した作成と更更新 •  AWS固有のパラメータをサポートするextention
  37. 37. APIコールの流流れ Internet API Gateway AWS Lambda Function AWS Amazon CloudWatch Monitoring Amazon CloudFront lambdaHandler (アプリ) 登録処理 ログイン処理 ペット作成処理 ペット取得処理 ユーザとペット の情報 クレデンシャル プロバイダ Amazon S3
  38. 38. ユーザ登録とログイン処理理 •  POST •  ユーザ名/パスワードを受け取る •  パスワードを暗号化し、DynamoDBにユーザア カウントを保存 •  Amazon Cognitoを呼び出してクレデンシャルを 生成 •  ユーザとクレデンシャルをレスポンス /users •  POST •  ユーザ名とパスワードを受け取る •  DynamoDBにあるデータとマッチングしてユー ザを認証 •  Amazon Cognitoを呼び出してクレデンシャルを 生成 •  テンポラリのクレデンシャルを返却 /login
  39. 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. 40. リソース •  POST •  Petモデルを受け取る •  DynamoDBに保存 •  新規PetIdを返却 •  GET •  DynamoDBに保存されているPetのリストを 返却 /pets •  GET •  Pet idをパスから読み取る •  Lambda functionへパスパラメータをパス (Mapping Templateを利用) •  DynamoDBから該当IDのPet情報を取得 •  Petのモデルを返却 /pets/{petId}
  41. 41. 取得したクレデンシャルの利利⽤用
  42. 42. IAMロール例例 {        "Version":  "2012-‐‑‒10-‐‑‒17",        "Statement":  [                {                        "Effect":  "Allow",                        "Action":  [  "dynamodb:*",                                "execute-‐‑‒api:*",                                "lambda:*"                        ],                        "Resource":  [                                "*"                        ]                }        ] } •  以下のサービスへのアク セスを許可 –  DynamoDB –  API  Gateway –  Lambda •  各サービスの全リソース へのアクセスを許可
  43. 43. モデル •  リクエスト/レスポンスで扱われるデータのスキー マを定義したもの –  テンプレートとマッピングして使う –  JSONスキーマで定義 •  モデルの情報を元にSDKを⽣生成 •  API内で複数メソッドをまたがってモデルを再利利⽤用 可
  44. 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":{ } } •  モデルはリソースごとに定義 する –  同⼀一リソースの全てのメソッドで利利⽤用 する •  各メソッドのリクエストとレ スポンスで異異なるモデルを利利 ⽤用することも可能 –  フォーマット変換など
  45. 45. モデル情報を元にしたSDK⽣生成 •  API定義から⾃自動で⽣生成 –  対象プラットフォームを選 択するだけ •  名前を元に⽣生成 •  ネストされたアイテムは 親モデルの名前を引き継 ぐ
  46. 46. SDKの⽣生成
  47. 47. Conclusion •  まずはサーバレスでの実装を検討 –  ビジネスの差別化に繋がりにくいにも関わら ず⼿手間ヒマのかかる箇所はサービスを利利⽤用し てオフロード •  マネージドサービスだけでは難しい 箇所はEC2を使って実装 •  限りあるエンジニアリングリソース はビジネスの差別化に集中
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×