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.

AWSで実現するクラウドネイティブなアプリ開発のポイント

16,051 views

Published on

2016年2月18、19日に開催されましたDevelopers Summitにて講演(19-A-3)した際の資料です。

Published in: Technology
  • Be the first to comment

AWSで実現するクラウドネイティブなアプリ開発のポイント

  1. 1. AWSで実現するクラウドネイティブな アプリ開発のポイント #devsumiA 19-A-3 Keisuke Nishitani (@Keisuke69) Amazon Web Services Japan K.K.
  2. 2. Profile Keisuke Nishitani Solutions Architect, Amazon Web Service Japan K.K @Keisuke69 Keisuke69 ✤ AWSのソリューションアーキテクト ✤ Webサービス系 ✤ モバイル系 ✤ クラウドを使ったアプリ開発とかモバイル開発の話しをよくしてい ます ✤ モバイルニンジャ1号機 ✤ RESTおじさん ✤ Lambda Wizards ✤ 餃⼦の王将エヴァンジェリスト(⾃称) Keisuke69 Keisuke69Keisuke69
  3. 3. 代表的なサービス Amazon EC2
  4. 4. 代表的なサービス Amazon S3
  5. 5. 代表的なサービス Amazon RDS
  6. 6. Networking AnalyticsCompute Storage & Content Delivery Developer Tools Management Tools Security & Identity Application Services Mobile Services Database Enterprise Applications S3 CloudFront EFS Glacier Storage Gateway API Gateway AppStream CloudSearch Elastic Transcoder SES SQS SWF Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail Lambda EC2 Container ServiiceEC2 VPC Direct Connect Route53 EMR Data Pipeline Kinesis Machine Learning Elastic Load Balancing QuickSight Elasticsearch Service CodeCommit CloudWatch Cloud Formation CloudTrail Config OpsWorks Service C atalog Identity & Acc ess Managem ent Directory S ervice Trusted Advisor WAF Snowball DMS IOT IoT Game Development Mobile Hub Elastic Beanstalk ACM Inspector GameLift CodePipelineCodeDeploy
  7. 7. Networking AnalyticsCompute Storage & Content Delivery Developer Tools Management Tools Security & Identity Application Services Mobile Services Database Enterprise Applications CloudFront EFS Glacier Storage Gateway AppStream CloudSearch Elastic Transcoder SWF WorkSpaces WorkDocs WorkMail EC2 VPC Direct Connect Route53 EMR Data Pipeline Machine Learning Elastic Load Balancing QuickSight Elasticsearch Service CloudWatch Cloud Formation CloudTrail Config OpsWorks Service C atalog Identity & Acc ess Managem ent Directory S ervice Trusted Advisor WAF Snowball DMS IOT Game Development Elastic Beanstalk ACM Inspector GameLift Lambda EC2 Container Serviice Kinesis S3 API Gateway SES SQS CodeCommit CodePipelineCodeDeploy Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift IoTMobile Hub
  8. 8. 今⽇のお話 クラウドネイティブなアプリ開発
  9. 9. 今⽇のお話 クラウドネイティブなアプリ開発
  10. 10. クラウドネイティブ? Photo credit: Samer AlQaisi via VisualHunt / CC BY-SA
  11. 11. クラウドネイティブ ✤クラウドで提供されるサービス利⽤を前提に構築するシステムおよび アプリケーション ✤クラウドの特性を踏まえ、利点を最⼤限に活かす形で構築されたアプ リケーション ✤クラウドで提供されるサービスを利⽤して効率的にアプリケーション を実装
  12. 12. 最初からクラウド上で⽣まれるアプリケーション
  13. 13. クラウドの特性 ✤障害を前提としたデザイン(Design for failure) ✤疎結合 ✤弾⼒性の実装 ✤全てのレイヤでセキュリティを担保 ✤制約を恐れない ✤並列処理 ✤複数あるストレージのオプション
  14. 14. アーキテクチャ アプリ開発 デプロイ クラウドネイティブな
  15. 15. クラウドネイティブなアーキテクチャ
  16. 16. クラウドネイティブな アプリを考える上での ⼤きな流れがあります
  17. 17. Microservices
  18. 18. Microservices Architecture The microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies. -- James Lewis and Martin Fowler
  19. 19. 9つのポイント ✤Componentization via Services ✤Organized around Business Capabilities ✤Products not Projects ✤Smart endpoints and dumb pipes ✤Decentralized Governance ✤Decentralized Data Management ✤Infrastructure Automation ✤Design for failure ✤Evolutionary Design
  20. 20. マイクロサービスとは ✤サービスを単⼀のアプリケーションではなく⼩さなサービスの組み合 わせで構築する ✤各サービスは独⽴したサービスであり、単⼀でデプロイと実⾏が可能 なものである ✤技術的な境界で分割するのではなくビジネスの遂⾏能⼒で分割する ✤サービスをデプロイするのに必要な能⼒を持てるように分割する ✤組織構造と密接に関連 ✤機能だけ別チーム・別サービスでDBは共通で持つというようなことはしない ✤サービス間のコミュニケーションは軽量な⼿段を利⽤する ✤単⼀アプリにおけるインメモリのメソッド呼び出しではなくなる ✤HTTPは最良の選択肢の1つであり、RESTful APIによる呼び出しがよく利⽤さ れる
  21. 21. マイクロサービスの利点 ✤「モノリシック」なシステムからの解放 ✤単独でデプロイ・実⾏可能であるため、個々のサービスで⾃由にス ケールすることが可能 ✤各サービスで独⽴性の⾼い実装が可能 ✤⾔語、DBなど全てのサービスで同じものを使う必要がない ✤各サービスごとに最適と思われるものを選択可能 ✤サービス間は独⽴しているため、個々の可⽤性の問題が全体に影響し ない ✤ビジネス上の境界とより密接にアラインされる ✤パラレルな開発とデプロイ ✤迅速なデプロイ
  22. 22. マイクロサービスの考慮点 ✤分散した複数のコンポーネントを扱うことの難しさ ✤サービス単位で独⽴して実⾏可能な状態にするということはそれだけ⼩さいシ ステムが増えるということ ✤複数のコンポーネントを協調動作させることの難しさ ✤コンポーネント間のコミュニケーションメッセージの増加によるレイ テンシ増 ✤トランザクションの取り扱いと結果整合性の検討 ✤サービスディスカバリ ✤分散するシステムのテストにおける複雑さ ✤分散するシステムの運⽤とデプロイの複雑さ
  23. 23. AWS上でマイクロサービスを構築する ✤API Gateway + Lambda ✤EC2 + ECS ✤EC2 + Elastic BeanStalk ✤EC2 + ELB + ASG + Runtime
  24. 24. ⼀般的なWebアーキテクチャ ✤ Web/APサーバはEC2で構築 ✤ ELBを配置し、オートスケーリング可能なスケーラブル構成に ✤ Webサーバは冗⻑化 ✤ DBはRDSによるMulti AZ構成、もしくはEC2上で構築 ✤ EC2等のインフラは各最低1台は常時稼働 【課題】 ✤ インフラ構築 ✤ インフラの運⽤管理 ✤ キャパシティ ✤ スケール ✤ デプロイ ✤ 耐障害性 ✤ モニタリング、ロギング ✤ セキュリティパッチの適⽤ ✤ ビジネスの差別化には直接繋がらない機能のアプリ実装 ✤ 認証 ✤ スロットリング Web (EC2) DB (RDS) LB (ELB)
  25. 25. サーバレスアーキテクチャ Lambda API Gateway AWSサービス クラウドサービスを活⽤することでサーバ(EC2)を利⽤せずに構成するアーキテクチャ S3 CloudFront
  26. 26. サーバレスアーキテクチャ Lambda API Gateway AWSサービス S3 CloudFront クラウドサービスを活⽤することでサーバ(EC2)を利⽤せずに構成するアーキテクチャ ✤ JavaScript/ネイティブアプリによるUI実装
  27. 27. サーバレスアーキテクチャ Lambda API Gateway AWSサービス S3 CloudFront クラウドサービスを活⽤することでサーバ(EC2)を利⽤せずに構成するアーキテクチャ ✤ JavaScript/ネイティブアプリによるUI実装 ✤ JavaScriptおよび静的コンテンツはS3から配信 ✤ CloudFront経由の配信
  28. 28. サーバレスアーキテクチャ Lambda API Gateway AWSサービス S3 CloudFront クラウドサービスを活⽤することでサーバ(EC2)を利⽤せずに構成するアーキテクチャ ✤ JavaScript/ネイティブアプリによるUI実装 ✤ JavaScriptおよび静的コンテンツはS3から配信 ✤ CloudFront経由の配信 ✤ ロジックはAPI化 ✤ API Gatewayを利⽤ ✤ バックエンドとしてLambdaを利⽤
  29. 29. サーバレスアーキテクチャ Lambda API Gateway AWSサービス S3 CloudFront クラウドサービスを活⽤することでサーバ(EC2)を利⽤せずに構成するアーキテクチャ ✤ JavaScript/ネイティブアプリによるUI実装 ✤ JavaScriptおよび静的コンテンツはS3から配信 ✤ CloudFront経由の配信 ✤ ロジックはAPI化 ✤ API Gatewayを利⽤ ✤ バックエンドとしてLambdaを利⽤ ✤ JavaScript/iOS・AndroidはAPIを呼び出し
  30. 30. サーバレスアーキテクチャ Lambda API Gateway AWSサービス S3 CloudFront クラウドサービスを活⽤することでサーバ(EC2)を利⽤せずに構成するアーキテクチャ ✤ JavaScript/ネイティブアプリによるUI実装 ✤ JavaScriptおよび静的コンテンツはS3から配信 ✤ CloudFront経由の配信 ✤ ロジックはAPI化 ✤ API Gatewayを利⽤ ✤ バックエンドとしてLambdaを利⽤ ✤ JavaScript/iOS・AndroidはAPIを呼び出し ✤ Lambdaファンクションから各AWSサービスを利⽤ ✤ 認証にはCognitoを利⽤
  31. 31. サーバレスアーキテクチャ ✤ 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)を利⽤せずに構成するアーキテクチャ
  32. 32. サーバレスアーキテクチャ(2-Tier Architecture) ✤各クライアント向けSDKからの 直接操作 ✤AWSアクセスに必要なCredential はCognitoを利⽤してセキュアに 取得 モバイルからダイレクトにAWSサービスを利⽤するアーキテクチャ Android/iOS SDK JavaScript SDK DynamoDB SNS S3 LambdaCognito Credential の取得 直接操作
  33. 33. サーバレスアーキテクチャ ✤ 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 解決される課題 不要(各サービスが適切にハンドリング) 不要 ✤ インフラ構築 → 不要 ✤ インフラの運⽤管理 ✤キャパシティ ✤スケール ✤デプロイ ✤耐障害性 ✤モニタリング ✤ロギング ✤セキュリティパッチの適⽤ ✤ ビジネスの差別化には直接繋がらない機能のアプリ実装 ✤認証 ✤スロットリング ✤スケーラビリティの確保
  34. 34. API Gateway and Lambda
  35. 35. API Gateway integration with Lambda ✤API GatewayとLambda間をネイティブ にインテグレーション ✤HTTPコールをLambdaの呼び出しに変換 ✤Body、ヘッダ、パラメータなどを Lambdaに渡すJSONオブジェクトへと マッピングAPI Gateway Lambda
  36. 36. Amazon API Gateway 複数バージョンや複数環境 へのデプロイを管理 APIの定義とホスティング クラウド上のリソースへのアクセ ス認証におけるAWS IAMの活⽤ AWSのAuthを活⽤ バックエンド保護のため のDDoS対策やリクエス トのスロットリング ネットワークトラフィックの管理 開発者がAPIの運⽤を気にせずに作成、公開することを可能にするサービス
  37. 37. Amazon API Gateway 複数バージョンとステージ APIキーの作成と配布 リクエスト時におけるAWS SigV4の利⽤ リクエストのスロットリングとモニタリング バックエンドとしてAWS Lambdaが利⽤可能
  38. 38. Amazon API Gateway レスポンスをキャッシュ可能 CloudFrontを利⽤したレイテンシの軽減とDDoS対策 iOS、AndroidとJavaScript向けSDKの⾃動⽣成 Swaggerのサポート Request / Responseにおけるデータ変換
  39. 39. Amazon API Gateway レスポンスをキャッシュ可能 CloudFrontを利⽤したレイテンシの軽減とDDoS対策 iOS、AndroidとJavaScript向けSDKの⾃動⽣成 Swaggerのサポート Request / Responseにおけるデータ変換
  40. 40. Lambdaファンクション: ステートレス、トリガーベースのコード実⾏ AWS Lambda あらゆるスケールで⾼性能 費⽤対効果が⾼く効率的 インフラ管理不要 使った分だけの⽀払い リクエスト量に応じて⾃動的に キャパシティ調整 100ms単位のコンピュート課⾦ ⾃⾝のコードを持ち込み 標準的な⾔語でコードを実⾏ スレッド、プロセス、ファイル やシェルスクリプトも利⽤可能 インフラではなくビジネスロジック に集中可能 コードをアップロードするだけで、 Lambdaが全てをハンドリング
  41. 41. AWS Lambda ✤インフラを⼀切気にすることなくアプリケーションコードを実⾏でき るコンピュートサービス ✤実⾏基盤は全てAWSが管理 ✤AWSサービスと連携させることで簡単にイベントドリブンなアプリケーション を実装可能 ✤コード実⾏時間に対しての課⾦でありコスト効率が⾮常に⾼い ✤VPC内のリソースへのアクセスも可能 ✤Lambda function ✤JavaScript(Node.js)およびJava、Pythonで記述 ✤サードパーティライブラリも利⽤可能
  42. 42. イベントソース ✤現時点では以下の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
  43. 43. サーバレスアーキテクチャのメリット ✤アプリの開発に多くのメリット ✤バックエンド側のコードが減るため開発コストを最⼩化 ✤バックエンド側のサーバが減るため運⽤コストを最⼩化 ✤AWSによってマネージされるため、スケーラビリティやキャパシティ、セキュ リティの⼼配不要 ✤⾮常にコスト効率が⾼く、多くの場合コスト減が⾒込める ✤必要に応じてEC2も導⼊できる安⼼感 ✤汎⽤的なサービスでは実現の難しい、ビジネス固有の要件に関してはEC2を利 ⽤して実装 ✤EC2を利⽤する部分についてもCodeDeployやElastic Beanstalk、OpsWorks等 で⾃動化
  44. 44. 付加価値を⽣まない 重労働からの解放
  45. 45. 「何をするか」 を書くだけでいい
  46. 46. 「何をするか」 を書くだけでいいAll you need is code.
  47. 47. If you need more flexibility
  48. 48. Use container.
  49. 49. You need longer timeout?
  50. 50. Use container.
  51. 51. What are containers? ✤プロセスの隔離 ✤イメージ ✤⾃動化 Server Guest OS Bins/Libs Bins/Libs App2App1
  52. 52. Containerのメリット Portable Server Guest OS Bins/Libs Bins/Libs App2App1
  53. 53. Containerのメリット Flexible Server Guest OS Bins/Libs Bins/Libs App2App1
  54. 54. Containerのメリット Fast Server Guest OS Bins/Libs Bins/Libs App2App1
  55. 55. Containerのメリット Efficient Server Guest OS Bins/Libs Bins/Libs App2App1
  56. 56. Containerのメリット ⼀貫性のある環境 ⾼い⽣産性 バージョン管理 効率的な オペレーション
  57. 57. FROM ubuntu:14.04 MAINTAINER John Doe <jdoe@example.com> RUN apt-get update && apt-get install -y curl wget default-jre git RUN adduser --home /home/sinatra --disabled- password --gecos '' sinatra RUN adduser sinatra sudo RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers USER sinatra RUN curl -sSL https://get.rvm.io | bash -s stable RUN /bin/bash -l -c "source /home/sinatra/.rvm/scripts/rvm" RUN /bin/bash -l -c "rvm install 2.1.2" RUN /bin/bash -l -c "gem install sinatra" RUN /bin/bash -l -c "gem install thin" Package
  58. 58. docker push docker pullShip
  59. 59. docker runRun
  60. 60. Cluster Management
  61. 61. $ docker run myimage Server Guest OS Bins/Libs Bins/Libs App2App1
  62. 62. Amazon EC2 Container Service (ECS) ✤Dockerコンテナを複数のEC2インスタンスに分散配置できる ✤⼀時的な計算処理にも、ロングランニングな処理にも対応 ✤ELB連携など各種AWSサービスとの親和性 ✤Amazon ECS⾃体の利⽤は無料 複数のコンテナをEC2のクラスタ上で⼀元管理できるサービス
  63. 63. Cluster Management Engine Agent Communication Service API Key/Value Store Amazon ECS AZ ECS Agent Container Instance Task Container Task Container Docker AZ ECS Agent Container Instance Task Container Task Container Docker ECS Agent Container Instance Task Container Task Container Docker ELB ELB User/Scheduler
  64. 64. Cluster管理を簡単に ✤クラスタ管理ソフトの導⼊不要 ✤クラスタの状態管理 ✤コンテナの管理 ✤コントロールとモニタリング ✤1コンテナから数万コンテナまで スケール
  65. 65. フレキシブルなコンテナ配置 ✤アプリケーション ✤バッチジョブ ✤複数のスケジューラ
  66. 66. AWSサービスとの連携 ✤Elastic Load Balancing ✤Amazon Elastic Block Store ✤Amazon Virtual Private Cloud ✤AWS Identity and Access Management ✤AWS CloudTrail
  67. 67. Service Discovery/Registry? Hashicorp Consul ✤DNSもしくはHTTP経由でのエンドポイン トの登録と探索 ✤エンドポイントへのヘルスチェック ✤動的コンフィグレーションなどのための Key/Valueストア
  68. 68. クラウドネイティブなアプリ開発
  69. 69. The 12 Factor App
  70. 70. The 12 Factor App ✤モダンなWebアプリケーション開発のための⽅法論 ✤直接的にマイクロサービスと関連する話しではないが⼀読しておくべ き ✤URL http://12factor.net/ http://12factor.net/ja/(⽇本語訳)
  71. 71. The 12 Factor App ✤Codebase - コードベース - ✤バージョン管理されている1つのコードベースと複数のデプロイ ✤Dependencies - 依存関係 - ✤依存関係を明⽰的に宣⾔し分離する ✤環境に依存しないこと ✤Config - 設定 - ✤設定を環境変数に格納する ✤設定などの環境によって異なる可能性があるものはOSレベルの環境変数によって注⼊ されるべきである ✤Backing services - バックエンドサービス - ✤バックエンドサービスをアタッチされたリソースとして扱う ✤データベースやメッセージブローカーといったものはアタッチされたリソースとして 扱う
  72. 72. The 12 Factor App ✤Build, release, run - ビルド、リリース、実⾏ - ✤ビルド、リリース、実⾏の3つのステージを厳密に分離する ✤Process - プロセス - ✤アプリケーションを1つもしくは複数のステートレスなプロセスとして実⾏す る ✤プロセス間で何も共有はしない ✤Port binding - ポートバインディング - ✤ポートバインディングを通してサービスを公開する ✤Concurrency - 並⾏性 - ✤プロセスモデルによってスケールアウトする ✤⽔平⽅向へのプロセスのスケールアウトによって並⾏性を担保する
  73. 73. The 12 Factor App ✤Disposability - 廃棄容易性 - ✤⾼速な起動とグレースフルシャットダウンで堅牢性を最⼤化する ✤Dev/prod parity - 開発/本番⼀致 - ✤開発、ステージング、本番環境をできるだけ⼀致させた状態を保つ ✤CI/CDは各環境が揃っていることで実現される ✤Log - ログ - ✤ログをイベントストリームとして扱う ✤中央集権的なサービスによってイベントを集約、インデックス化し分析する環 境が実現される ✤Admin processes - 管理プロセス - ✤管理タスクを1回限りのプロセスとして実⾏する
  74. 74. アプリケーションの実装パターン
  75. 75. アプリケーションの実装パターン ✤いくつかの典型的なパターンがある ✤シンプルなものから複雑なものまで ✤どのやり⽅が許容できるかはチームで決めること ✤短期的にはシンプルなアプローチを取ったほうがいい ✤最初に選んだやり⽅を最後まで貫く必要はない ✤柔軟に変更する
  76. 76. Graceful Degradation ✤500エラーは返さない ✤⼀部に障害やエラーがあっても全体の停⽌を引き起こさず、その他の 機能は有効に機能させる ✤最悪な例:
  77. 77. Throttling ✤内部サービスによる偶発的なDoSが引き起こされることはよくある問 題 ✤リクエストに対するスロットリングが基本的な防御⽅法 ✤スロットリングにはユーザ単位であったり、ソースアドレス単位で あったり、あるいはその組み合わせも ✤計測は常に⼤事 ✤API Gatewayを使えば簡単にできます
  78. 78. Fail Fast ✤エラーを検知したらなるべく早く返す ✤メモリ不⾜などの問題出会った場合、素早い回復が可能になることが 多い ✤エラーの原因が軽減されれば、サービスは再び正常に動作する
  79. 79. Fail Silently ✤エラーを内部的に処理した上で、ユーザには成功を⽰すレスポンスを 返す ✤Webサービスであれば内容がない200 OKを返す ✤正常終了のコードを返す ✤当然、内部的にはエラーとなっているため、それを検知するためのロ ギングは⾏うこと
  80. 80. Static Fallback ✤エラー時には何らかの静的なコンテンツもしくは値を返す ✤返すコンテンツにはリクエストのコンテキストがわかるものを含める こと ✤ハードコーディングせずに変更可能にすること
  81. 81. Retry ✤失敗は⼀時的なものが多いのでシンプルにリトライすることで成功す ることが多い ✤スロットリングに対する対応も同様 ✤エラーが起きたら、少し待った上でリトライする ✤Exponential back offもしくはフィボナッチ数列を利⽤したリトライ間 隔の調整を⾏う ✤Exponential back off ••• リトライ間隔を指数関数的に⻑くしていくアルゴリズ ム ✤無制限にリトライするのではなくどこかでエラーとして判断すること が必要
  82. 82. Caching ✤サービス呼び出しに対するレスポンスをキャッシュする ✤リクエストを受け取ったら、最初にキャッシュをチェックし、キャッ シュがない場合や期限切れの場合にだけバックエンドへとコールする ✤レスポンス時にはキャッシュにも書き込みを⾏う ✤キャッシュがあった場合はキャッシュを⽤いてレスポンスする
  83. 83. Circuit Breaker ✤発⽣したエラー数を記録し、閾値を越えたときにフォールバックプラ ンを実⾏する ✤⼀般的にはFail fastと同じくエラーを素早く返す ✤故障箇所を部分的にかつ迅速に切り離すことでサービス全体への影響 を防ぐ ✤機能を回復させるために定期的にヘルスチェックする
  84. 84. Think Parallel ✤処理を並列化することでレイテンシを⼩さくする
  85. 85. Smooth Internal Traffic ✤キューの利⽤ ✤コンポーネント間にキューを置いて、内部トラフィックをなだらかにするバッ ファとして利⽤ ✤スパイク的な負荷をハンドリング
  86. 86. クラウドネイティブなデプロイ
  87. 87. DevOps DevOps = ライフサイクルを効率的にスピードアップさせること developers customers releasetestbuild plan monitor delivery pipeline feedback loop ソフトウェア開発のライフサイクル
  88. 88. モノリシックな開発サイクル developers releasetestbuild delivery pipelineapp
  89. 89. The Amazon Way
  90. 90. 2 Pizza Rule AMAZON CONFIDENTIAL
  91. 91. Two Pizza Team ✤作るものに対する全てを負う ✤プロダクト計画(ロードマップ) ✤開発 ✤運⽤ ✤サポート ✤You build it, you run it ✤DevOps 94
  92. 92. マイクロサービスな開発サイクル developers delivery pipelinesservices releasetestbuild releasetestbuild releasetestbuild releasetestbuild releasetestbuild releasetestbuild
  93. 93. MonitorProvisionDeployTestBuildCode Elastic Beanstalk OpsWorks Cloud Watch Cloud Formation Code Deploy Code Commit Code Pipeline AWS DevOps Services
  94. 94. AWS Code services CodeCommit ソースコード管理 CodePipeline 継続的デリバリ CodeDeploy ⾃動化されたデプロイ
  95. 95. AWS CodePipeline ✤リリースプロセスの定義 ✤⾃社システムとのインテグレーション ✤パイプラインステータスの可視化 ✤各リリースの⼀貫した検証 Amazonと同様の継続的デリバリとリリース⾃動化 Build 1) Build 2) Unit test 1) Deploy 2) UI test Source Beta Production 1) Deploy 2) Perf test Gamma 1) Deploy canary 2) Deploy region 1 3) Deploy region 2 1) Pull
  96. 96. AWS CodeDeploy ✤簡単で信頼性の⾼いデプロイを実現 ✤簡単にスケール ✤あらゆるサーバにデプロイ可能 Test CodeDeployv1, v2, v3 Production Dev リビジョン deployment groups
  97. 97. AWS CodeCommit ✤S3上に⽤意されたGitプライベートリポジトリ ✤⼀般的なGitのツールを利⽤可能 ✤Amazon S3とDynamoDBを利⽤したスケーラビリティ、可⽤性と信頼性 ✤ユーザ固有のキーで全リポジトリを⾃動的に暗号化 git pull/push CodeCommit Git objects in Amazon S3 Git index in Amazon DynamoDB Encryption key in AWS KMS SSH or HTTPS
  98. 98. 参考資料 ✤ Martin Fowlerのブログ ✤ Microservices http://martinfowler.com/articles/microservices.html ✤ Microservices Premium http://martinfowler.com/bliki/MicroservicePremium.html ✤ THE TWELVE-FACTOR APP http://12factor.net/ http://12factor.net/jp/ (⽇本語) ✤ AWS関連 ✤ Amazon API Gateway http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/welcome.html ✤ AWS Lambda http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html ✤ Amazon ECS http://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html ✤ AWS CodePipeline http://docs.aws.amazon.com/en_us/codepipeline/latest/userguide/welcome.html ✤ AWS CodeDeploy http://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html ✤ AWS CodeCommit http://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html ✤ AWSクラウドサービス活⽤資料集 https://aws.amazon.com/jp/aws-jp-introduction/ ✤ AWS re:Invent 2015 スライド http://www.slideshare.net/AmazonWebServices/tag/reinvent2015 ✤ Exponential Backoff and Jitter https://www.awsarchitectureblog.com/2015/03/backoff.html

×