Slide 1

Slide 1 text

0 Copyright© System Integrator Corp. All rights reserved. System Integrator Cognito+API Gateway+Lambda+S3で はじめるサーバーレスアプリ構築 ~SIer企業がはじめて挑戦してみた話~

Slide 2

Slide 2 text

1 Copyright© System Integrator Corp. All rights reserved. System Integrator 横山 弘典 (@yokoyantech) • 株式会社システムインテグレータ • 製品企画室 • 宮崎→福岡→埼玉 • AWS歴 • 約7年 • アソシエイト3冠 • SAプロフェッショナル • JAWS歴 • 2014年から毎年参加 • 2020年初登壇(動画)

Slide 3

Slide 3 text

2 Copyright© System Integrator Corp. All rights reserved. System Integrator 毎年ボッチ参加なので 今年こそはJAWS仲間を作りたい!

Slide 4

Slide 4 text

3 Copyright© System Integrator Corp. All rights reserved. System Integrator 1. 本日お伝えすること 2. サーバーレスアーキテクチャを採用した理由 3. サーバーレスでREST APIを作る 4. サーバーレスでWEBアプリを作る 5. 非同期処理を作る 6. デプロイ/負荷試験 Agenda

Slide 5

Slide 5 text

4 Copyright© System Integrator Corp. All rights reserved. System Integrator 新サービス開発で、はじめて サーバーレスを使った体験談をお伝えします

Slide 6

Slide 6 text

5 Copyright© System Integrator Corp. All rights reserved. System Integrator 株式会社システムインテグレータ • 埼玉県さいたま市にある会社 • 東証1部 • 創業27年目 • 事業内容 • 自社パッケージソフト(EC、ERPなど) • 企画、開発 • カスタマイズ • 自社WEBサービス • 開発、運営 • 技術スタック • AWS、Azure • Java、C#、Python、Rubyなど

Slide 7

Slide 7 text

6 Copyright© System Integrator Corp. All rights reserved. System Integrator

Slide 8

Slide 8 text

7 Copyright© System Integrator Corp. All rights reserved. System Integrator

Slide 9

Slide 9 text

8 Copyright© System Integrator Corp. All rights reserved. System Integrator 1. 本日お伝えすること 2. サーバーレスアーキテクチャを採用した理由 3. サーバーレスでREST APIを作る 4. サーバーレスでWEBアプリを作る 5. 非同期処理を作る 6. デプロイ/負荷試験 Agenda

Slide 10

Slide 10 text

9 Copyright© System Integrator Corp. All rights reserved. System Integrator 限られた人数で やることはいっぱい アプリ開発 インフラ開発 各種サポート

Slide 11

Slide 11 text

10 Copyright© System Integrator Corp. All rights reserved. System Integrator 家族や子供との時間も 大切にしたい

Slide 12

Slide 12 text

11 Copyright© System Integrator Corp. All rights reserved. System Integrator 精神論で頑張らない AWSで仕組みを変える

Slide 13

Slide 13 text

12 Copyright© System Integrator Corp. All rights reserved. System Integrator サーバーレスを使うと 好きなことをやる時間が増える!

Slide 14

Slide 14 text

13 Copyright© System Integrator Corp. All rights reserved. System Integrator 受験者が コードを提出 外部APIで採点 (テストケース実行) 成否を判定 私達のプロダクト特徴

Slide 15

Slide 15 text

14 Copyright© System Integrator Corp. All rights reserved. System Integrator VPC AWS Cloud 受験者 Amazon EC2 Public subnet Elastic Load Balancing NAT gateway Amazon RDS 他社外部API (提出/採点) ※EC2+α Private subnet

Slide 16

Slide 16 text

15 Copyright© System Integrator Corp. All rights reserved. System Integrator

Slide 17

Slide 17 text

16 Copyright© System Integrator Corp. All rights reserved. System Integrator

Slide 18

Slide 18 text

17 Copyright© System Integrator Corp. All rights reserved. System Integrator 大規模イベントでは、採点システムが 数百台必要になるケースもあった

Slide 19

Slide 19 text

18 Copyright© System Integrator Corp. All rights reserved. System Integrator 新サービス(SQL)では、 自社で採点システムを保持・運用

Slide 20

Slide 20 text

