2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …•...

78
Copyright © 2018 EXA CORPORATION m 2018 2018117株式会社エクサ テクノロジーイノベーション萩森 省吾 冨田 大樹 最新事例!AWS Lambdaを使った サーバレスのアプリケーション開発

Transcript of 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …•...

Page 1: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

Copyright © 2018 EXA CORPORATION

E x aV a l u eF o r u m2018

2018年 11月 7日株式会社エクサ

テクノロジーイノベーション部

萩森 省吾

冨田 大樹

最新事例!AWS Lambdaを使ったサーバレスのアプリケーション開発

Page 2: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

2Copyright © 2018 EXA CORPORATION

目次1. はじめに

2. 研修実績管理システムの概要

3. AWS Lambdaを利用した開発

4. チャットボットの開発

5. Webアプリケーションの開発

6. アクセス制御と認証

7. CI/CD実現のためのポイント

8. おわりに

※本資料に記載されているロゴ、システム名称、 企業名称、製品名称は各社の登録商標または商標です。

Page 3: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

3Copyright © 2018 EXA CORPORATION

目次1. はじめに

2. 研修実績管理システムの概要

3. AWS Lambdaを利用した開発

4. チャットボットの開発

5. Webアプリケーションの開発

6. アクセス制御と認証

7. CI/CD実現のためのポイント

8. おわりに

※本資料に記載されているロゴ、システム名称、 企業名称、製品名称は各社の登録商標または商標です。

1.はじめに

Page 4: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

4Copyright © 2018 EXA CORPORATION

サーバレスコンピューティングとはThe phrase “serverless” doesn’t mean servers are no longer involved. It simply means that developers no longer have to think that much about them. Computing resources get used as services without having to manage around physical capacities or limits.

Ken Fromm 「Why The Future Of Software And Apps Is Serverless」(2012/10/15 ReadWrite)より<https://readwrite.com/2012/10/15/why-the-future-of-software-and-apps-is-serverless/>

● サーバがもはや必要となくなった、という意味ではない

● 開発者がインフラについて多くの事を考える必要がなくなった

● コンピューティングリソースがサービスとして提供され、開発者が物理的な容量や限界を管理する必要がない

サーバやインフラを気にかけず、主力製品に集中できる

1.はじめに

Page 5: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

5Copyright © 2018 EXA CORPORATION

近年のクラウドサービスの動き近年、サーバレスコンピューティングはAWSに続き、主要クラウドサービスの全てがサービスを展開し、急速に注目を集めている

AWSLambda

AzureFunctions

Google Cloud PlatformCloud Functions

IBM CloudFunctions

サーバレスの知見を得る事により、新たなビジネスチャンスが生まれる!

マイクロサービスベースとなるため、構築が早く、変更も容易となるシステムが開発できる

1.はじめに

Page 6: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

6Copyright © 2018 EXA CORPORATION

研修実績管理システムのリプレース現在の研修実績管理システムの問題点

• サーバ老朽化による故障で、昨年から臨時サーバで運用– 臨時環境であり、恒久的な運用に耐えられない

• アプリケーション本体もFWやDBが古く、サポート切れ

• UIが使いにくく社員がシステムを活用できていない

AWS上でサーバレスアプリケーションとしてリプレースする事に

1.はじめに

Page 7: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

7Copyright © 2018 EXA CORPORATION

目次1. はじめに

2. 研修実績管理システムの概要

3. AWS Lambdaを利用した開発

4. チャットボットの開発

5. Webアプリケーションの開発

6. アクセス制御と認証

7. CI/CD実現のためのポイント

8. おわりに

※本資料に記載されているロゴ、システム名称、 企業名称、製品名称は各社の登録商標または商標です。

2.研修実績管理システムの概要

Page 8: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

8Copyright © 2018 EXA CORPORATION

研修実績管理システムについて

社員

研修受講システム

技術管理システム

研修実績管理システム

・社内研修の 受講申請をする

・自己研鑽・社外研修の 実績を登録する・年間総受講日数の確認 をする

・スキルレベルを確認する・研修受講計画を考える

育成担当

社内研修受講実績  データ

研修実績 データ

・全社の研修受講状況レポートを作成する

2.研修実績管理システムの概要

Page 9: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

9Copyright © 2018 EXA CORPORATION

リプレース要件

1. 社員がいつでもどこでも、研修実績を登録することができる

2. 育成担当が効率よく作業できる

3. 他の社内システムと同じユーザIDとパスワードを使って認証できる

社員個人が頻繁に使う機能は、会社支給 iPhoneからも簡単に利用できるインターフェースとして、

チャットボットで提供

主に育成担当が使う、複数件一括登録や、対象

件数が多い参照機能はWebで提供

チャットボットはG suiteへのログインで利用可

Webは、GoogleのOpenID Connectを利用してGsuiteの認証と同じ認証機構をつかうようにした

2.研修実績管理システムの概要

Page 10: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

10Copyright © 2018 EXA CORPORATION

新研修実績管理システムの全体アーキテクチャ

Google CloudPlatform

