Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Serverless Architecture on AWS(20151023版)

13,617 views

Published on

2015/10/23開催のAPI Meetup#10でお話させて頂いた際の資料です。

Published in: Software
  • Be the first to comment

Serverless Architecture on AWS(20151023版)

  1. 1. Keisuke Nishitani, Solutions Architect, Amazon Data Service Japan K.K. 2015.10.23 Serverless Architecture on AWS クラウドネイティブ化する未来
  2. 2. 内容についての注意点 v  本資料料では2015年年10⽉月21⽇日時点のサービス内容および価格に ついてご説明しています。最新の情報はAWS公式ウェブサイ ト(http://aws.amazon.com)にてご確認ください。 v  資料料作成には⼗十分注意しておりますが、資料料内の価格とAWS 公式ウェブサイト記載の価格に相違があった場合、AWS公式 ウェブサイトの価格を優先とさせていただきます。 v  価格は税抜表記となっています。⽇日本居住者のお客様がサー ビスを使⽤用する場合、別途消費税をご請求させていただきま す。
  3. 3. ⾃自⼰己紹介 { "Name" : "⻄西⾕谷圭介", "Twitter" : "@Keisuke69", "Profile" : { "Role" : "Solution Architect", "Customers": [ "Web Services", "Start-up" ], "Services" : [ "Amazon API Gateway”, "AWS Lambda”, "All Mobile Services" ] } }
  4. 4. クラウドは 新しい常識識 となりつつあります
  5. 5. この新しい常識識の パターン はどういったものか
  6. 6. クラウドファーストから クラウドネイティブへ
  7. 7. クラウドネイティブとは v クラウドで提供されるサービス利利⽤用を前提に構築するシ ステムおよびアプリケーション v 仮想サーバ上で1から全てを作り込むのではなく効率率率的 にアプリケーションを実装 v ビジネスの差別化ポイントへの集中 v 究極的にはビジネスに直結するアプリケーションの開発、管理理 のみを⽬目指す
  8. 8. クラウドをフル活⽤用した アーキテクチャ
  9. 9. サーバレスアーキテクチャ
  10. 10. 従来の⼀一般的なWebアーキテクチャ •  Web/APサーバはEC2で構築 •  ELBを配置し、オートスケーリング可能なスケーラブル構成に •  Webサーバは冗⻑⾧長化 •  DBはRDSによるMulti AZ構成、もしくはEC2上で構築 •  EC2等のインフラは各最低1台は常時稼働 【課題】 •  インフラ構築 •  インフラの運⽤用管理理 •  キャパシティ •  スケール •  デプロイ •  耐障害性 •  モニタリング •  ロギング •  セキュリティパッチの適⽤用 •  ビジネスの差別化には直接繋がらない機能のアプリ実装 •  認証 •  スロットリング •  スケーラビリティの確保 •  etc Web (EC2) DB (RDS) LB (ELB)
  11. 11. サーバレスアーキテクチャ Lambda API  Gateway AWSサービス クラウドサービスを活⽤用することでサーバ(EC2)を利利⽤用せずに構成するアーキテクチャ S3 CloudFront
  12. 12. サーバレスアーキテクチャ Lambda API  Gateway AWSサービス S3 CloudFront クラウドサービスを活⽤用することでサーバ(EC2)を利利⽤用せずに構成するアーキテクチャ JavaScript/ネイティブアプリによるUI実装
  13. 13. サーバレスアーキテクチャ Lambda API  Gateway AWSサービス S3 CloudFront クラウドサービスを活⽤用することでサーバ(EC2)を利利⽤用せずに構成するアーキテクチャ JavaScript/ネイティブアプリによるUI実装 JavaScriptおよび静的コンテンツはS3から配信 •  CloudFront経由の配信
  14. 14. サーバレスアーキテクチャ Lambda API  Gateway AWSサービス S3 CloudFront クラウドサービスを活⽤用することでサーバ(EC2)を利利⽤用せずに構成するアーキテクチャ JavaScript/ネイティブアプリによるUI実装 JavaScriptおよび静的コンテンツはS3から配信 •  CloudFront経由の配信 ロジックはAPI化 •  API Gatewayを利利⽤用 •  バックエンドとしてLambdaを利利⽤用
  15. 15. サーバレスアーキテクチャ Lambda API  Gateway AWSサービス S3 CloudFront クラウドサービスを活⽤用することでサーバ(EC2)を利利⽤用せずに構成するアーキテクチャ JavaScript/ネイティブアプリによるUI実装 JavaScriptおよび静的コンテンツはS3から配信 •  CloudFront経由の配信 ロジックはAPI化 •  API Gatewayを利利⽤用 •  バックエンドとしてLambdaを利利⽤用 JavaScript/iOS・AndroidはAPIを呼び出し
  16. 16. サーバレスアーキテクチャ Lambda API  Gateway AWSサービス S3 CloudFront クラウドサービスを活⽤用することでサーバ(EC2)を利利⽤用せずに構成するアーキテクチャ JavaScript/ネイティブアプリによるUI実装 JavaScriptおよび静的コンテンツはS3から配信 •  CloudFront経由の配信 ロジックはAPI化 •  API Gatewayを利利⽤用 •  バックエンドとしてLambdaを利利⽤用 JavaScript/iOS・AndroidはAPIを呼び出し Lambdaファンクションから各AWSサービスを利利⽤用 •  認証にはCognitoを利利⽤用
  17. 17. サーバレスアーキテクチャ JavaScript/ネイティブアプリによるUI実装 JavaScriptおよび静的コンテンツはS3から配信 •  CloudFront経由の配信 ロジックはAPI化 •  API Gatewayを利利⽤用 •  バックエンドとしてLambdaを利利⽤用 JavaScript/iOS・AndroidはAPIを呼び出し Lambdaファンクションから各AWSサービスを利利⽤用 •  認証にはCognitoを利利⽤用 API GW/LambdaともにEC2を利利⽤用した 別システムへのアクセスも当然可能 Lambda API  Gateway AWSサービス S3 CloudFront クラウドサービスを活⽤用することでサーバ(EC2)を利利⽤用せずに構成するアーキテクチャ
  18. 18. サーバレスアーキテクチャ(2-Tier Architecture) v  各クライアント向けSDKか らの直接操作 v  AWSアクセスに必要な CredentialはCognitoを利利⽤用 してセキュアに取得 モバイルからダイレクトにAWSサービスを利利⽤用するアーキテクチャ Android/iOS SDK JavaScript SDK DynamoDB SNS S3 LambdaCognito Credential の取得 直接操作
  19. 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 解決される課題 不不要(各サービスが適切切にハンドリング) 不不要 インフラ構築    →  不不要 インフラの運⽤用管理理 •  キャパシティ •  スケール •  デプロイ •  耐障害性 •  モニタリング •  ロギング •  セキュリティパッチの適⽤用 ビジネスの差別化には直接繋がらない機能のアプリ実装   •  認証 •  スロットリング •  スケーラビリティの確保
  20. 20. サーバレスで 全部できます
  21. 21. サーバレスで 全部できます やりたいこと だけに集中できる
  22. 22. サーバレスで 全部できます ビジネスロジック だけに集中できる
  23. 23. サーバレスアーキテクチャのメリット アプリの開発に多くのメリット •  バックエンド側のコードが減るため開発コストを最⼩小化 •  バックエンド側のサーバが減るため運⽤用コストを最⼩小化 •  AWSによってマネージされるため、スケーラビリティやキャパシティ、セキュ リティの⼼心配不不要 •  ⾮非常にコスト効率率率化が⾼高いため、多くの場合コスト減が⾒見見込める 必要に応じてEC2も導⼊入できる安⼼心感 •  汎⽤用的なサービスでは実現の難しい、ビジネス固有の要件に関してはEC2を利利 ⽤用して実装 •  EC2を利利⽤用する部分についてもCodeDeployやElastic Beanstalk、OpsWorks等で ⾃自動化 開発者がビジネスにフォーカスできる
  24. 24. 「何をするか」 を書くだけでいい
  25. 25. 「何をするか」 を書くだけでいい All you need is code.
  26. 26. サーバレスアーキテクチャ事例例
  27. 27. Legacy Architecture Limelight Edge Laptop Encoders RTMP Wowza Transmux Servers Wowza Transcode Servers Wowza Record Servers RTMP RTMP RTMP Auto Uploader MP4 HLS S3 VOD bucket CloudFront mobile client Live Streaming VOD CloudFront mobile client HLS HLS
  28. 28. Current Architecture Laptop Encoders HLS S3 Playback VOD Stream mobile client CloudFront Streaming Live stream mobile client CloudFront S3 Ingest 480p Transcode HQ Copy 360p Transcode Audio-only Transcode Thumbnail QOS Analytics Cascading Lambda Functions
  29. 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)
  30. 30. スクリーンショット
  31. 31. これまでのアプローチ v モノリシックなアプリを複数のEC2インス タンス上で稼働 v 複雑なデプロイ。⼀一⾏行行の変更更でも全体の再 デプロイが必要 v スケーラビリティ/俊敏性と新機能のバラ ンスを取る必要があり頻繁なリリースが できない
  32. 32. Lambda consumer S3 Mobile Analytics DynamoDB SQS Amazon EMR Amazon Cognito Amazon Kinesis Mobile app Amazon Redshift Lambda interface S3 dump DynamoDB log Microservice Core
  33. 33. サンプル:Real-Time Stream Processing Amazon Kinesis AWS Lambda Amazon Redshift Amazon SNS New records available
  34. 34. サンプル:Real-Time DB Triggers Workflow New data available Amazon DynamoDB AWS Lambda Amazon DynamoDB Amazon Redshift
  35. 35. サンプル:Real-Time Message Handling New message published Amazon SNS AWS Lambda Amazon SNS Amazon Kinesis
  36. 36. サンプル:Audit CloudTrail Activity AWS Lambda Amazon S3Amazon CloudTrail Amazon SNS AWS IAM
  37. 37. サンプル:Automated Infrastructure Management AWS Lambda Amazon SNS Amazon CloudWatch Alarm ec2 runInstance ecs startTask beanstalk updateApp kinesis splitShard Any API call https://aws.amazon.com/blogs/compute/scaling-amazon-ecs-services-automatically-using-amazon-cloudwatch-and-aws-lambda/
  38. 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
  39. 39. サンプル:Deploy Lambda Functions https://aws.amazon.com/blogs/compute/dynamic-github-actions-with-aws-lambda/ AWS Lambda Amazon SNS GitHub Repo lambda createFn ()
  40. 40. Keyとなるサービス①
  41. 41. AWS Lambda
  42. 42. クラウドネイティブ時代の コンピュートサービス
  43. 43. Lambdaファンクション: ステートレス、トリガーベースのコード実⾏行行 AWS Lambda あらゆるスケールで⾼高性能 費⽤用対効果が⾼高く効率率率的 インフラ管理理不不要 使った分だけの⽀支払い リクエスト量量に応じて⾃自動的にキャ パシティ調整 100ms単位のコンピュート課⾦金金 ⾃自⾝身のコードを持ち込み 標準的な⾔言語でコードを実⾏行行 スレッド、プロセス、ファイルや シェルスクリプトも利利⽤用可能 インフラではなくビジネスロジックに 集中可能 コードをアップロードするだけで、 Lambdaが全てをハンドリング
  44. 44. AWS Lambda インフラを⼀一切切気にすることなくアプリケーションコード を実⾏行行できるコンピュートサービス •  実⾏行行基盤は全てAWSが管理理 •  AWSサービスと連携させることで簡単にイベントドリブンなア プリケーションを実装可能 •  コード実⾏行行時間に対しての課⾦金金でありコスト効率率率が⾮非常に⾼高い •  VPC内のリソースへのアクセスも近⽇日サポート Lambda function •  JavaScript(Node.js)およびJava、Pythonで記述 •  サードパーティライブラリも利利⽤用可能
  45. 45. AWS Lambdaの利利⽤用例例 S3に画像がアップロードされたときにサムネイルの⽣生成や リサイズを実⾏行行 AWS  LambdaAmazon  S3  Bucket  イベント 元画像 サムネイル画 像 1 2 3
  46. 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
  47. 47. Keyとなるサービス②
  48. 48. Amazon API Gateway
  49. 49. 時代はAPI
  50. 50. APIの重要性 提供するサービスのエコシステムを形成できる システム間連携 •  外部サービスとの連携やその逆も 疎結合(マイクロサービス) •  フロントエンドとバックエンドのデカップリング フロントエンドの多様化 •  HTML5/JS •  モバイルアプリ IoTによる接続されるデバイスの多様化
  51. 51. Amazon API Gateway 複数バージョンや複数環境 へのデプロイを管理理 APIの定義とホスティング クラウド上のリソースへのアクセ ス認証におけるAWS IAMの活⽤用 AWSのAuthを活⽤用 バックエンド保護のため のDDoS対策やリクエス トのスロットリング ネットワークトラフィックの管理理
  52. 52. Amazon API Gateway 複数バージョンとステージ APIキーの作成と配布 リクエスト時におけるAWS  SigV4の利利⽤用 リクエストのスロットリングとモニタリング バックエンドとしてAWS  Lambdaが利利⽤用可能
  53. 53. Amazon API Gateway レスポンスをキャッシュ可能 CloudFrontを利利⽤用したレイテンシの軽減とDDoS対策 iOS、AndroidとJavaScript向けSDKの⾃自動⽣生成 Swaggerのサポート Request  /  Responseにおけるデータ変換
  54. 54. Method and integration
  55. 55. 実装例例
  56. 56. 利利⽤用するサービス Amazon API Gateway AWS Lambda Amazon Cognito Amazon DynamoDB APIのホストと リクエストルーティング ビジネスロジックの 実⾏行行 ⼀一時的なAWSクレデ ンシャルの⽣生成 データストア
  57. 57. API構造(リソースとモデル) •  POST –DynamoDBに新規ユーザを 登録/users •  POST –ユーザ名/パスワードを受 け取り認証/login •  POST –新しいペットを作成 •  GET –ペットのリストを取得 /pets •  GET –特定IDのペットを取得/pets/{petId} 認証不不要 要認証
  58. 58. (参考)Swaggerを利利⽤用したAPI定義 •  Swaggerを利利⽤用してAPI設定を全て⾏行行うことが可能 •  AWS固有のパラメータをサポートするextention •  Amazon API Gateway Swagger Importerを利利⽤用したAPI 定義の作成と更更新、デプロイ
  59. 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. 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. 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. 62. ユーザ登録とログイン処理理 •  POST •  ユーザ名/パスワードを受け取る •  パスワードを暗号化し、DynamoDBにユー ザアカウントを保存 •  Amazon Cognitoを呼び出してクレデンシャ ルを⽣生成 •  ユーザとクレデンシャルをレスポンス /users •  POST •  ユーザ名とパスワードを受け取る •  DynamoDBにあるデータとマッチングして ユーザを認証 •  Amazon Cognitoを呼び出してクレデンシャ ルを⽣生成 •  テンポラリのクレデンシャルを返却 /login
  63. 63. Amazon Cognito プロバイダをまたがって認 証されたユーザとゲスト ユーザを管理理 アイデンティティ管理理 クロスデバイス、クロスプ ラットフォームでユーザ データを同期 データ同期 モバイルデバイスから AWSサービスへのセキュ アなアクセス セキュアなAWSアクセス
  64. 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. 65. リソース •  POST •  Petモデルを受け取る •  DynamoDBに保存 •  新規PetIdを返却 •  GET •  DynamoDBに保存されているPetのリスト を返却 /pets •  GET •  Pet idをパスから読み取る •  Lambda functionへパスパラメータをパス (Mapping Templateを利利⽤用) •  DynamoDBから該当IDのPet情報を取得 •  Petのモデルを返却 /pets/{petId}
  66. 66. 取得したクレデンシャルの利利⽤用
  67. 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 特定リソースのみアク セスを許可
  68. 68. モデル リクエスト/レスポンスで扱われるデータのスキーマを定義 したもの •  テンプレートとマッピングして使う •  JSONスキーマで定義 モデルの情報を元にSDKを⽣生成 API内で複数メソッドをまたがってモデルを再利利⽤用可
  69. 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":{ } } モデルはリソースごとに定義する •  同⼀一リソースの全てのメソッドで利利⽤用 する 各メソッドのリクエストとレスポ ンスで異異なるモデルを利利⽤用するこ とも可能 •  フォーマット変換など
  70. 70. モデル情報を元にしたSDK⽣生成 API定義から⾃自動で⽣生成 •  対象プラットフォームを選 択するだけ •  全メソッド 名前を元に⽣生成 ネストされたアイテムは親モ デルの名前を引き継ぐ
  71. 71. 1クリックでSDKを⽣生成
  72. 72. SDK⽣生成のベネフィット 以下を⾃自動で実施: •  AWS signature version 4を利利⽤用したAPIコールの署名 •  エクスポーネンシャルバックオフによるスロットリング されたリクエストのハンドリング •  モデルオブジェクトに対するリクエスト/レスポンスの マーシャリング/アンマーシャリング
  73. 73. 最後に
  74. 74. JAWS •  有志が作成したサーバレスなWeb、モバイルアプリケー ションを構築するためのフレームワーク •  ユーザの⼊入⼒力力内容を元に必要なCFテンプレートを⾃自動⽣生成 •  LambdaファンクションのScaffoldと各種定義を⾃自動⽣生成 •  デプロイするとAPI Gatewayのエンドポイント、リソースを ⽣生成し、対応するLambdaファンクションを紐紐付け •  CLIとして提供 •  AWSのオフィシャルツールではない https://github.com/jaws-framework/JAWS
  75. 75. AWS Mobile Hub (BETA)
  76. 76. AWS Mobile Hub (Beta) 1. 単⼀一の統合されたコンソール 2. 事前に⽤用意された機能群 3. サービスを⾃自動でプロビジョニング 4. ⾃自動⽣生成されたアプリケーション つまり、数分でAWS上にアプリを構築
  77. 77. AWS Mobile Hub (Beta)
  78. 78. プロジェクトの作成と機能の追加
  79. 79. ユーザがどのようにサインインするか設定: •  サインインなし、オプショナルもしくは必須 サインインプロバイダを設定: •  Facebook (Google, Twitter, Amazon etc) •  独⾃自のシステム(認証基盤) クイックスタート⽤用アプリにサインイン画⾯面 を追加 Powered by Amazon Cognito Identity 例例:User Sign-in(ユーザサインイン)
  80. 80. アプリへのプッシュ通知 •  iOS/Android •  1:1 もしくはトピック Quickstart App demonstrates features クイックスタートアプリでは以下の機能 をデモ •  通知のEnable/Disable •  SNSを使ったトークンの⾃自動登録 •  サブスクライブするトピックの選択 Powered by Amazon SNS 例例:Push通知
  81. 81. スターターアプリのダウンロード
  82. 82. AWS Mobile Hub(BETA) • AWSを使ったモバイルアプリの開発を簡単に •  ユーザサインインといった典型的ユースケースごとの スターターコードを提供 •  関連サービスの設定と構築を⾃自動で •  AWS Management Consoleから利利⽤用可能 •  現在はUS-East-1のみ、東京リージョンと ダブリンは近くサポート予定 •  AWS Mobile Hub⾃自体のご利利⽤用は無料料 ※利利⽤用する各サービスの費⽤用はかかります
  83. 83. Conclusion まずはサーバレスでの実装を検討 •  ビジネスの差別化に繋がりにくいにも 関わらず⼿手間ヒマのかかる箇所はサー ビスを利利⽤用してオフロード マネージドサービスだけでは難しい箇 所はEC2を使って実装 限りあるエンジニアリングリソースは ビジネスの差別化に集中
  84. 84. Questions?
  85. 85. 参考資料料 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
  86. 86. Thank you!

×