19 Copyright© System Integrator Corp. All rights reserved. System Integrator EC2などのよくある悩み コスト高い (待機時間含) 運用が自力 (HDD容量等) 自動スケール 設定が必要

Slide 21

Slide 21 text

20 Copyright© System Integrator Corp. All rights reserved. System Integrator コスト安い (実行時間) 運用が楽 自動スケール 設定が不要 サーバーレスで解決

Slide 22

Slide 22 text

21 Copyright© System Integrator Corp. All rights reserved. System Integrator スパイク対策、コスト減、運用を楽にするために サーバーレスを採用

Slide 23

Slide 23 text

22 Copyright© System Integrator Corp. All rights reserved. System Integrator 1. 本日お伝えすること 2. サーバーレスアーキテクチャを採用した理由 3. サーバーレスでREST APIを作る 4. サーバーレスでWEBアプリを作る 5. 非同期処理を作る 6. デプロイ/負荷試験 Agenda

Slide 24

Slide 24 text

23 Copyright© System Integrator Corp. All rights reserved. System Integrator API Gateway Lambda NoSQL サーバーレスでREST API

Slide 25

Slide 25 text

24 Copyright© System Integrator Corp. All rights reserved. System Integrator 提出API 提出コード 書き込み 提出結果 保持 サーバーレスでREST API

Slide 26

Slide 26 text

25 Copyright© System Integrator Corp. All rights reserved. System Integrator MongoDB Atlas • MongoDBとは • jsonを格納するドキュメント型のNoSQL • Atlasとは • MongoDB公式が提供するDaaS • フルマネージドサービス • AWS連携が簡単 • VPCピアリングできる! • セキュリティグループによる制御できる! • 東京リージョンあり

Slide 27

Slide 27 text

26 Copyright© System Integrator Corp. All rights reserved. System Integrator VPC EC2からPRIVATEなAPIを呼び出したい(受験者→提出API) AWS Cloud users Amazon API Gateway (PRIVATE) AWS Lambda Peering connection VPC Amazon EC2 Public subnet Elastic Load Balancing NAT gateway Private subnet

Slide 28

Slide 28 text

27 Copyright© System Integrator Corp. All rights reserved. System Integrator VPC EC2からPRIVATEなAPIを呼び出したい(受験者→提出API) AWS Cloud users Amazon API Gateway (PRIVATE) AWS Lambda Peering connection VPC Amazon EC2 Public subnet Elastic Load Balancing NAT gateway Private subnet Private Subnet内のLambdaを API Gatewayがどうやって呼び出すの?

Slide 29

Slide 29 text

28 Copyright© System Integrator Corp. All rights reserved. System Integrator 【原因】LambdaをVPC内に配置した際に 想像した図が間違っていた

Slide 30

Slide 30 text

29 Copyright© System Integrator Corp. All rights reserved. System Integrator AWS Cloud AWS管理VPC 私達のVPC AWS Lambda Elastic network interface LambdaをVPC内に配置すると、 私達のVPCの中に、ENIができる Private subnet

Slide 31

Slide 31 text

30 Copyright© System Integrator Corp. All rights reserved. System Integrator AWS Cloud AWS管理VPC 私達のVPC AWS Lambda Elastic network interface Private subnet Lambdaの実体は、 AWS管理VPC側に存在する

Slide 32

Slide 32 text

31 Copyright© System Integrator Corp. All rights reserved. System Integrator AWS Cloud AWS管理VPC 私達のVPC AWS Lambda Elastic network interface Private subnet Lambdaの実体は、 AWS管理VPC側に存在する

Slide 33

Slide 33 text

32 Copyright© System Integrator Corp. All rights reserved. System Integrator AWS Cloud AWS管理VPC 私達のVPC AWS Lambda Elastic network interface Lambdaは、 ENI経由で 私達のVPC内のリソースにアクセスできる Amazon RDS Private subnet

Slide 34

Slide 34 text

33 Copyright© System Integrator Corp. All rights reserved. System Integrator Private subnet API GatewayからLambdaを呼ぶときは、 AWS内部のネットワークを通る AWS Cloud AWS管理VPC 私達のVPC Amazon API Gateway (PRIVATE) AWS Lambda Elastic network interface

Slide 35

Slide 35 text

34 Copyright© System Integrator Corp. All rights reserved. System Integrator 【対策】VPC Endpoint とENIを使う

