$30 off During Our Annual Pro Sale. View Details »

Design for Failure with Startup

Design for Failure with Startup

https://aws-startup-community.connpass.com/event/258486/
2022/09/29(木) AWS Startup Tech Meetup 関西 #1

はまーん
PRO

September 29, 2022
Tweet

More Decks by はまーん

Other Decks in Technology

Transcript

  1. © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    Shinichi Hama / track3jyo
    Startup Solutions Architect, West Japan
    Amazon Web Services Japan G.K.
    Design for Failure
    with Startup
    AWS Startup Tech Meetup 関西 #1

    View Slide

  2. Shinichi Hama / track3jyo
    Startup Solutions Architect
    Amazon Web Service Japan
    ---
    work:
    - ⻄⽇本のスタートアップ⽀援
    - コンテナ技術のあれこれ
    過去のスライド: https://speakerdeck.com/track3jyo
    趣味︓家のアーキテクチャを考えること

    View Slide

  3. ⽣きてるとさまざまな Failure(予定外のこと)が起きる

    View Slide

  4. 突然のパンク︕
    予備のタイヤを持っておく
    別の交通⼿段に切り替える

    View Slide

  5. おしゃれなカフェに⾏こうとしたら・・・

    View Slide

  6. お店が混んでてて⼊れない︕
    予定を組み替えてリトライ
    別の選択肢(お店)を⽤意しておく

    View Slide

  7. キャンプ場で・・・

    View Slide

  8. 悪天候︕
    最悪の事態になる前に察知すること

    View Slide

  9. 備えあれば憂いなし!!
    ⼊念な準備、情報取集、迅速な判断が⼤切

    View Slide

  10. システムの世界でも Failure(予定外のこと)は発⽣する

    View Slide

  11. 健全なシステムの運⽤を実現するために

    View Slide

  12. クラウドに最適化された
    (クラウドネイティブな)設計とは

    View Slide

  13. クラウドネイティブな設計とは何か︖︖
    Design for Failure な設計にすること

    View Slide

  14. connect
    DevAx
    © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    Everything fails all the
    time
    Dr. Werner Vogels
    Chief Technology Officer of Amazon.com

    View Slide

  15. connect
    DevAx
    © 2021, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    Design for Failure
    To
    Your Application

    View Slide

  16. 健全なシステムの運⽤を実現するために

    View Slide

  17. マイクロサービス
    キューイング
    ロギング
    冪等性の確保
    モニタリング
    サーキットブレーカー
    オートスケーリング
    オートスケーリング
    ⾮同期処理
    ステートレス
    組織
    イベントドリブン
    リトライ制御
    分散トレーシング
    ブルーグリーンデプロイ
    オートヒーリング
    データの退避/破棄
    マネージド
    補償トランザクション
    スロットリング
    マルチ AZ
    Design for Failure をどのように実現する︖

    View Slide

  18. スタートアップではそうも⾔ってられないことが多い
    ⼈もいないし、
    ビジネスロジックに
    取り組むでいっぱい
    いっぱいやわ。。
    とにかく早く作りたい。
    余計なコストもかけてら
    れない。。
    !

    View Slide

  19. Design for Failure な設計になっていないとどうなるか︖
    • 例1: ⼤事な時(e.g. VC へデモを⾒せる時等) にダウンし
    ていることによる機会損失
    • 例2: メンバーも少ないため、その都度発⽣する障害対応
    だけで1⽇が過ぎてしまう

    View Slide

  20. スタートアップ向け「まずここから」Design for Failure
    • 想定上のアクセスが来てもダウンしない
    冗⻑構成 (マルチAZ)/オートスケーリング
    • 問題のあるインフラがあっても置き換えてくれる
    オートヒーリング
    • データを誤って消しちゃった時にでも復旧できる
    バックアップ・リストア
    • (+α) アプリケーションがエラーになった際の
    リトライ処理やキューイング

    View Slide

  21. スタートアップが Design for Failure を実現するために
    Q. 時間やお⾦のないスタートアップにとって、
    Design for Failure を真⾯⽬に全て向き合うのは難しいのでは︖
    • まずは、Design for Failure な設計が組み込まれたサービスを
    選定できないか考える
    • スピードとコストとのトレードオフではない
    • むしろ対応に追われる⼯数がなくなりスピードアップ
    • 実装やアーキテクチャに依存するところはその先で考える
    • AWS の SA に相談も︕

    View Slide

  22. プロダクト開発に専念できる
    AWS の使い⽅

    View Slide

  23. オーソドックスな技術スタック

    View Slide

  24. オーソドックスな技術スタック
    フロントエンド、
    モバイルアプリ
    バックエンド
    Webサーバー
    バックエンド
    DBサーバー
    ⾔語・フレームワーク
    React, Vue, Swift,
    Kotlin, Java etc
    インフラ
    Web Hosting サービス、
    BaaS etc
    ⾔語・フレームワーク
    Ruby on Rails, Laravel,
    Django, Express, Spring etc
    インフラ
    仮想サーバー、コンテナ、
    サーバーレス etc
    DB 種類
    RDBMS, NoSQL,
    Fulltext Search, etc
    インフラ
    マネージドDBサービス,
    仮想サーバー etc

    View Slide

  25. 負担をオフロードできる AWS のサービス
    フロントエンド、
    モバイルアプリ
    バックエンド
    Webサーバー
    バックエンド
    DBサーバー
    Amplify Hosting AWS App Runner Amazon Aurora
    Serverless v2

    View Slide

  26. Amplify Hosting

    View Slide

  27. AWS Amplify Hosting
    ウェブアプリや静的ウェブサイトのため
    のフルマネージドなホスティングサービ

    簡単なカスタムドメイン設定も可能
    継続的デプロイメント
    Amplify CLI で Infrastructure as Code(
    IaC)を⽣成
    Amplify CLI やコンソールからのデプロ
    イ AWS Amplify CLI AWS Amplify Console

    View Slide

  28. Amplify Hosting の利⽤フロー

    View Slide

  29. Amplify Hosting の主な機能
    グローバルで利⽤可能
    プルリクエストプレビュー
    カスタムドメインの簡単設定
    シンプルな
    継続的ワークフロー
    パスワード保護

    View Slide

  30. もっと AWS Amplify を知りたい⽅へ
    公式ドキュメント
    https://docs.amplify.aws
    AWS Summit 2021 「Web・モバイルアプリ開発を加速させる AWS Amplify」
    https://d1.awsstatic.com/events/jp/2021/summit-online/AWS-
    47_AWS_Summit_Online_2021_FWM01.pdf
    ワークショップ
    https://amplify-sns.workshop.aws/ja/
    Amplify 学習リソース集
    https://aws-amplify-jp.github.io/resources
    Amplify Japan User Group Slack
    https://github.com/aws-amplify-jp/awesome-aws-amplify-ja#slack

    View Slide

  31. AWS App Runner

    View Slide

  32. AWS サービスを組み合わせてインフラを構築
    柔軟性が⾼い
    VPC (ネットワーク)
    Fargate (コンピュート)
    ECS (オーケストレーション)
    ALB (ロードバランサ)
    AWS Auto Scaling (オートスケール)
    CodeBuild (CI/CD)
    ⼿間がかかる

    View Slide

  33. 構築済みのインフラにすぐにデプロイ
    AWS App Runner

    View Slide

  34. AWS App Runner の主な特徴
    シンプルな
    オートスケーリング
    統合された
    メトリクス・ロギング機能
    シンプルな
    セットアップ

    View Slide

  35. AWS App Runner の主な特徴
    シンプルな
    オートスケーリング
    統合された
    メトリクス・ロギング機能
    シンプルな
    セットアップ

    View Slide

  36. App Runner 上にウェブアプリケーションをデプロイ
    App Runner
    Amazon ECR
    Image Repo
    動かしたいウェブアプリケーションを指定する

    View Slide

  37. App Runner 上にウェブアプリケーションをデプロイ
    App Runner
    GitHub
    動かしたいウェブアプリケーションを指定する
    GitHub Repo

    View Slide

  38. App Runner 上にウェブアプリケーションをデプロイ
    App Runner
    GitHub
    ソースコードを取得
    コンテナイメージをビルドしてデプロイ
    コンテナインスタンス
    ロードバランサー
    ネットワーク (VPC)
    App Runner
    GitHub Repo

    View Slide

  39. App Runner 上にウェブアプリケーションをデプロイ
    App Runner
    コンテナインスタンス
    ロードバランサー
    ネットワーク (VPC)
    App Runner
    コンテナイメージを取得
    コンテナイメージをデプロイ
    Amazon ECR
    Image Repo

    View Slide

  40. App Runner 上にウェブアプリケーションをデプロイ
    コンテナインスタンス
    ロードバランサー
    ネットワーク (VPC)
    App Runner
    エンドユーザー デフォルトドメイン
    https://xxxxxxxx..awsapprunner.com

    View Slide

  41. AWS App Runner の主な特徴
    シンプルな
    オートスケーリング
    統合された
    メトリクス・ロギング機能
    シンプルな
    セットアップ

    View Slide

  42. App Runner - シンプルなオートスケーリングの設定
    オートスケールのしきい値
    となるリクエスト数
    コンテナインスタンスの
    最⼩数
    コンテナインスタンスの
    最⼤数
    デフォルト
    の設定値

    View Slide

  43. オートスケール
    コンテナインスタンス
    ロードバランサー
    ネットワーク (VPC)
    App Runner
    エンドユーザー デフォルトドメイン

    View Slide

  44. オートスケール
    コンテナインスタンス
    ロードバランサー
    ネットワーク (VPC)
    App Runner
    エンドユーザー デフォルトドメイン
    エンドユーザー
    エンドユーザー

    View Slide

  45. オートスケール
    コンテナインスタンス
    ロードバランサー
    ネットワーク (VPC)
    App Runner
    エンドユーザー デフォルトドメイン

    View Slide

  46. AWS App Runner の主な特徴
    シンプルな
    オートスケーリング
    統合された
    メトリクス・ロギング機能
    シンプルな
    セットアップ

    View Slide

  47. ログ・メトリクス
    ロードバランサー
    App Runner 開発者
    App Runner コンソール
    コンテナインスタンス
    ログとメトリクスを⾃動で収集
    App Runner コンソールから確認

    View Slide

  48. App Runner - Console でのログの閲覧
    ⾃分でログエージェントを実装する必要なし

    View Slide

  49. App Runner - Console でのメトリクスの閲覧
    リクエスト数、応答のレイテンシ、HTTP 2XX 4XX 5XX それぞれの数
    を App Runnerのコンソール画⾯で閲覧可能

    View Slide

  50. もっと AWS App Runner を知りたい⽅へ
    公式ドキュメント
    https://docs.aws.amazon.com/apprunner/latest/dg/what-is-apprunner.html
    ブログ
    https://aws.amazon.com/jp/blogs/news/introducing-aws-app-runner/
    ワークショップ
    https://www.apprunnerworkshop.com/
    ロードマップ
    https://github.com/aws/apprunner-roadmap/projects/1

    View Slide

  51. Amazon Aurora
    Serverless v2

    View Slide

  52. Amazon Aurora
    優れた性能と拡張性
    クラウド向けに再設計された MySQL, PostgreSQL と互換性のある RDBMS
    商⽤データベースの性能と可⽤性を 1/10 のコストで
    ⾼可⽤性と耐久性 ⾼い安全性 フルマネージド

    View Slide

  53. Amazon Aurora のアーキテクチャ
    ストレージノード
    分散ストレージシステム
    データベース⽤に設計された
    専⽤の分散ストレージシステム
    データは3箇所に分散された数百
    のストレージノードに6つのコ
    ピーとして保存

    View Slide

  54. Amazon Aurora のアーキテクチャ
    ストレージノード
    分散ストレージシステム
    データベース⽤に設計された
    専⽤の分散ストレージシステム
    データは3箇所に分散された数百
    のストレージノードに6つのコ
    ピーとして保存
    SQL を実⾏するインタフェース
    は分散ストレージを共有するこ
    とで、責務が分離
    SQL
    トランザクション
    キャッシュ
    コンピュートノード

    View Slide

  55. Amazon Aurora Serverless v2
    アプリケーションのニーズに応じて⾃動的に容量を拡張
    インスタンスタイプの⼀つとして簡単なセットアップ
    秒単位のシンプルな従量課⾦
    瞬時に拡張し、要求の厳しいアプリケーションをサポート
    データベースのキャパシティ管理の⼼配からの解放

    View Slide

  56. 急激なアクセス増減対応の選択肢
    Storage fleet
    ⾃動スケール
    Amazon Aurora Serverless v2

    View Slide

  57. 急激なアクセス増減対応の選択肢
    Storage fleet
    Compute fleet
    ⾃動スケール
    ⾃動スケール
    Amazon Aurora Serverless v2

    View Slide

  58. 急激なアクセス増減対応の選択肢
    Storage fleet
    Compute fleet
    ⾃動スケール
    ⾃動スケール
    Amazon Aurora Serverless v2
    • インプレーススケール:CPUやメモリのリ
    ソースなどを動的に追加することで、1秒以
    内にスケーリングが可能
    • パフォーマンス影響なし:数十万トランザク
    ションを実行中でも、スケーリングによる影
    響はない
    https://aws.amazon.com/jp/blogs/news/amazon-aurora-serverless-v2-is-
    generally-available-instant-scaling-for-demanding-workloads/

    View Slide

  59. 設定はリソース使⽤量の範囲を設定するだけ
    最⼩のリソース使⽤量
    0.5ACUから0.5刻みで可能
    最⼤のリソース使⽤量
    128ACUまで0.5刻みで可能
    リソースは “ACU” という単位で
    管理されます。1ACU=RAM 2GiB
    と、それに応じたCPUやネット
    ワークリソースが割り当てられ
    ます。

    View Slide

  60. Aurora Serverless v2 のシームレスなスケーリング
    Aurora Serverless v2 のスケーリング例 (定期的に同時実⾏数を上げながら OLTP 処理を実施)
    同時実⾏数
    が増加
    同時実⾏数
    が増加
    同時実⾏数
    が増加
    処理終了
    同時実⾏数が増加して、必要なリソースが
    増加した時点で、Aurora Serverless v2の
    キャパシティが増加(⻘線)
    また、スケール時にトランザクション
    (⾚線のCommitThroughput)を阻害しない
    処理が終了して、リソースが不要
    になると徐々にキャパシティが
    減少(⻘線)

    View Slide

  61. もっと Amazon Aurora Serverless v2 を知りたい⽅へ
    公式ドキュメント
    https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html
    ブログ
    https://aws.amazon.com/jp/blogs/news/amazon-aurora-serverless-v2-is-generally-available-
    instant-scaling-for-demanding-workloads/
    Deep Dive
    https://www.youtube.com/watch?time_continue=350&v=b2Tl6SsWC-M&feature=emb_title

    View Slide

  62. 負担をオフロードできる AWS のサービス
    フロントエンド、
    モバイルアプリ
    バックエンド
    Webサーバー
    バックエンド
    DBサーバー
    Amplify Hosting AWS App Runner Amazon Aurora
    Serverless v2

    View Slide

  63. サンプルアーキテクチャ ※VPC や ECR等⼀部省略しています
    Amplify
    Hosting
    App Runner
    Aurora
    Serverless v2
    S3 Lambda
    メッセージキューイング
    (Amazon SQS キュー)
    コンテナ実⾏環境
    (Fargate)
    バッチ処理を⾏うコンテナ
    (ECS タスク)
    イベントバス
    (EventBridge)
    ワークフロー管理 (Step Functions)
    定期実⾏
    署名付きURL発行
    署名付きURLで
    Upload / Download

    View Slide

  64. スモールな仕組みでもいいのでモニタリングも⼤事︕
    https://speakerdeck.com/track3jyo/startup-monitoring-aws2022

    View Slide

  65. • 備えあれば憂いなし︕
    • まずは、Design for Failure な設計が組み込まれた
    サービスを選定できないか考える
    • Amplify Hosting, App Runner, Aurora Serverless v2
    さいごに – お伝えしたかったこと -

    View Slide

  66. Thank you
    © 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.
    Shinichi Hama
    track3jyo

    View Slide