Google AppsScript

IF

ブラウザ

Hangouts Chat

社員

IAM

Dynamo DBLambda

Cognito

API Gateway

WAF

CloudFront

S3

CodeCommit

CodePipelineCodeBuild

CloudFormation

CloudWatch

開発者

JavaScript

YAML

開発者用サービス

2.研修実績管理システムの概要

Page 11: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

11Copyright © 2018 EXA CORPORATION

主な使用サービス一覧種類 名前 説明

AWSサービス

WAF AWSのWeb Application Firewall

CloudFront CDN(Contents Delivery Network)サービス

API Gateway APIのエンドポイントを作成 (Lambdaと繋げる)

Lambda サーバの管理必要なしでコードを実行できるコンピューティングサービス

DynamoDB KVS型のNoSQLデータベース

S3 オブジェクトストレージ

Cognito AWSの認証・認可用サービス

IAM AWSでのユーザ管理

CodeCommit Gitリポジトリホスティングサービス

CodeBuild コンテナ上で任意のシェルスクリプトを実行可能

CloudFormation AWSサービスのオーケストレーション

CodePipeline CI/CD(継続的インテグレーション / デリバリー)サービス

CloudWatch ログ・AWS上でのイベントの管理

2.研修実績管理システムの概要

Page 12: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

12Copyright © 2018 EXA CORPORATION

主な言語・フレームワーク・ライブラリ一覧 1/2種類 名前 説明

言語

JavaScript Lambda関数・Webアプリクライアントで使用

YAML CloudFormationのテンプレートファイルの記述で使用

Google Apps Script チャットボットの IFに使用

フレームワーク・ライブラリ

Node.js JavaScript実行環境

AWS SDK Node.jsで使用するAWSのSDK

React.js フロントエンドのUI作成ライブラリ

AWS SAM CloudFormation用サーバレスアプリケーションモデル

SAM Local AWS SAMをローカルで構築できるCLIツール

webpack フロントエンドのモジュールバンドラ

babel JavaScript コンパイラ

Material UI コンポーネントライブラリ

2.研修実績管理システムの概要

Page 13: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

13Copyright © 2018 EXA CORPORATION

主な言語・フレームワーク・ライブラリ一覧 2/2種類 名前 説明

フレームワーク・ライブラリ

Mocha テスト全般で使用するテストフレームワーク

power-assert アサーションライブラリ

Mochawesome テストレポート出力ライブラリ

Enzyme React.jsコンポーネントテストのためのユーティリティライブラリ

TestMyBot チャットボットAPI用テストフレームワーク

Puppeteer Google Chromeオートメーションライブラリ

2.研修実績管理システムの概要

Page 14: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

14Copyright © 2018 EXA CORPORATION

アプリケーションアーキテクチャ

Google CloudPlatform

Google AppsScript

IF

ブラウザ

Hangouts Chat

社員

IAM

Dynamo DB

Lambda

Cognito

API Gateway

WAF

CloudFront

S3

2.研修実績管理システムの概要

Page 15: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

15Copyright © 2018 EXA CORPORATION

目次1. はじめに

2. 研修実績管理システムの概要

3. AWS Lambdaを利用した開発

4. チャットボットの開発

5. Webアプリケーションの開発

6. アクセス制御と認証

7. CI/CD実現のためのポイント

8. おわりに

※本資料に記載されているロゴ、システム名称、 企業名称、製品名称は各社の登録商標または商標です。

3.AWS Lambdaを利用した開発

Page 16: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

16Copyright © 2018 EXA CORPORATION

Lambdaとは

• AWSが提供しているコンピューティングサービス– サーバをプロビジョニングしたり管理しなくてもコードを実行できる

• JavaScript, Java, C#, Go, Python が対応

• 最大処理時間15分– バッチ処理には向かない

• イベントにより、コンテナが処理中のみ立ち上がって関数が実行される– APIへのリクエスト、時間、各種AWSサービスのイベント等

3.AWS Lambdaを利用した開発

Page 17: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

17Copyright © 2018 EXA CORPORATION

Lambda関数から別のLambda関数の呼び方 1/2Lambda関数をモジュール単位で分割して開発したい

Lambda

ウェブ用

実績登録ロジック

実績テーブル

Dynamo DBボット用

しかし、Lambdaは各関数が隔離されたコンテナで動作するため言語仕様上の呼び出し方では不可能

resiter

bot

web

bot.js

const register = require(‘./register’);...

エラー

※ イメージ図

例:

実行サーバ

3.AWS Lambdaを利用した開発

Page 18: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

18Copyright © 2018 EXA CORPORATION

Lambda関数から別のLambda関数の呼び方 2/2AWS SDK のLambda関数呼び出しメソッドを利用

bot.js

const AWS = require(‘aws-sdk’);const lambda = new AWS.Lambda({ ...});

...

lambda.invoke({ FunctionName: ‘register’, Payload: parameters});

SDKは require 可能

関数名(FunctionName)を指定して呼び出し

3.AWS Lambdaを利用した開発

Page 19: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

19Copyright © 2018 EXA CORPORATION