Slide 36

Slide 36 text

35 Copyright© System Integrator Corp. All rights reserved. System Integrator VPC 【修正後】EC2からPRIVATEなAPIを呼び出したい AWS Cloud users Amazon API Gateway (PRIVATE) AWS Lambda Peering connection VPC Amazon EC2 Public subnet Elastic Load Balancing NAT gateway Elastic network interface Endpoints Private subnet

Slide 37

Slide 37 text

36 Copyright© System Integrator Corp. All rights reserved. System Integrator 1. 本日お伝えすること 2. サーバーレスアーキテクチャを採用した理由 3. サーバーレスでREST APIを作る 4. サーバーレスでWEBアプリを作る 5. 非同期処理を作る 6. デプロイ/負荷試験 Agenda

Slide 38

Slide 38 text

37 Copyright© System Integrator Corp. All rights reserved. System Integrator S3 Cognito API Gateway サーバーレスでWEBアプリ

Slide 39

Slide 39 text

38 Copyright© System Integrator Corp. All rights reserved. System Integrator HTML/JS 配置 ログイン時 認証 問題登録 API など サーバーレスでWEBアプリ

Slide 40

Slide 40 text

39 Copyright© System Integrator Corp. All rights reserved. System Integrator VPC S3で静的ホスティング+API呼び出し AWS Cloud users Amazon API Gateway (Edge) Amazon S3 Amazon Cognito AWS Lambda Peering connection VPC Elastic network interface Private subnet

Slide 41

Slide 41 text

40 Copyright© System Integrator Corp. All rights reserved. System Integrator クリップボード貼り付け処理

Slide 42

Slide 42 text

41 Copyright© System Integrator Corp. All rights reserved. System Integrator httpで動いていた

Slide 43

Slide 43 text

42 Copyright© System Integrator Corp. All rights reserved. System Integrator 【原因】S3は、Web Site Endpointの HTTPSアクセスをサポートしていない

Slide 44

Slide 44 text

43 Copyright© System Integrator Corp. All rights reserved. System Integrator 【対策1】CloudFrontを使ってHTTPSを実現

Slide 45

Slide 45 text

44 Copyright© System Integrator Corp. All rights reserved. System Integrator https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/WebsiteHosting.html

Slide 46

Slide 46 text

45 Copyright© System Integrator Corp. All rights reserved. System Integrator 【対策2】S3 REST APIエンドポイントを使う

Slide 47

Slide 47 text

46 Copyright© System Integrator Corp. All rights reserved. System Integrator http://バケット名.s3-website-ap-northeast- 1.amazonaws.com/index.html ウェブサイト エンドポイント

Slide 48

Slide 48 text

47 Copyright© System Integrator Corp. All rights reserved. System Integrator https://バケット名.s3-ap-northeast- 1.amazonaws.com/index.html REST API エンドポイント

Slide 49

Slide 49 text

48 Copyright© System Integrator Corp. All rights reserved. System Integrator https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/WebsiteEndpoints.html#WebsiteRestEndpointDiff

Slide 50

Slide 50 text

49 Copyright© System Integrator Corp. All rights reserved. System Integrator 1. 本日お伝えすること 2. サーバーレスアーキテクチャを採用した理由 3. サーバーレスでREST APIを作る 4. サーバーレスでWEBアプリを作る 5. 非同期処理を作る 6. デプロイ/負荷試験 Agenda

Slide 51

Slide 51 text

50 Copyright© System Integrator Corp. All rights reserved. System Integrator Lambda SQS Lambda サーバーレスで非同期処理

Slide 52

Slide 52 text

51 Copyright© System Integrator Corp. All rights reserved. System Integrator 採点キュー 書き込み キュー管理 採点処理 サーバーレスで非同期処理

Slide 53

Slide 53 text

52 Copyright© System Integrator Corp. All rights reserved. System Integrator VPC 提出処理と採点処理の間にSQSを入れて非同期化 AWS Cloud users Amazon API Gateway (PRIVATE) AWS Lambda(提出) Peering connection VPC Amazon EC2 Elastic network interface Endpoints Amazon SQS AWS Lambda(採点) Public subnet Elastic Load Balancing Private subnet

Slide 54

Slide 54 text

53 Copyright© System Integrator Corp. All rights reserved. System Integrator 【問題1】Lambdaがデプロイできない

