Upgrade to Pro — share decks privately, control downloads, hide ads and more …

これから始める/今すぐ始めるサーバレス / Startup fm - Serverless

mats
August 20, 2020

これから始める/今すぐ始めるサーバレス / Startup fm - Serverless

Startup.fm の第7回目「これから始める/今すぐ始めるサーバレス」で使用したスライドです。

mats

August 20, 2020
Tweet

More Decks by mats

Other Decks in Technology

Transcript

  1. © 2020, Amazon Web Services, Inc. or its Affiliates. Kazuki

    Matsuda @mats16k Startup Solutions Architect | Amazon Web Services Japan これから始める/今すぐ始めるサーバレス Startup.fm #7
  2. © 2020, Amazon Web Services, Inc. or its Affiliates. Kazuki

    Matsuda @mats16k Startup Solutions Architect Amazon Web Services Japan --- インターネット広告代理店(のアドサーバ作っている部⾨) でインフラエンジニアに される ➡ アドテク系スタートアップ2⼈⽬のエンジニア(SRE、アプリ開発、情シス、データエンジニア、採⽤) ➡ AWS でスタートアップ⽀援 & コンテナのスペシャリスト AWS Fargate / AWS Lambda あたりが好きです 最近は AWS Amplify と Amazon Chime SDK がイチオシ
  3. © 2020, Amazon Web Services, Inc. or its Affiliates. アジェンダ

    • スタートアップにこそサーバレスがおすすめな理由 • サーバレスアーキテクチャパターン • 今すぐ始めるサーバレス • まとめ 想定時間 • Session: 30-40m • QA: 20-30m
  4. © 2020, Amazon Web Services, Inc. or its Affiliates. 会社の優先順位を⼀つだけにするためにスケジュールを

    空けられるとしたら、何を優先するか (2019) Founders Employees ビジネス全体で考えると、開発が占める割合は意外と少ない
  5. © 2020, Amazon Web Services, Inc. or its Affiliates. プロダクト開発や機能追加/改善は重要だが、

    スタートアップの成功にはそれ以外の要素の⽐率も⼤きい プロダクト 開発 採⽤ 顧客獲得 チームビル ディング 資⾦調達 ガバナンス
  6. © 2020, Amazon Web Services, Inc. or its Affiliates. より効率的な開発が求められる

    プロダクト開発や機能追加/改善は重要だが、 スタートアップの成功にはそれ以外の要素の⽐率も⼤きい
  7. © 2020, Amazon Web Services, Inc. or its Affiliates. プロダクト開発、運⽤の要素(オンプレミス含む)

    • コンピューティングリソース、ストレージ、物理ネットワーク • ネットワーク構成 • OS 保守、パッチ適⽤、脆弱性対応 • プラットフォーム、アプリ実⾏基盤 • 冗⻑化 • サーバ間通信・暗号化 • アプリケーションコード • アプリケーションデータ etc...
  8. © 2020, Amazon Web Services, Inc. or its Affiliates. プロダクト開発、運⽤の要素

    制約 ≠ デメリット サービスの仕様を正しく理解することで、⾼い運⽤性が得られる ↓ プロダクトの価値向上に割けるリソースが増える
  9. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Well-Architected Framework 設計原則と(質問と回答形式)のベストプラクティス集 コストの 最適化 セキュリティ 信頼性 パフォーマンス 効率 運⽤の 優秀性 サーバレスアーキテクチャで利⽤するサービスの多くは 、 W-A の項⽬の多くを⾃動的に満たすように設計されている ※ サーバレスアプリケーションレンズ も合わせてご覧ください
  10. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Well-Architected Framework 設計原則と(質問と回答形式)のベストプラクティス集 コストの 最適化 セキュリティ 信頼性 パフォーマンス 効率 運⽤の 優秀性 サーバレスアーキテクチャを前提とすることで、 Well-Architected な構成に⾃然と近づいていく ※ サーバレスアプリケーションレンズ も合わせてご覧ください
  11. © 2020, Amazon Web Services, Inc. or its Affiliates. サーバレス

    アーキテクチャパターン 今すぐ始める
  12. © 2020, Amazon Web Services, Inc. or its Affiliates. イベント駆動処理の例

    Amazon S3 AWS Lambda Image • 画像圧縮、リサイズ • シンプルな数値計算 • ⽂字変換 etc... Amazon DynamoDB My Apps Upload Create Update Delete AWS Lambda DynamoDB Streams • 外部の API をコール • 簡単な集計 • TTL を利⽤した過去データのアーカイブ • CQRS(コマンドクエリ責務分離) Read Amazon Elasticsearch Service TTL で削除された過去データを別テーブルに保存 検索や集計に適したデータストアに保存
  13. © 2020, Amazon Web Services, Inc. or its Affiliates. イベント駆動処理の例

    (Amazon EventBridge) Custom event bus Default event bus SaaS event bus Amazon EventBridge SaaS Apps Custom Apps AWS Services Rule AWS Lambda AWS Lambda Time-based (Cron) • 通知(プッシュ、メール、Webプッシュ) • データベースへの反映 • 後続処理の実⾏ ※ Amazon EventBridge は AWS Lambda 以外も呼び出し可能です • 簡単な定期処理 • 外部 API のポーリング • 重い処理の hook • e.g. AWS Batch, AWS Step Functions
  14. © 2020, Amazon Web Services, Inc. or its Affiliates. ⾮同期処理の例

    運⽤上の優秀性 / セキュリティ / 信頼性 • キューを保持するデータストアや ジョブワーカー管理運⽤ パフォーマンス効率 • 需要に合わせてジョブワーカーを増 減させる設計⼯数 コスト最適化 • インスタンス型の構成は実需要に関 わらずサーバコストがかかる Amazon SQS Redis Application load balancer Web アプリケーション ジョブワーカー AWS Lambda Amazon Kinesis Data Streams AWS Lambda
  15. © 2020, Amazon Web Services, Inc. or its Affiliates. 同期処理の例

    (API / SPA) Amazon API Gateway AWS Lambda Amazon DynamoDB AWS AppSync Amazon DynamoDB Amazon Cognito 本格的なアプリケーションを提供しながら、 • 管理運⽤の⼤部分は AWS に任せた⾼い運⽤性 • サービスに組み込み済みのセキュリティ • デフォルトで Multi-AZ 構成 • 急なリクエスト増にも対応可能なスケーラビリティ • 実際のユーザ利⽤に応じた課⾦(⾼いコスト効率) AI/ML やビデオ通話についてもサーバレスで利⽤可能 GraphQL REST Auth Amazon Chime AI Services
  16. © 2020, Amazon Web Services, Inc. or its Affiliates. 今すぐサーバレス始めるにあたっての課題

    • 各 AWS サービスを理解して、組み合わせて、うまく動くか確認して・・・と 実際にコードを書き始めるまでに時間がかかる • できればコードで構成管理したいが、CloudFormation や Terraform を書く のも億劫・・・今すぐコードを書き始めたい • 上記に加えて IAM もよく分かっていない
  17. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Chalice • AWS Chalice は Python 製のフレームワーク • AWS Lambda を⽤いたサーバーレスアプリケーションを構築するにおいて、 シンプルかつパワフルな機能を提供 • アプリケーションコードに合わせて、クラウド側が構成される $ chalice new-project helloworld $ tree helloworld helloworld ├── app.py └── requirements.txt $ chalice deploy from chalice import Chalice app = Chalice(app_name=test1’) @app.route('/’) def index(): return {'hello': 'world'} AWS Lambda + Amazon API Gateway
  18. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Chalice from chalice import Chalice app = Chalice(app_name=‘test1’) @app.schedule(‘rate(5 minutes)’) def handler(event): pass from chalice import Chalice app = Chalice(app_name=‘test2’) @app.on_s3_event(bucket='mybucket') def handler(event): pass AWS Lambda Amazon S3 from chalice import Chalice app = Chalice(app_name=‘test3’) @app.on_sqs_message(queue='myqueue’) def handler(event): pass Amazon SQS AWS Lambda AWS Lambda Amazon EventBridge (Cron)
  19. © 2020, Amazon Web Services, Inc. or its Affiliates. 今すぐサーバレス始めるにあたっての課題

    • 各 AWS サービスを理解して、組み合わせて、うまく動くか確認して・・・と 実際にコードを書き始めるまでに時間がかかる • できればコードで構成管理したいが、CloudFormation や Terraform を書く のも億劫・・・今すぐコードを書き始めたい • 上記に加えて IAM もよく分かっていない • フロントエンド(ネイティブアプリ / SPA)との対応を考える必要がある
  20. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Amplify とは AWS を⽤いた Web / モバイルアプリを最速でリリースするための開発プラットフォーム Framework ライブラリや UI コンポーネントを含む OSS のクライ アントフレームワーク CLI AWS AppSync や Amazon Pinpoint、Amazon DynamoDB など、AWS のビルディングブロックを簡 単に利⽤することができるツールチェーン Developer Tools フロントエンドとバックエンドに対して ビルド、テスト、デプロイ、ホストを容易に 実現できるサービス群
  21. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Amplify でチャットアプリを作る例 AWS AppSync Amazon DynamoDB Amazon Cognito GraphQL Auth
  22. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Amplify でチャットアプリを作る例 $ amplify add auth The current configured provider is Amazon Cognito. Do you want to use the default authentication and security configuration? (Use arrow keys) ❯ Default configuration Default configuration with Social Provider (Federation) Manual configuration I want to learn more. How do you want users to be able to sign in? Username ❯ Email Phone Number Email or Phone Number I want to learn more. Do you want to configure advanced settings? (Use arrow keys) ❯ No, I am done. Yes, I want to make some additional changes. Amazon Cognito Auth
  23. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Amplify でチャットアプリを作る例 $ amplify add api ? Please select from one of the below mentioned services: (Use arrow keys) ❯ GraphQL REST ? Provide API name: myamplifyproject ? Choose the default authorization type for the API (Use arrow keys) API key ❯ Amazon Cognito User Pool IAM OpenID Connect ? Do you want to configure advanced settings for the GraphQL API (Use arrow keys) ❯ No, I am done. Yes, I want to make some additional changes. ? Do you have an annotated GraphQL schema? No ? Do you want a guided schema creation? Yes AWS AppSync Amazon DynamoDB Amazon Cognito GraphQL Auth
  24. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Amplify でチャットアプリを作る例 AWS AppSync Amazon DynamoDB Amazon Cognito GraphQL Auth src/aws-exports.js /* eslint-disable */ // WARNING: DO NOT EDIT. This file is automatically generated by AWS Amplify. It will be overwritten. const awsmobile = { "aws_project_region": "ap-northeast-1", "aws_cognito_identity_pool_id": "ap-northeast-1:cf281c93-0472-4629-b3bb-ae709ca88ddc", "aws_cognito_region": "ap-northeast-1", "aws_user_pools_id": "ap-northeast-1_cuA09KF8y", "aws_user_pools_web_client_id": "1spsa803s5rb7be1982di179pr", "oauth": {}, "aws_appsync_graphqlEndpoint": "https://gyjhd6relbhele2eermmnzd2jq.appsync-api.ap-northeast- 1.amazonaws.com/graphql", "aws_appsync_region": "ap-northeast-1", "aws_appsync_authenticationType": "AMAZON_COGNITO_USER_POOLS" }; export default awsmobile;
  25. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Amplify でチャットアプリを作る例 AWS AppSync Amazon DynamoDB Amazon Cognito GraphQL Auth Vue.js の UI コンポーネントの例 GraphQL API を操作する例
  26. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Amplify でチャットアプリを作る例 Amplify Framework • ライブラリや UI コンポーネントを含む OSS のクライアントフレームワーク • CLI により⾃動⽣成される aws-exports.js を 参照する Amplify CLI • AWS のビルディングブロックを簡単に利⽤ することができるツールチェーン • GraphQL クエリの雛形も⾃動⽣成可能 AWS AppSync Amazon DynamoDB Amazon Cognito GraphQL Auth
  27. © 2020, Amazon Web Services, Inc. or its Affiliates. まとめ

    • スタートアップは「ビジネスにフォーカス」することが重要 • 開発の中で付加価値を⽣まない作業をいかに省⼒化出来るかが鍵 • サーバレスの運⽤性は⾮常に⾼い • 必ずしも「仮想マシンよりサーバレスが優れている」という訳ではない • そこに技術的に投資することが将来的な差別化につながることも • 適切に使い分けて、プロダクトの価値向上に向き合うことが重要 • 以前に⽐べて、多くの機能がマネージドサービス/サーバレスで 提供されていることに注意 • AWS Chalice, AWS Amplify でサーバレスの⽣産性を更に⾼められる
  28. © 2020, Amazon Web Services, Inc. or its Affiliates. Q.

    AWS Chalice は 無料で利⽤可能ですか? A. AWS Chalice はオープンソースのアプリケーションフレームワークです。 Chalice ⾃体の利⽤に費⽤はかかりませんが、Chalice が作成するリソース (AWS Lambda など) に対しては実際の利⽤に応じた課⾦が発⽣します。
  29. © 2020, Amazon Web Services, Inc. or its Affiliates. Q.

    AWS SAM や Serverless Framework と AWS Chalice を ⽐較した時の違いについて教えて下さい。 A. AWS SAM や Serverless Framework はクラウドの構成を管理するためのツー ルであり、全体の構成や権限、設定について YAML 等で記述する必要があります。 ⼀⽅ AWS Chalice はアプリケーションフレームワークです。クラウド側の構成を 記述する必要はなく、アプリケーションコードに合わせてサービスの設定や IAM 権限が設定されます。アプリケーションコードに集中できる⼀⽅で、細かくクラ ウド側の構成を設定することが出来ないため、柔軟性については AWS SAM や Serverless Framework の⽅が優れていると⾔えます。
  30. © 2020, Amazon Web Services, Inc. or its Affiliates. Q.

    AWS Chalice は他の⾔語で対応する予定はありますか? A. AWS Chalice は Python 製のアプリケーションフレームワークであり、現時点 (2020年8⽉)で他⾔語のサポートはありません。 似たような OSS のアプリケーションフレームワークで Ruby on Jets があります が、仕様は異なるので要件に合うか⾒極めてご利⽤頂ければと思います。
  31. © 2020, Amazon Web Services, Inc. or its Affiliates. Q.

    AWS Chalice と AWS Amplify だと使うべきポイントがちが うのでしょうか? A. Chalice は⾮常にパワフルなツールですが、Python のみ利⽤可能であることや、 クラウド側のリソースのみ構成可能であるなど、マッチするユースケースが限定的 です。 要件にマッチすれば⾮常に⾼い⽣産性が得られますが、要件に合わない場合は別の 実装⽅法を検討する必要があります。 ⼀⽅で Amplify はクラウド側のリソースを構築するだけでなくフロントエンドとの 連携もスコープ内です。また、カスタムリソースとして任意の CloudFormation テ ンプレートを取り込むことも出来るため、⾮常に⾼い柔軟性を備えています。 カスタムリソースを利⽤することにより、Amplify で標準サポートされていない AWS サービスも組み込むことが出来ます。
  32. © 2020, Amazon Web Services, Inc. or its Affiliates. Q.

    AWS Amplify の例で、⽉額費⽤はどの程度になりますか? A. ミニマムスタートの例で回答します。多くの場合下記の無料枠に収まりますが、DynamoDB がオ ンデマンドキャパシティーの場合、Read/Write に少額の費⽤が発⽣します。 ※ 書き込み要求ユニット 100 万あたり 1.4269USD 、読み出し要求ユニット 100 万あたり 0.285USD AWS AppSync の無料枠(サインアップから 12 か⽉間) • 250,000 件のクエリまたはデータ変更操作 • 250,000 件のリアルタイム更新 • 600,000 接続-分 Amazon DynamoDB の無料枠(オンデマンドキャパシティーモード) • 25 GB のデータストレージ • DynamoDB ストリームからのストリーム読み込みリクエスト 250 万回 • AWS のサービス全体での合計データ転送 (アウト) 1 GB Amazon Cognito の無料枠(ユーザープール) • Cognito ユーザープールに直接サインインするユーザーの場合は 50,000 MAU • SAML 2.0 ベースの ID プロバイダーを介してフェデレーションされるユーザーの場合は 50 MAU AWS AppSync Amazon DynamoDB Amazon Cognito GraphQL Auth
  33. © 2020, Amazon Web Services, Inc. or its Affiliates. Q.

    AWS Amplify から Amazon Aurora を使うことは可能で しょうか?どの様に実装すればよろしいでしょか? A. 現時点(2020年8⽉)で Amplify CLI を利⽤し amplify add database のような コマンドで Aurora のリソースを作成することは出来ませんが、 Amplify はカスタムリソースとして任意の CloudFormation テンプレートを取り 込むことが出来ますので、コチラを利⽤して構築することが可能です。 Aurora インスタンスの参照⽅法についてはワークロードに応じていくつかパター ンがあるので、判断が難しい場合は AWS のソリューションアーキテクトまでご 相談頂くのがよろしいかと思います。 参考: https://docs.amplify.aws/cli/usage/customcf
  34. © 2020, Amazon Web Services, Inc. or its Affiliates. Q.ライブ配信サービスをサーバーレスで構築することは可能

    ですか? A. Amazon Interactive Video Service を利⽤することで、配信サーバを⼀切管理す ることなく低遅延のライブ配信を実装することが可能です。 動画の送出には OBS Studio など RTMPS に対応したソフトウェアが利⽤できる他、 コンテナ内でブラウザを起動し動画を送出するデモも公開されており、 AWS Fargate 上で実⾏することも可能です。 https://github.com/aws-samples/amazon-chime-meeting-broadcast-demo ※ Amazon Chime 向けのデモではありますが、任意の URL を表⽰・送出可能です
  35. © 2020, Amazon Web Services, Inc. or its Affiliates. Q.

    サーバーレスで AI/ML を動かす場合、AWS Lambda は GPU を利⽤できますか? A. 現時点(2020年8⽉)で AWS Lambda で GPU を利⽤することは出来ないため、 CPU リソースのみで動作するモデルのみ利⽤可能とお考え下さい。 サーバの管理・運⽤をすることなく GPU が必要な推論環境を構築するには Amazon SageMaker の推論⽤エンドポイントをご利⽤頂くのがよろしいかと思 います。
  36. © 2020, Amazon Web Services, Inc. or its Affiliates. Q.

    イベント駆動の処理しかサーバレスにできないという認識 でよいですか? A. 関数(= Lambda Function)は元来そのような性質(イベント駆動)のもので はありますが、Lambda は連携するサービス(API Gateway, EventBridge, SQS etc...)と組み合わせて利⽤することにより、同期処理や定期処理など様々な実⾏ パターンを実装することが可能です。 また、AWS Fargate を利⽤するとサーバの管理運⽤をすることなく、コンテナ (プロセス)を実⾏することが可能です。
  37. © 2020, Amazon Web Services, Inc. or its Affiliates. Q.

    Amazon DynamoDB のデータを Amazon Aurora へイン サートやアップデートができるのでしょうか? A. DynamoDB Streams と AWS Lambda を利⽤することにより、DynamoDB で更 新のあったデータを Aurora へ反映(Insert/Update)することが可能です。 Amazon DynamoDB My Apps Create Update Delete AWS Lambda DynamoDB Streams Amazon Aurora 検索や集計に適したデータストアに保存