DynamoDBとは• AWSで提供されているKey Value Store型のデータベース

• 読み込み・書き込みが早い

• トランザクションは使えない– コミット・ロールバックなし– 複数レコードの一貫性が保たれなくても本当に問題ないか、十分に検討

する必要がある– 代替手段として、Amazon RDS (フルマネージドのRDBサービス)

3.AWS Lambdaを利用した開発

Page 20: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

20Copyright © 2018 EXA CORPORATION

Lambda関数のユニットテスト手法Lambda関数に依存するAPIやDBはクラウド上のサービスとなっているため、通常はLambda関数のユニットテストはクラウドにあげて行う必要がある

AWS公式ツールを用いてローカル環境でテストが可能

– SAM Local (現 SAM CLI)– DynamoDB ローカル

ローカルPC上でLambda関数の開発が可能

3.AWS Lambdaを利用した開発

Page 21: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

21Copyright © 2018 EXA CORPORATION

SAM Local• AWSのサーバレス環境をローカルPCのDockerコンテナ上で構築できるコマンドラインツール– CloudFormationテンプレートを利用する事で、本番と同等

の環境が構築可能

• 構築できるのは API Gateway と Lambda のみ

• ローカルで任意のタイミングで素早くテスト出来る環境はアジャイル開発においては必須