Slide 55

Slide 55 text

54 Copyright© System Integrator Corp. All rights reserved. System Integrator 【原因】SQSの可視性タイムアウト(30秒)が Lambdaのタイムアウト(300秒)より短い

Slide 56

Slide 56 text

55 Copyright© System Integrator Corp. All rights reserved. System Integrator 【対策】SQSの可視性タイムアウトを Lambdaのタイムアウトより長くする

Slide 57

Slide 57 text

56 Copyright© System Integrator Corp. All rights reserved. System Integrator 【問題2】採点Lambdaに1度に複数の 採点キューが渡されてしまう

Slide 58

Slide 58 text

57 Copyright© System Integrator Corp. All rights reserved. System Integrator VPC 提出処理と採点処理の間にSQSを入れて非同期化 AWS Cloud users Amazon API Gateway (PRIVATE) AWS Lambda(提出) Peering connection VPC Amazon EC2 Elastic network interface Endpoints Amazon SQS AWS Lambda(採点) Public subnet Elastic Load Balancing Private subnet

Slide 59

Slide 59 text

58 Copyright© System Integrator Corp. All rights reserved. System Integrator 【原因】SQSトリガーの バッチサイズが1より大きい

Slide 60

Slide 60 text

59 Copyright© System Integrator Corp. All rights reserved. System Integrator 【対策】SQSトリガーの バッチサイズを1にする

Slide 61

Slide 61 text

60 Copyright© System Integrator Corp. All rights reserved. System Integrator マネジメントコンソールからは変更ができない

Slide 62

Slide 62 text

61 Copyright© System Integrator Corp. All rights reserved. System Integrator 1. 本日お伝えすること 2. サーバーレスアーキテクチャを採用した理由 3. サーバーレスでREST APIを作る 4. サーバーレスでWEBアプリを作る 5. 非同期処理を作る 6. デプロイ/負荷試験 Agenda

Slide 63

Slide 63 text

62 Copyright© System Integrator Corp. All rights reserved. System Integrator CodePipeline CodeBuild+ Serverless CodeDeploy サーバーレスのデプロイ

Slide 64

Slide 64 text

63 Copyright© System Integrator Corp. All rights reserved. System Integrator

Slide 65

Slide 65 text

64 Copyright© System Integrator Corp. All rights reserved. System Integrator Serverless-framework • node.js製のツール • サーバーレスアプリをAWS上に簡単にデプロイできる (内部的にはCloudFormationが動いている) • 構成をYAMLで書ける • 例)GETリクエストでLambda関数helloを実行する API Gatewayを作成する • CodeBuild等と組み合わせると簡単にPipelineができる # serverless.yml functions: index: handler: handler.hello events: - http: GET hello $ serverless deploy

Slide 66

Slide 66 text

65 Copyright© System Integrator Corp. All rights reserved. System Integrator サーバーレスの負荷試験 https://github.com/Nordstrom/serverless-artillery

Slide 67

Slide 67 text

66 Copyright© System Integrator Corp. All rights reserved. System Integrator Serverless-artillery • サーバーレスで負荷試験ができる • AWS上に負荷を生成するLambdaを簡単に生成できる • 試験シナリオがYAMLで書ける • 例)秒間10アクセスの負荷を5秒実行する • 負荷試験実行も簡単 config: target: http://TESTURL/ phases: - duration: 5 arrivalRate: 10 scenarios: - flow: - get: url: "/" slsart deploy --region=ap-northeast-1 slsart invoke --region=ap-northeast-1

Slide 68

Slide 68 text

67 Copyright© System Integrator Corp. All rights reserved. System Integrator 限られた人数で やることはいっぱい アプリ開発 インフラ開発 各種サポート

Slide 69

Slide 69 text

68 Copyright© System Integrator Corp. All rights reserved. System Integrator 精神論で頑張らない AWSで仕組みを変える (わからなくても まずは挑戦!)

Slide 70

Slide 70 text

69 Copyright© System Integrator Corp. All rights reserved. System Integrator サーバーレスを活用して みなさん素敵な人生を!

Slide 71

Slide 71 text

70 Copyright© System Integrator Corp. All rights reserved. System Integrator ※本資料掲載の情報・画像など、すべてのコンテンツの無断複写・転載を禁じます。