Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

© 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 がイチオシ

Slide 3

Slide 3 text

© 2020, Amazon Web Services, Inc. or its Affiliates. アジェンダ • スタートアップにこそサーバレスがおすすめな理由 • サーバレスアーキテクチャパターン • 今すぐ始めるサーバレス • まとめ 想定時間 • Session: 30-40m • QA: 20-30m

Slide 4

Slide 4 text

© 2020, Amazon Web Services, Inc. or its Affiliates. スタートアップにこそ サーバレスがおすすめな理由

Slide 5

Slide 5 text

© 2020, Amazon Web Services, Inc. or its Affiliates. https://stateofstartups2019.firstround.com/

Slide 6

Slide 6 text

© 2020, Amazon Web Services, Inc. or its Affiliates. 会社の優先順位を⼀つだけにするためにスケジュールを 空けられるとしたら、何を優先するか (2019) Founders Employees ビジネス全体で考えると、開発が占める割合は意外と少ない

Slide 7

Slide 7 text

© 2020, Amazon Web Services, Inc. or its Affiliates. 夜も眠れないトップ3の課題とは? (2018) プロダクト開発以外の課題がほとんど

Slide 8

Slide 8 text

© 2020, Amazon Web Services, Inc. or its Affiliates. プロダクト開発や機能追加/改善は重要だが、 スタートアップの成功にはそれ以外の要素の⽐率も⼤きい プロダクト 開発 採⽤ 顧客獲得 チームビル ディング 資⾦調達 ガバナンス

Slide 9

Slide 9 text

© 2020, Amazon Web Services, Inc. or its Affiliates. より効率的な開発が求められる プロダクト開発や機能追加/改善は重要だが、 スタートアップの成功にはそれ以外の要素の⽐率も⼤きい

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

© 2020, Amazon Web Services, Inc. or its Affiliates. プロダクト開発、運⽤の要素

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

© 2020, Amazon Web Services, Inc. or its Affiliates. プロダクト開発、運⽤の要素 ⾼い運⽤性

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Just Focus your Business!

Slide 17

Slide 17 text

© 2020, Amazon Web Services, Inc. or its Affiliates. サーバレス アーキテクチャパターン 今すぐ始める

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

© 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 で削除された過去データを別テーブルに保存 検索や集計に適したデータストアに保存

Slide 20

Slide 20 text

© 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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

© 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

Slide 23

Slide 23 text

© 2020, Amazon Web Services, Inc. or its Affiliates. 今すぐ始めるサーバレス

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

© 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

Slide 27

Slide 27 text

© 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)

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

© 2020, Amazon Web Services, Inc. or its Affiliates. AWS Amplify

Slide 30

Slide 30 text

© 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 フロントエンドとバックエンドに対して ビルド、テスト、デプロイ、ホストを容易に 実現できるサービス群

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

© 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

Slide 33

Slide 33 text

© 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

Slide 34

Slide 34 text

© 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;

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

© 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

Slide 37

Slide 37 text

© 2020, Amazon Web Services, Inc. or its Affiliates. まとめ

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Just Focus your Business!

Slide 40

Slide 40 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Q&A

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

© 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 の⽅が優れていると⾔えます。

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

© 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

Slide 46

Slide 46 text

© 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

Slide 47

Slide 47 text

© 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 を表⽰・送出可能です

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

© 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 検索や集計に適したデータストアに保存

Slide 51

Slide 51 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Thank you! Kazuki Matsuda @mats16k