SAM Localのセットアップ方法( http://exa-knowledge.exa-corp.co.jp/open.knowledge/view/5 )

3.AWS Lambdaを利用した開発

Page 22: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

22Copyright © 2018 EXA CORPORATION

DynamoDBローカル

• ダウンロード可能なDynamoDB– Javaアプリケーション

• コマンドラインから起動・停止が可能

• SAM LocalではDynamoDBは構築されないため、使用する必要がある

3.AWS Lambdaを利用した開発

Page 23: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

23Copyright © 2018 EXA CORPORATION

ローカルPC環境全体図

Node.jsDocker

ソースコード /テストコード

仮想AWS環境

SAM Local

DynamoDBローカルLambdaから参照

コンテナ立ち上げCentOS 7.1

Virtual Box

Windows 7

ローカルPC

社用PCだとセキュリティソフトとの兼ね合い (?)でWindows 7上でDockerが動作しなかったため、Linuxの仮想OS上で環境を構築

コンテナ立ち上げ・環境構築

JDK 8

3.AWS Lambdaを利用した開発

Page 24: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

24Copyright © 2018 EXA CORPORATION

目次1. はじめに

2. 研修実績管理システムの概要

3. AWS Lambdaを利用した開発

4. チャットボットの開発

5. Webアプリケーションの開発

6. アクセス制御と認証

7. CI/CD実現のためのポイント

8. おわりに

※本資料に記載されているロゴ、システム名称、 企業名称、製品名称は各社の登録商標または商標です。

4.チャットボットの開発

Page 25: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

25Copyright © 2018 EXA CORPORATION

チャットボットのアーキテクチャ図

Hangouts Chat

会話1往復で左端から右端まですべて実行される

こんにちは

コンニチハ

CloudFrontWAF API Gateway Lambda DynamoDBGoogle CloudPlatform

インターフェースチャットボット

Google Apps Script

Hangout Chat用IF

ボット本体の機能を提供Hangouts Chatとボットの架け橋

4.チャットボットの開発

Page 26: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

26Copyright © 2018 EXA CORPORATION

チャットボットの会話の流れ

登録する

研修名は?

サーバーレス

研修日は?

登録実行登録しました

2018/06/12

会話の開始

会話の終了

会話の進行に合わせてその状態は保持する必要がある

ユーザ チャットボット 機能

4.チャットボットの開発

一つの機能を提供するために1回以上のやり取りが必要

DB

状態保持

状態保持

Page 27: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

27Copyright © 2018 EXA CORPORATION

会話の状態保持Lambdaは処理が終わるとインスタンスが破棄されてしまう。

そのためユーザとの会話の状態はDBなどを利用して保存した。

データ構造

{ user_id: ”abc” intent_id: ”sample” session:{ index: 2 entities:{

 name:”サーバーレス”}

}}

4.チャットボットの開発

ユーザのID進行中の話題

何番目の会話まで進んだか会話の中で得た情報

Page 28: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

28Copyright © 2018 EXA CORPORATION

テストの手法ITとSTフェーズでテストをする範囲は以下の様に定めた

テスト種類 テスト内容 使用フレームワーク 自動化

UT LambdaとGoogle Apps Scriptそれぞれのテスト QUnit for Google Apps Script ○ITa Bot API が正常に動作するかをテストする TestMyBot ○ITb インターフェースとBot APIの連携をテストする QUnit for Google Apps Script ○ST 実際にチャットクライアントを使用してテストする ー ×

4.チャットボットの開発

Page 29: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

29Copyright © 2018 EXA CORPORATION

技術者でなくても理解できる形式でテストコードを記述する

- お客様にテストコードを直接レビューいただくことが可能- テストケース表を別途作成する必要がなくなる

#me  ←ユーザの入力

登録

#bot  ←ボットからの応答

どんな研修を受けましたか。タイトルを入れてください。

#meサーバーレスアプリケーション開発

#bot「サーバーレスアプリケーション開発」ですね。

TestMyBotの特徴

テストコード一例

4.チャットボットの開発

Page 30: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

30Copyright © 2018 EXA CORPORATION

レスポンスの問題発生実装したものを触ってみると、ユーザの入力からボットの応答があるまでの時間が非常に遅いことがわかった。

ⅰ1.5秒 ⅱ

0.4秒 ⅲ0.8秒

ⅳ0.4秒

4.チャットボットの開発

Page 31: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

31Copyright © 2018 EXA CORPORATION

Botの応答速度改善

Hangouts Chat

Hangout Chat用IFGoogle Cloud

Platform

スプレッドシート

ⅲ Lambdaの起動にかかる時間 (0.8秒)ⅰ イベントが発火する時間 (1.5秒)

ⅱ Spread Sheetの操作時間(0.4秒) ⅳ Lambdaの処理にかかる時間 (0.4秒)

試した内容 成果

ⅰ Googleが完全に隠蔽している領域なので断念した ー

ⅱ スプレッドシートの操作にキャッシュを適用した読込:0.13秒に短縮書込:変化なし

ⅲ 15分に1度Lambdaを実行する(コンテナを常時ホットスタンバイにする ) 効果なし

ⅳ Lambda実行時に使用するメモリサイズを 128MBから512MBに増やす 0.4秒が0.1秒に短縮

API Gateway Lambda DynamoDBGoogle Apps Script

TOTAL4秒 → 3.5秒

4.チャットボットの開発

Page 32: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

32Copyright © 2018 EXA CORPORATION

目次1. はじめに

2. 研修実績管理システムの概要

3. AWS Lambdaを利用した開発

4. チャットボットの開発

5. Webアプリケーションの開発

6. アクセス制御と認証

7. CI/CD実現のためのポイント

8. おわりに

※本資料に記載されているロゴ、システム名称、 企業名称、製品名称は各社の登録商標または商標です。

5.Webアプリケーションの開発

Page 33: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

33Copyright © 2018 EXA CORPORATION

• アプリケーションの形態は Single Page Application とした– フロントエンドのライブラリとして React.js を採用

• Single Page Application とは?– 単一ページで構成されるWebアプリケーション– サーバサイドではデータのみを返すREST APIを実装– クライアントサイドでJavaScriptを用いてDOMを操作してページを切り替える

Webアプリケーション概要

CloudFrontWAF API Gateway Lambda Dynamo DB

REST APIを実装

ブラウザ React.js

単純な関数であるLambdaとは相性が良い

5.Webアプリケーションの開発

Page 34: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

34Copyright © 2018 EXA CORPORATION

Single Page Application の特徴Single Page Application 従来のWebアプリケーション

サーバサイド処理の違い

● データのみをクライアントへ返し、クライアントサイドで描画する

● 必要箇所のみ再描画するため、レスポンスも速い

● サーバサイドでHTMLを描画してクライアントへ返す

セッションの有無● 無し● DBで保持する、もしくはクライアントサ

イドで保持する必要がある (Cookie等)● 有り

ブラウザとの依存性● ブラウザがJavaScriptをサポートしてい

る必要がある● 特に無し

5.Webアプリケーションの開発

Page 35: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

35Copyright © 2018 EXA CORPORATION

Single Page Application の特徴

5.Webアプリケーションの開発

Single Page Application 従来のWebアプリケーション

サーバサイド処理の違い

● データのみをクライアントへ返し、クライアントサイドで描画する

● 必要箇所のみ再描画するため、レスポンスも速い

● サーバサイドでHTMLを描画してクライアントへ返す

セッションの有無● 無し● DBで保持する、もしくはクライアントサ

イドで保持する必要がある (Cookie等)● 有り

ブラウザとの依存性● ブラウザがJavaScriptをサポートしてい

る必要がある● 特に無し

次スライドで詳しく説明

Page 36: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

36Copyright © 2018 EXA CORPORATION

処理フロー図例:研修実績登録時

API Gateway

Lambda

I/F 実績登録ロジック 実績

テーブル

DynamoDB

ユーザ ブラウザ

・入力値のバリデーション・システムプロパティ作成

① 実績を入力し、  登録ボタンをクリック

② APIに対してリクエスト③ 対応するLambda関数  が実行される

④ DynamoDBに  実績データを挿入

⑤ レスポンスを  API Gatewayに渡す

⑥ レスポンスを  クライアントに返す

⑦ APIのレスポンスを受け取り  画面を再描画

5.Webアプリケーションの開発

Page 37: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

37Copyright © 2018 EXA CORPORATION

処理フロー図例:研修実績登録時

Lambda

I/F 実績登録ロジック 実績

テーブル

DynamoDB

ユーザ ブラウザ

・入力値のバリデーション・システムプロパティ作成

① 実績を入力し、  登録ボタンをクリック

② APIに対してリクエスト③ 対応するLambda関数  が実行される

④ DynamoDBに  実績データを挿入

⑤ レスポンスを  API Gatewayに渡す

⑥ レスポンスを  クライアントに返す

⑦ APIのレスポンスから  非同期で画面を再描画

シンプルなREST APIを実装

{ statusCode: 200, data: { … }}

データをJSONを返す

5.Webアプリケーションの開発

API Gateway

Page 38: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

38Copyright © 2018 EXA CORPORATION

処理フロー図例:研修実績登録時

API Gateway

Lambda

I/F 実績登録ロジック 実績

テーブル

Dynamo DB

ユーザ ブラウザ

・入力値のバリデーション・システムプロパティ作成

① 実績を入力し、  登録ボタンをクリック

② APIに対してリクエスト③ 対応するLambda関数  が実行される

④ DynamoDBに  実績データを挿入

⑤ レスポンスを  API Gatewayに渡す

⑥ レスポンスを  クライアントに返す

⑦ APIのレスポンスを受け取り  画面を再描画

登録ボタンクリック前

登録ボタンクリック後

5.Webアプリケーションの開発

Page 39: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

39Copyright © 2018 EXA CORPORATION

React.jsについて• A JavaScript library for building user interfaces

– 引用:https://facebook.github.io/react/

• コンポーネント単位で実装

• コンポーネントとは、UI部品の見た目と振る舞いをセットにしたもの– 例:ボタンとクリック時のイベントハンドラ

• コンポーネントとDOMは1:1対応– DOMの粒度は実装者が決定

5.Webアプリケーションの開発

Page 40: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

40Copyright © 2018 EXA CORPORATION

どの粒度でコンポーネントを分割すべき?

React.jsで実装してみての気づき ①

資料を作る 追加

部屋の掃除をする

本を買う

メールを返す

UI部品(DOM)は全て「コンポーネント」

粒度を小さくすれば再利用性の高いコンポーネントを作れるが、コンポーネント間の包含関係が複雑になる

最初は大きい粒度で実装した方がやりやすい(コンポーネント分割は後からでも可能)

5.Webアプリケーションの開発

Page 41: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

41Copyright © 2018 EXA CORPORATION

React.jsで実装してみての気づき ②

値の状態を管理(React.jsアプリのモデル )

...this.state = { name: ‘Tomita’}...

render( return(<p>Hello,{this.state.name}</p>););

画面上で「Hello,Tomita」と表示される

stateの値に変更があると必要最低限のDOMのみ再描画される

React.js は「stateと画面表示を同期してくれるライブラリ」と言える

state設計が大切

今後の機能追加・修正も見据えてstateを設計しておくと、仕様変更に強いコードになる

5.Webアプリケーションの開発

Page 42: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

42Copyright © 2018 EXA CORPORATION

テスト手法テスト種類 テスト内容 使用lib 自動化

UT (クライアント側)

● 実装したコンポーネントの動きをテスト

● コンポーネントが問題なく作られるかどうか、コンポーネント中の要素がクリックされた時の動きを仮想的にシミュレートする

Enzyme ○

ITa● APIにリクエストして期待のレスポンスが返ってくるか、 AWSの結合テ

スト

● AjaxでAPIにリクエストを送るコードを書き、テストする

- ○

ITb● ブラウザ上からのE2Eテスト

● Headless Chromeを自動操作してテストするPuppeteer ○

ST● ブラウザ上から手動でテスト

● システムエラーを起こしてみてちゃんとハンドリングできているか確認- -

5.Webアプリケーションの開発

Page 43: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

43Copyright © 2018 EXA CORPORATION

Enzyme• React.js用テストユーティリティライブラリ

• React.jsコンポーネントの処理を画面に描画せずとも仮想的にシミュレートできる

– 対象のコンポーネントが生成されたかどうか

– コンポーネント中の要素がクリックされた時に正しくイベントハンドラが動作するか

– 子コンポーネントが生成されたかどうか等

5.Webアプリケーションの開発

Page 44: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

44Copyright © 2018 EXA CORPORATION

Puppeteer• Google Chromeを制御するライブラリ

• Headless Chromeも制御可能

• Seleniumとは違いGoogle Chrome以外は動かせない

• DOMが生成される / 削除されるまで処理を待機させる事が可能のため Single Page Application と相性が良い

5.Webアプリケーションの開発

Page 45: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

45Copyright © 2018 EXA CORPORATION

目次1. はじめに

2. 研修実績管理システムの概要

3. AWS Lambdaを利用した開発

4. チャットボットの開発

5. Webアプリケーションの開発

6. アクセス制御と認証

7. CI/CD実現のためのポイント

8. おわりに

※本資料に記載されているロゴ、システム名称、 企業名称、製品名称は各社の登録商標または商標です。

6.アクセス制御と認証

Page 46: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

46Copyright © 2018 EXA CORPORATION

セキュリティに関する考え方本システムは、秘匿性の高いデータを持っていない。また、社員が通常業務を行う上で

ミッションクリティカルなものではないため、以下の観点で基本的な対策をとることとした。

1. 正当な権利を持った人だけが使用できるa. ユーザ認証を行うb. チャットボットへのアクセス制御を行うc. Webアプリへのアクセス制御を行う

2. 正当な権利を持たない人に変更されないa. WAFを使用し、CSRF、XSSなど基本的な対策を実施する

3. 個人情報を漏洩させないa. AWS上に社員の個人情報を保持しないb. プログラム処理上必要な個人特定のためのキー情報は、ハッシュ化する

6.アクセス制御と認証

Page 47: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

47Copyright © 2018 EXA CORPORATION

Webアプリでのユーザ認証ユーザが社内の共通認証基盤でログイン出来るように

Google の OpenID Connect を利用してユーザを認証する

項番 内容

① 利用するWebページを取得

② 社内の共通認証基盤でログインし、IDトークンを取得する

③ IDトークンからユーザの認証情報を生成し返却する

④ ③で取得した認証情報を付与してAPIへリクエストを送信する

⑤ 認証情報を検証し、認可されていればLambdaを実行する

認証フロー

6.アクセス制御と認証

Page 48: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

48Copyright © 2018 EXA CORPORATION

チャットボットのアクセス制御

Hangouts Chat

Google Apps Script

Google CloudPlatforms

CloudFront

WAF

IFキーの送信

①IFキーの存在チェック

APIキーの付与

②APIキーの存在チェック

ブロック項目 手法

①作成したプログラム以外からのアクセス WAFを使用してリクエストにIFキーが存在するかをチェックする

②API Gateway への直接アクセスCloud Frontを使用してリクエストにAPIキーを付与し、API Gatewayで存在をチェックする

API Gateway Lambda DynamoDB

研修実績管理システムのプログラム以外からボットAPIを利用できないようにする

6.アクセス制御と認証

Page 49: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

49Copyright © 2018 EXA CORPORATION

Webアプリのアクセス制御

CloudFront

API Gateway Lambda

WAF

DynamoDB

ブラウザ

S3

②Cloud Front経由チェック

①IPアドレスチェック

③認証チェック

ブロック項目 手法

①社外IPからのアクセス WAFを使用して、IPアドレスのチェックする

②S3への直接アクセス CloudFront経由のアクセスかをS3でチェックする

③未認証ユーザのAPI Gatewayへのアクセス API Gatewayでユーザの認証をチェックする

社員以外の人がWebアプリにアクセス出来ないようにする

6.アクセス制御と認証

Page 50: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

50Copyright © 2018 EXA CORPORATION

個人情報の保護

IF

チャットボットでの ID生成箇所

WebアプリでのID生成箇所

インターフェースのイベントが発火した際に渡される情報には、実行したユーザの情報が含まれている。その情報の一つにメールアドレスがあるためそれを利用する。

Google によって発行された IDトークン を検証する際にユーザ情報を取得することが出来る。その情報の一つにメールアドレスがあるためそれを利用する。

• 社員の個人情報をAWSで保持しない設計とした• 社員を特定するキーとなるようなプログラム上必要な情報はユーザのメールアド

レスをハッシュ化した物を利用した• なりすましを防ぐためにユーザのメールアドレスはユーザが入力したものではな

く、サーバー側でGoogle から取得して生成した

6.アクセス制御と認証

Page 51: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

51Copyright © 2018 EXA CORPORATION

目次1. はじめに

2. 研修実績管理システムの概要

3. AWS Lambdaを利用した開発

4. チャットボットの開発

5. Webアプリケーションの開発

6. アクセス制御と認証

7. CI/CD実現のためのポイント

8. おわりに

※本資料に記載されているロゴ、システム名称、 企業名称、製品名称は各社の登録商標または商標です。

7.CI/CD実現のためのポイント

Page 52: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

52Copyright © 2018 EXA CORPORATION

CI/CD環境が何故必要か

開発手法としてアジャイル開発を取る事に決定

スプリント毎にフィードバックをもらうため、早くリリースできる環境を整える必要がある

CI/CD環境の構築が必要不可欠!

7.CI/CD実現のためのポイント

Page 53: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

53Copyright © 2018 EXA CORPORATION

• ソースコードをコミットするだけでパイプラインが走る様にする– CLIからアップロードする事も可能だが、開発者のローカルPCの

環境構築が煩雑

• クラウド上のサービスのみを使ってCI/CD環境を作る– 自前でCIサーバは立てない

CI/CD環境構築時の考慮点

7.CI/CD実現のためのポイント

サーバを直接参照できない warを作ってscpでアプリサーバにコピーして...は不可能

Page 54: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

54Copyright © 2018 EXA CORPORATION

CI/CDプロセスの概略図

7.CI/CD実現のためのポイント

Page 55: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

55Copyright © 2018 EXA CORPORATION

Build• AWSリソース

– CloudFormationテンプレートをデプロイ可能形式に変換

• Webアプリクライアント– S3のWebアプリ配信用バケットにクライアント

リソース(HTML + js)をアップロード

7.CI/CD実現のためのポイント

Page 56: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

56Copyright © 2018 EXA CORPORATION

Deploy• AWSリソース

– テンプレートを基に各種サービスをデプロイ• Lambda関数• DynamoDBのテーブル• API

• Webアプリクライアント– 特になし

※ デプロイで使用しているサービスの都合上、 Webアプリク  ライアントはBuildプロセスにてデプロイ

7.CI/CD実現のためのポイント

Page 57: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

57Copyright © 2018 EXA CORPORATION

Test• 各種テストを実行

• テスト実行後、各種テストレポートとWebアプリのITbの実行中に撮られたスクリーンショットをS3のバケットに保存

7.CI/CD実現のためのポイント

Page 58: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

58Copyright © 2018 EXA CORPORATION

複数環境へのデプロイ

• 本番環境へ影響を与えずにStaging環境を自動構築できる様にしたい

→ 実開発前にブランチモデルの策定

• 本番環境とStaging環境で構成が異なってしまう事を避けるためCloudFormationテンプレートファイルは1つにしたい

→ CloudFormationパラメータ・Lambda環境変数を活用

7.CI/CD実現のためのポイント

本番機とは別に検証用にStaging環境が必要

Page 59: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

59Copyright © 2018 EXA CORPORATION

実開発前にブランチモデルの策定

bugfix

master

release

develop

featurebranches

ソースコードの構成管理としてGit-flow というブランチモデルを使用する事を策定した masterのソースコードに

変更があると本番環境用Pipelineが実行

developのソースコードに変更があるとStaging環境用Pipelineが実行

7.CI/CD実現のためのポイント

Page 60: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

60Copyright © 2018 EXA CORPORATION

CloudFormationパラメータ・Lambda環境変数を活用

Regiser: # 登録ロジックLambdaの定義FunctionName: !Sub ‘tr_${EnvName}_register’...Environment: RESULT_TABLE: !Sub ‘tr_${EnvName}_result’...

CloudFormation TemplateStaging環境用 CodePipeline 設定画面 (CloudFormationの設定)

Lambda関数名

環境変数

7.CI/CD実現のためのポイント

Page 61: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

61Copyright © 2018 EXA CORPORATION

Webアプリクライアントの複数環境対応

同じソースコードでPipeline上のBuildプロセス時に特定の箇所を置換できる様にしたい

Staging用 Pipeline

本番用 Pipeline

...let url = API_ENDPOINT;...

org

stg...let url =[Staging用URL];...

Build Deploy Test

prod...let url =[本番用URL];...

Build Deploy

webpack というビルダーを活用

• ソースコード中の特定の文字列をビルド時に置換するプラグインを使用

7.CI/CD実現のためのポイント

Page 62: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

62Copyright © 2018 EXA CORPORATION

目次1. はじめに

2. 研修実績管理システムの概要

3. AWS Lambdaを利用した開発

4. チャットボットの開発

5. Webアプリケーションの開発

6. アクセス制御と認証

7. CI/CD実現のためのポイント

8. おわりに

※本資料に記載されているロゴ、システム名称、 企業名称、製品名称は各社の登録商標または商標です。

8.おわりに

Page 63: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

63Copyright © 2018 EXA CORPORATION

サーバレスアプリケーションを開発しての気付き

• ミドルウェアを意識しなくて良いのは楽

• ビルドとデプロイの自動化は必須

• ローカルPCでユニットテストが行える環境があると開発を効率化できる

• マイクロサービスアーキテクチャとなるので、他システムとリソースの再利用が可能

8.おわりに

Page 64: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

64Copyright © 2018 EXA CORPORATION

まとめ

デモンストレーションを見ていただきます。

 ・チャットボットからの実績登録と照会

 ・Webからの実績登録

8.おわりに

Page 65: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

65Copyright © 2018 EXA CORPORATION

信頼という底力。

ご清聴いただきありがとうございました。

Page 66: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

66Copyright © 2018 EXA CORPORATION

Hangout Chat用IF

ボットとインターフェースの役割詳細

ユーザとボットの架け橋を行う

• ユーザがチャットを操作したときのイベントを受け取る• ボットへのリクエストをボットが期待する形に整形する• ボットの応答をHangoutsChatが期待する形に整形する• APIがユーザ個人を識別できる情報を付加する

ユーザ個人の会話の状態や流れを管理・制御する

• 会話の進行を制御する(戻ることもある)• 今の話題や会話の進行度を管理する• 機能の実行に必要な情報を収集・管理する• 情報が揃ったときに適切な機能を実行する• ユーザに適切なメッセージで応答する

付録

ボット本体

インターフェース

Page 67: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

67Copyright © 2018 EXA CORPORATION

会話の設計(用語)

• インテント

– 会話の「意図・目的」を表す

• エンティティ

– 会話の目的を達成するために必要な「情報」のこと

• フルフィルメント

– 目的の達成に必要な物が揃ったときに実行される

 

付録

Page 68: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

68Copyright © 2018 EXA CORPORATION

インテント

• システムが提供する機能単位でインテントを定義した– 「登録」「削除」「照会」

• ユーザとの会話はインテントを基準に進行する– 目的が達成されるまで(エンティティが揃うまで)繰り返される

• 1つのインテントに1往復以上の会話が存在する

付録

Page 69: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

69Copyright © 2018 EXA CORPORATION

エンティティ

• 目的(インテント)を達成するために収集される情報– インテントごとに内容は様々– ユーザから聞き出す必要のあるものと無いものがある

• 収集されたエンティティを使ってフルフィルメントが実行される

付録

Page 70: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

70Copyright © 2018 EXA CORPORATION

フルフィルメント

• 必要なエンティティがすべて揃ったときに最後に呼び出される

• 「DBに実績を格納する」等のWeb・ボット共通の処理を行う

付録

Page 71: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

71Copyright © 2018 EXA CORPORATION

ボット本体の設計

IF

ボットインテント

コントローラー

インテントA

インテントB

インテントC

・・・

フルフィルメントA

フルフィルメントB

インテントD ・・・

機能(インテント)の増加や修正等のインパクトをなるべく抑えるために上記のように切り分けを行った。また、インテントも共通部の処理は切り出し、会話の実装方法も固定化した。

API Gateway

Lambda Lambda

付録

Page 72: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

72Copyright © 2018 EXA CORPORATION

ボット本体の設計

ボット

インテントコントローラー

インテント

フルフィルメント

Bot API へのリクエスト処理のエントリーポイントになる。DBに格納されている「会話の状態」や、「ユーザの発言」を元に実行するインテントを決定する。

「ボット」から渡された「会話の状態」と「インテント」を使って、会話の進行を制御する。進行した「会話の状態」をDBへ保存する。

一つのインテントで行われる会話の内容を定義する。ユーザの発言から必要なエンティティを抽出しバリデーションも行う。フルフィルメントを実行するための処理も定義する

システムの核となる機能を持つ。インテントによって実行される。インテントとフルフィルメントは 1対1になるとは限らない。

付録

Page 73: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

73Copyright © 2018 EXA CORPORATION

ボット本体の簡易シーケンス図

ボットインテント

コントローラーインテント フルフィルメント

インテントの決定・生成コントローラーの生成

run(input)を実行run(input)を実行

バリデーションとエンティティの抽出

応答メッセージと成否

executeFullfilment(entity)を実行invoke(entity)を実行

成否成否

会話状況の更新

応答メッセージと成否

インテント終了時

付録

Page 74: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

74Copyright © 2018 EXA CORPORATION

DynamoDB バックアップ方法検討 1/3 ※ 2018年11月現在

バックアップ種類

メリット デメリット

オンデマンドバックアップ

● Webインタフェース上で手軽にバックアップが取れる

● バックアップ対象の読み込みキャパシティを消費しない

● バックアップ処理は早い

● 自動化のための敷居が高い

○ Webインタフェース上では1度きりのバックアップしか取れないため、 AWS CLIや各種SDK経由で行うスクリプトを書いて実行させる必要がある

Data Pipelineによるバックアップ

● 定期実行が可能

● バックアップはS3上にファイルとして作られるので取り回しが良い

● バックアップ処理が遅い

● 読み込みキャパシティを消費する

● Data Pipeline上で処理を定義する必要があるため導入の敷居が少し高い

Point In Time Recovery(PITR)

● 1秒単位でデータをバックアップして 35日間分保存

● 有効化するだけなので簡単

● 35日分しか保存されない

● テーブルが削除されるとバックアップデータもなくなる

付録

Page 75: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

75Copyright © 2018 EXA CORPORATION

DynamoDB バックアップ方法検討 2/3PITR が手軽かつ強力

• 追加料金が発生するが、本プロジェクト程度の規模の場合であれば計算上は年間1ドルかからない

しかし...

テーブルが削除されるとバックアップデータがなくなってしまう事を懸念AWSサポートに連絡する事で、削除したテーブルのバックアップを復元する事も可能ではあるhttps://forums.aws.amazon.com/thread.jspa?messageID=840798

付録

Page 76: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

76Copyright © 2018 EXA CORPORATION

DynamoDB バックアップ方法検討 3/3• 本プロジェクトでは以下を併用する事とした

a. PITRb. Data Pipelineにとるバックアップ

• 「1秒単位で復元ができ、万が一テーブル自体が削除されても1日前には戻せる」事が可能に

• b. はバックアップ処理が遅いが毎日深夜に処理を実行させる事で処理の遅さを許容

付録

Page 77: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

77Copyright © 2018 EXA CORPORATION

PITR 設定方法

ここを有効化するだけ

付録

Page 78: 2018 最新事例! l u e AWS Lambdaを使った E サーバレスの …• AWSのサーバレス環境をローカルPCのDockerコンテ ナ上で構築できるコマンドラインツール

78Copyright © 2018 EXA CORPORATION

Data Pipeline 作成方法

テンプレートがあるため、基本的な事は自動で設定される

● バックアップ対象のテーブル● バックアップ出力先のS3バケッ

ト● バックアップスケジュール

は自分で設定する必要がある

付録