SlideShare une entreprise Scribd logo
1  sur  30
Serverless Days Fukuoka 2019
フルサーバレスで構築した電子書籍ストアを
1年運用してみた
Keiichi Nakayama
Vice General Manager
Cloud Partner Group
CHARA-WEB Co., Ltd.
Serverless Days Fukuoka 2019
自己紹介
• 中山 桂一 ( @k1nakayama )
• 株式会社キャラウェブ
クラウドパートナーグループ 副部長
• クラウドパートナー事業をリード
• サーバレスが大好きなのに,
DevOps関連の登壇が多め
Serverless Days Fukuoka 2019
会社概要
会社名:株式会社キャラウェブ
所在地:東京都台東区東上野4−12−1
資本金:7,161万円
主な事業内容:
コンテンツ事業
電子書籍のライセンスおよび管理,電子書籍販売
クラウドパートナー事業
AWS活用支援サービスの提供及びSI事業
Serverless Days Fukuoka 2019
コンテンツ事業
 電子書籍ライセンス管理
• 白泉社の電子書籍事業の共同事業展開
• 電子書店各社へ電子書籍のコンテンツ提供やライセンスの管理を行う
 電子書店の構築・運用
• 白泉社e-net!の構築・運用
 各種デジタルコンテンツ関連サービスの運営
• フィーチャーフォン向けにキャリア公式コンテンツとして,
ゲームコンテンツや着メロコンテンツ等を提供
Serverless Days Fukuoka 2019
白泉社e-net!
 白泉社公式電子書籍サイト
 Web / iOS / Android向けに提供
 2013年3月から提供開始
 主な特徴
• 電子コミック雑誌の先行配信
• 電子限定コミックの配信
• 電子限定特典
• 白泉社作品の熱狂的ファンが集まる電子書籍ストア
Serverless Days Fukuoka 2019
サーバレス化
 2018年10月に全面リニューアル
 同時にiOS / Androidアプリでもストア展開
 全てマネージド・サービスのみで構成したサーバレスアーキテクチャ
 23個のマイクロサービスで構成
 ステージあたり約270個のLambda Functionで構成
Serverless Days Fukuoka 2019
従来の課題
 初期構築時のPHP5.6,Symfony 1など脆弱性たっぷり
 モノリシックな構造なうえ,次々とハリボテ的な追加開発により,
機能の拡張より,むしろバグを産む感じ
 全ページサーバサイドレンダリングで,APIがゼロ。
スマホ向けアプリ化などをしたいけどAPIないしムリ!
 クラウドを活かせていない構成などにより,障害対応に追われる毎日
 社内のエンジニアは,2名(当時)
そうだ!
フルサーバレス化しよう!
Serverless Days Fukuoka 2019
アーキテクチャデザイン
Serverless Days Fukuoka 2019
マイクロサービスアーキテクチャ
機能などの区分け毎にマイクロサービス化する
マイクロサービス単位でリソースを管理
他のサービスが正常でない場合があることを考慮する
マイクロサービス単位のCI/CDパイプラインを構築
マイクロサービス間はAPIやPub/Subで連携
μS μS
μS μS
Serverless Days Fukuoka 2019
ステージ
開発用,検証用,本番用それぞれのステージを用意する
AWSアカウントをステージごとに分ける
管理用アカウントを用意
•各マイクロサービスのCI/CDパイプラインやGitリポジトリ
•アセット(画像や各種設定ファイル類,EPUB等)のデプロイ先
•スタッフ用IAMユーザを作成し,各ステージ用アカウントへはAssume Roleで
Manage Account
Dev Stg Prod
Serverless Days Fukuoka 2019
アーキテクチャ全体像
Serverless Days Fukuoka 2019
Web/MobileバックエンドAPI ①
典型的なWeb/MobileのバックエンドAPIとして使われている
マイクロサービス毎に1つのAPIを立てる
Swaggerを適切に定義しておくことが重要
Amazon DynamoDBAmazon API Gateway AWS Lambda
Serverless Days Fukuoka 2019
Web/MobileバックエンドAPI ②
Pub/Subを容易に実装することができる
複数のAPIコールを1回にまとめて行える
直接DynamoDBに読み書きが行えるため,
Lambdaの実装削減できる
AWS AppSync
Amazon DynamoDB
Amazon Elasticsearch
Service
AWS Lambda
Serverless Days Fukuoka 2019
DynamoDBトリガー
DynamoDB内のレコードの書き込みをトリガーにアクション
Kinesis Streams同様に時系列に従ってイベントが受け取れる
非同期処理を容易に実装できる
AWS Lambda
Amazon DynamoDB
Serverless Days Fukuoka 2019
SQSトリガー
キューに入ったメッセージをトリガーにLambdaを発火
リソース間を疎結合に保ちやすくできる
Lambdaの同時実行数の予約をしておかないとエライことに
Amazon Simple Queue
Service
AWS Lambda
AWS Lambda
AWS Lambda
Serverless Days Fukuoka 2019
データ解析・可視化
DynamoDBトリガーを利用しデータをS3に吐き出す
QuickSight + Athena + Guleでデータ解析し可視化する
パーティション設計などに気をつけてデータ吐き出し
Amazon Simple Storage
Service
AWS Glue Amazon Athena
Amazon QuickSight
AWS LambdaAmazon DynamoDB
Serverless Days Fukuoka 2019
通知処理
Eメールやプッシュ通知を時系列に沿って配信
シャード量の調整で配信速度を調整可能
PinpointにユーザIDを紐付けて管理することで,
ユーザID指定でPUSH通知
Amazon Simple Email Service
Amazon Pinpoint
Amazon Kinesis
Data Streams
AWS Lambda
Serverless Days Fukuoka 2019
エッジHTML生成 ・ エッジ画像リサイズ
Lambda@Edgeを活用
リクエスト毎に認証や動的なHTML生成が可能
UserAgent等に合わせた画像のリサイズ等をリアルタイムに実行
Amazon CloudFront Amazon Simple Storage
Service
AWS Lambda
Serverless Days Fukuoka 2019
サーバレス化の成果
Serverless Days Fukuoka 2019
サーバレス化の成果
1年ちょっとの間,サービスダウンを伴う障害は1件もなし!
•8.23の東京リージョン障害も無傷だった
セキュリティパッチ対応やスケーリング対応等必要なし!
マイクロサービス単位に手を入れられるので,機能改修がしやすい
iOS / Androidアプリでもストア展開ができた
アプリ展開も行ってトラフィックも急増し,3ステージに分けて運用し
ているが,コストは従来の80%程度
ページ表示等のUXが大きく改善された
エンジニアのモチベーションが向上した
Serverless Days Fukuoka 2019
失敗談
Serverless Days Fukuoka 2019
オリジンバケットをus-east-1に配置した
DRM処理関連はコストを考慮しus-east-1で行っている
処理後のファイルもus-east-1のバケットに入れていた
Lambda@Edgeにより処理されるブラウザビューアの
ページ送りが,キャッシュヒットしないと,
各ページ2秒ほど掛かりストレス
処理後の画像データをap-northeast-1のバケットに転送で改善
Serverless Days Fukuoka 2019
S3 Storage Classを変えた
リニューアル直後の11月後半,re:InventにてS3の新しいStorage
Class「Intelligent-Tiering」が発表された
Epubなど大容量のファイルをこれに変えよう!
全ファイルのS3トリガーが発生してDRM処理が再度行われ
関連処理のサービス利用料が爆発!
約100万円ほどの無駄な費用が発生した
Serverless Days Fukuoka 2019
Node.jsで全Lambda Functionを作成
フロントエンドはAngular(TypeScript)で開発していくことにした
Lambdaの開発も,同様にTypeScriptで行うことに
2018年初旬のLambdaのNode.jsの最新バージョンは6.10だった
2018年10月,ようやくリニューアルオープン!
2019年4月1日にNode.js 6.10のサポート終了がアナウンス
サポート終了に向けてNode.js 8.10にアップデート
アップデート作業中に,Node.js 10.xのサポートが発表
Serverless Days Fukuoka 2019
DynamoDBトリガーのLambdaで問題
Node.jsのアップデート対応に伴いLambdaを修正していた
全てユニットテストも通ったと思っていたら,一時的にテストをして
いない関数がちらほら。。
適切にランタイムのアップデートがされていないDynamoDBトリ
ガーのLambda Functionがあった
24時間の間イベントがリトライされ続ける
適切なモニタリングが出来ていないうえ,
気づきにくい処理部分で発生していた
修正するまで無限実行され続けLambda等のコストが
150万ほど無駄に発生!
Serverless Days Fukuoka 2019
課題
Serverless Days Fukuoka 2019
課題
DynamoDBの設計がダメダメなことに気づいたので直したい
サービスのモニタリングが最低限しか出来ていない
Nodeはライフサイクル短いなぁ
今更だけどAuth0とか使ったほうが,拡張性高かった
まだまだ,UX向上できるはず
SSR対応出来ていない
Serverless Days Fukuoka 2019
まとめ
Serverless Days Fukuoka 2019
まとめ
適切にマイクロサービス化すると,開発効率は向上する
Swagger等をしっかり作り,マイクロサービス単位で外注すると
比較的スムーズにプロジェクトを進めやすい
急いでいるときこそ,細かなユニットテストを行うべし
モニタリングをどう行うかをプロジェクトの序盤で考えるべし
リトライに対する対処など,Lambdaの基本的なことをしっかりやる
AWSサービスに固執せず,様々なSaaSなどを積極的に取り入れ
ることで,開発効率を向上させる

Contenu connexe

Tendances

Foss4G Japan 2021 シェープファイルの真の後継規格 FlatGeobufの普及啓蒙活動
Foss4G Japan 2021 シェープファイルの真の後継規格 FlatGeobufの普及啓蒙活動Foss4G Japan 2021 シェープファイルの真の後継規格 FlatGeobufの普及啓蒙活動
Foss4G Japan 2021 シェープファイルの真の後継規格 FlatGeobufの普及啓蒙活動
Kanahiro Iguchi
 

Tendances (20)

Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
 
2021 days opening
2021 days opening2021 days opening
2021 days opening
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
アジャイルジャーニー
アジャイルジャーニーアジャイルジャーニー
アジャイルジャーニー
 
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
 
僕たちがすべきことはリファクタリングなのか
僕たちがすべきことはリファクタリングなのか僕たちがすべきことはリファクタリングなのか
僕たちがすべきことはリファクタリングなのか
 
AWS Organizationsでマルチアカウントハンズオン環境を構築した話
AWS Organizationsでマルチアカウントハンズオン環境を構築した話AWS Organizationsでマルチアカウントハンズオン環境を構築した話
AWS Organizationsでマルチアカウントハンズオン環境を構築した話
 
組み込みメーカーだからこそのAWS Cognitoの使い方
組み込みメーカーだからこそのAWS Cognitoの使い方組み込みメーカーだからこそのAWS Cognitoの使い方
組み込みメーカーだからこそのAWS Cognitoの使い方
 
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
 
AWS Elemental MediaConvert で動画変換
AWS Elemental MediaConvert で動画変換AWS Elemental MediaConvert で動画変換
AWS Elemental MediaConvert で動画変換
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
Foss4G Japan 2021 シェープファイルの真の後継規格 FlatGeobufの普及啓蒙活動
Foss4G Japan 2021 シェープファイルの真の後継規格 FlatGeobufの普及啓蒙活動Foss4G Japan 2021 シェープファイルの真の後継規格 FlatGeobufの普及啓蒙活動
Foss4G Japan 2021 シェープファイルの真の後継規格 FlatGeobufの普及啓蒙活動
 
ぐるぐるDDD/Scrum - モデリングと実装のうずまきをまわそう
ぐるぐるDDD/Scrum - モデリングと実装のうずまきをまわそうぐるぐるDDD/Scrum - モデリングと実装のうずまきをまわそう
ぐるぐるDDD/Scrum - モデリングと実装のうずまきをまわそう
 
SageMakerを使った異常検知
SageMakerを使った異常検知SageMakerを使った異常検知
SageMakerを使った異常検知
 
SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築
 
JAZUG12周年 俺の Azure Cosmos DB
JAZUG12周年 俺の Azure Cosmos DBJAZUG12周年 俺の Azure Cosmos DB
JAZUG12周年 俺の Azure Cosmos DB
 
データモデリング・テクニック
データモデリング・テクニックデータモデリング・テクニック
データモデリング・テクニック
 
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
 
ドメイン駆動設計 at DDD.rb #5
ドメイン駆動設計 at DDD.rb #5ドメイン駆動設計 at DDD.rb #5
ドメイン駆動設計 at DDD.rb #5
 

Similaire à フルサーバレスで構築した電子書籍ストアを1年運用してみた

WordCrabFukui 2013 カニとWordPressとマネタイズ
WordCrabFukui 2013 カニとWordPressとマネタイズWordCrabFukui 2013 カニとWordPressとマネタイズ
WordCrabFukui 2013 カニとWordPressとマネタイズ
Hidekazu Ishikawa
 
[JAWS-UG三都物語] 網元起動隊 大坂夏の陣
[JAWS-UG三都物語] 網元起動隊 大坂夏の陣[JAWS-UG三都物語] 網元起動隊 大坂夏の陣
[JAWS-UG三都物語] 網元起動隊 大坂夏の陣
Hiromichi Koga
 

Similaire à フルサーバレスで構築した電子書籍ストアを1年運用してみた (20)

WordCrabFukui 2013 カニとWordPressとマネタイズ
WordCrabFukui 2013 カニとWordPressとマネタイズWordCrabFukui 2013 カニとWordPressとマネタイズ
WordCrabFukui 2013 カニとWordPressとマネタイズ
 
20190517 Spark+AI Summit2019最新レポート
20190517 Spark+AI Summit2019最新レポート20190517 Spark+AI Summit2019最新レポート
20190517 Spark+AI Summit2019最新レポート
 
Sparkにプルリク投げてみた
Sparkにプルリク投げてみたSparkにプルリク投げてみた
Sparkにプルリク投げてみた
 
Firebase Summit 2019 Recap
Firebase Summit 2019 RecapFirebase Summit 2019 Recap
Firebase Summit 2019 Recap
 
WordBench京都9月号
WordBench京都9月号WordBench京都9月号
WordBench京都9月号
 
[JAWS-UG三都物語] 網元起動隊 大坂夏の陣
[JAWS-UG三都物語] 網元起動隊 大坂夏の陣[JAWS-UG三都物語] 網元起動隊 大坂夏の陣
[JAWS-UG三都物語] 網元起動隊 大坂夏の陣
 
Jaws days 2019_pipeline_is_god
Jaws days 2019_pipeline_is_godJaws days 2019_pipeline_is_god
Jaws days 2019_pipeline_is_god
 
WorcCamp Kansai 2015 LT大会
WorcCamp Kansai 2015 LT大会WorcCamp Kansai 2015 LT大会
WorcCamp Kansai 2015 LT大会
 
BookHub 卒業研究中間発表
BookHub 卒業研究中間発表BookHub 卒業研究中間発表
BookHub 卒業研究中間発表
 
[大分]網元起動隊
[大分]網元起動隊[大分]網元起動隊
[大分]網元起動隊
 
[福井]網元起動隊in福井
[福井]網元起動隊in福井[福井]網元起動隊in福井
[福井]網元起動隊in福井
 
網元起動隊in熊本
網元起動隊in熊本網元起動隊in熊本
網元起動隊in熊本
 
Serverless Meetup Japan Virtual #6
Serverless Meetup Japan Virtual #6Serverless Meetup Japan Virtual #6
Serverless Meetup Japan Virtual #6
 
[大阪]Re:Invent 2014 報告会
[大阪]Re:Invent 2014 報告会[大阪]Re:Invent 2014 報告会
[大阪]Re:Invent 2014 報告会
 
【デブサミ夏A5】LINE開発におけるGitHub Enterprise導入
【デブサミ夏A5】LINE開発におけるGitHub Enterprise導入【デブサミ夏A5】LINE開発におけるGitHub Enterprise導入
【デブサミ夏A5】LINE開発におけるGitHub Enterprise導入
 
[CMSどうでしょう 札幌] 網元起動隊ハンズオン
[CMSどうでしょう 札幌] 網元起動隊ハンズオン[CMSどうでしょう 札幌] 網元起動隊ハンズオン
[CMSどうでしょう 札幌] 網元起動隊ハンズオン
 
クラウドネイティブが行なういまどきWebサービス開発
クラウドネイティブが行なういまどきWebサービス開発クラウドネイティブが行なういまどきWebサービス開発
クラウドネイティブが行なういまどきWebサービス開発
 
[青森]網元起動隊
[青森]網元起動隊[青森]網元起動隊
[青森]網元起動隊
 
[秋田]網元起動隊
[秋田]網元起動隊[秋田]網元起動隊
[秋田]網元起動隊
 
Markdownでドキュメント作成
Markdownでドキュメント作成Markdownでドキュメント作成
Markdownでドキュメント作成
 

Plus de 桂一 中山

Plus de 桂一 中山 (6)

マルチリージョン・マルチアカウント対応の柔軟な構築ツールを作ってみた
マルチリージョン・マルチアカウント対応の柔軟な構築ツールを作ってみたマルチリージョン・マルチアカウント対応の柔軟な構築ツールを作ってみた
マルチリージョン・マルチアカウント対応の柔軟な構築ツールを作ってみた
 
20181108 kashiwa chamberofcommerce
20181108 kashiwa chamberofcommerce20181108 kashiwa chamberofcommerce
20181108 kashiwa chamberofcommerce
 
サーバーレス開発の強い味方 AWS Systems Manager
サーバーレス開発の強い味方 AWS Systems Managerサーバーレス開発の強い味方 AWS Systems Manager
サーバーレス開発の強い味方 AWS Systems Manager
 
メテオフォール型開発 X サーバーレス開発
メテオフォール型開発 X サーバーレス開発メテオフォール型開発 X サーバーレス開発
メテオフォール型開発 X サーバーレス開発
 
Cloud Formation + Code シリーズで行うマルチアカウント・マルチリージョンデプロイ
Cloud Formation + Code シリーズで行うマルチアカウント・マルチリージョンデプロイCloud Formation + Code シリーズで行うマルチアカウント・マルチリージョンデプロイ
Cloud Formation + Code シリーズで行うマルチアカウント・マルチリージョンデプロイ
 
サーバレス × AWS SAM × DRにおけるTIPS
サーバレス × AWS SAM × DRにおけるTIPSサーバレス × AWS SAM × DRにおけるTIPS
サーバレス × AWS SAM × DRにおけるTIPS
 

フルサーバレスで構築した電子書籍ストアを1年運用してみた

  • 1. Serverless Days Fukuoka 2019 フルサーバレスで構築した電子書籍ストアを 1年運用してみた Keiichi Nakayama Vice General Manager Cloud Partner Group CHARA-WEB Co., Ltd.
  • 2. Serverless Days Fukuoka 2019 自己紹介 • 中山 桂一 ( @k1nakayama ) • 株式会社キャラウェブ クラウドパートナーグループ 副部長 • クラウドパートナー事業をリード • サーバレスが大好きなのに, DevOps関連の登壇が多め
  • 3. Serverless Days Fukuoka 2019 会社概要 会社名:株式会社キャラウェブ 所在地:東京都台東区東上野4−12−1 資本金:7,161万円 主な事業内容: コンテンツ事業 電子書籍のライセンスおよび管理,電子書籍販売 クラウドパートナー事業 AWS活用支援サービスの提供及びSI事業
  • 4. Serverless Days Fukuoka 2019 コンテンツ事業  電子書籍ライセンス管理 • 白泉社の電子書籍事業の共同事業展開 • 電子書店各社へ電子書籍のコンテンツ提供やライセンスの管理を行う  電子書店の構築・運用 • 白泉社e-net!の構築・運用  各種デジタルコンテンツ関連サービスの運営 • フィーチャーフォン向けにキャリア公式コンテンツとして, ゲームコンテンツや着メロコンテンツ等を提供
  • 5. Serverless Days Fukuoka 2019 白泉社e-net!  白泉社公式電子書籍サイト  Web / iOS / Android向けに提供  2013年3月から提供開始  主な特徴 • 電子コミック雑誌の先行配信 • 電子限定コミックの配信 • 電子限定特典 • 白泉社作品の熱狂的ファンが集まる電子書籍ストア
  • 6. Serverless Days Fukuoka 2019 サーバレス化  2018年10月に全面リニューアル  同時にiOS / Androidアプリでもストア展開  全てマネージド・サービスのみで構成したサーバレスアーキテクチャ  23個のマイクロサービスで構成  ステージあたり約270個のLambda Functionで構成
  • 7. Serverless Days Fukuoka 2019 従来の課題  初期構築時のPHP5.6,Symfony 1など脆弱性たっぷり  モノリシックな構造なうえ,次々とハリボテ的な追加開発により, 機能の拡張より,むしろバグを産む感じ  全ページサーバサイドレンダリングで,APIがゼロ。 スマホ向けアプリ化などをしたいけどAPIないしムリ!  クラウドを活かせていない構成などにより,障害対応に追われる毎日  社内のエンジニアは,2名(当時)
  • 9. Serverless Days Fukuoka 2019 アーキテクチャデザイン
  • 10. Serverless Days Fukuoka 2019 マイクロサービスアーキテクチャ 機能などの区分け毎にマイクロサービス化する マイクロサービス単位でリソースを管理 他のサービスが正常でない場合があることを考慮する マイクロサービス単位のCI/CDパイプラインを構築 マイクロサービス間はAPIやPub/Subで連携 μS μS μS μS
  • 11. Serverless Days Fukuoka 2019 ステージ 開発用,検証用,本番用それぞれのステージを用意する AWSアカウントをステージごとに分ける 管理用アカウントを用意 •各マイクロサービスのCI/CDパイプラインやGitリポジトリ •アセット(画像や各種設定ファイル類,EPUB等)のデプロイ先 •スタッフ用IAMユーザを作成し,各ステージ用アカウントへはAssume Roleで Manage Account Dev Stg Prod
  • 12. Serverless Days Fukuoka 2019 アーキテクチャ全体像
  • 13. Serverless Days Fukuoka 2019 Web/MobileバックエンドAPI ① 典型的なWeb/MobileのバックエンドAPIとして使われている マイクロサービス毎に1つのAPIを立てる Swaggerを適切に定義しておくことが重要 Amazon DynamoDBAmazon API Gateway AWS Lambda
  • 14. Serverless Days Fukuoka 2019 Web/MobileバックエンドAPI ② Pub/Subを容易に実装することができる 複数のAPIコールを1回にまとめて行える 直接DynamoDBに読み書きが行えるため, Lambdaの実装削減できる AWS AppSync Amazon DynamoDB Amazon Elasticsearch Service AWS Lambda
  • 15. Serverless Days Fukuoka 2019 DynamoDBトリガー DynamoDB内のレコードの書き込みをトリガーにアクション Kinesis Streams同様に時系列に従ってイベントが受け取れる 非同期処理を容易に実装できる AWS Lambda Amazon DynamoDB
  • 16. Serverless Days Fukuoka 2019 SQSトリガー キューに入ったメッセージをトリガーにLambdaを発火 リソース間を疎結合に保ちやすくできる Lambdaの同時実行数の予約をしておかないとエライことに Amazon Simple Queue Service AWS Lambda AWS Lambda AWS Lambda
  • 17. Serverless Days Fukuoka 2019 データ解析・可視化 DynamoDBトリガーを利用しデータをS3に吐き出す QuickSight + Athena + Guleでデータ解析し可視化する パーティション設計などに気をつけてデータ吐き出し Amazon Simple Storage Service AWS Glue Amazon Athena Amazon QuickSight AWS LambdaAmazon DynamoDB
  • 18. Serverless Days Fukuoka 2019 通知処理 Eメールやプッシュ通知を時系列に沿って配信 シャード量の調整で配信速度を調整可能 PinpointにユーザIDを紐付けて管理することで, ユーザID指定でPUSH通知 Amazon Simple Email Service Amazon Pinpoint Amazon Kinesis Data Streams AWS Lambda
  • 19. Serverless Days Fukuoka 2019 エッジHTML生成 ・ エッジ画像リサイズ Lambda@Edgeを活用 リクエスト毎に認証や動的なHTML生成が可能 UserAgent等に合わせた画像のリサイズ等をリアルタイムに実行 Amazon CloudFront Amazon Simple Storage Service AWS Lambda
  • 20. Serverless Days Fukuoka 2019 サーバレス化の成果
  • 21. Serverless Days Fukuoka 2019 サーバレス化の成果 1年ちょっとの間,サービスダウンを伴う障害は1件もなし! •8.23の東京リージョン障害も無傷だった セキュリティパッチ対応やスケーリング対応等必要なし! マイクロサービス単位に手を入れられるので,機能改修がしやすい iOS / Androidアプリでもストア展開ができた アプリ展開も行ってトラフィックも急増し,3ステージに分けて運用し ているが,コストは従来の80%程度 ページ表示等のUXが大きく改善された エンジニアのモチベーションが向上した
  • 22. Serverless Days Fukuoka 2019 失敗談
  • 23. Serverless Days Fukuoka 2019 オリジンバケットをus-east-1に配置した DRM処理関連はコストを考慮しus-east-1で行っている 処理後のファイルもus-east-1のバケットに入れていた Lambda@Edgeにより処理されるブラウザビューアの ページ送りが,キャッシュヒットしないと, 各ページ2秒ほど掛かりストレス 処理後の画像データをap-northeast-1のバケットに転送で改善
  • 24. Serverless Days Fukuoka 2019 S3 Storage Classを変えた リニューアル直後の11月後半,re:InventにてS3の新しいStorage Class「Intelligent-Tiering」が発表された Epubなど大容量のファイルをこれに変えよう! 全ファイルのS3トリガーが発生してDRM処理が再度行われ 関連処理のサービス利用料が爆発! 約100万円ほどの無駄な費用が発生した
  • 25. Serverless Days Fukuoka 2019 Node.jsで全Lambda Functionを作成 フロントエンドはAngular(TypeScript)で開発していくことにした Lambdaの開発も,同様にTypeScriptで行うことに 2018年初旬のLambdaのNode.jsの最新バージョンは6.10だった 2018年10月,ようやくリニューアルオープン! 2019年4月1日にNode.js 6.10のサポート終了がアナウンス サポート終了に向けてNode.js 8.10にアップデート アップデート作業中に,Node.js 10.xのサポートが発表
  • 26. Serverless Days Fukuoka 2019 DynamoDBトリガーのLambdaで問題 Node.jsのアップデート対応に伴いLambdaを修正していた 全てユニットテストも通ったと思っていたら,一時的にテストをして いない関数がちらほら。。 適切にランタイムのアップデートがされていないDynamoDBトリ ガーのLambda Functionがあった 24時間の間イベントがリトライされ続ける 適切なモニタリングが出来ていないうえ, 気づきにくい処理部分で発生していた 修正するまで無限実行され続けLambda等のコストが 150万ほど無駄に発生!
  • 27. Serverless Days Fukuoka 2019 課題
  • 28. Serverless Days Fukuoka 2019 課題 DynamoDBの設計がダメダメなことに気づいたので直したい サービスのモニタリングが最低限しか出来ていない Nodeはライフサイクル短いなぁ 今更だけどAuth0とか使ったほうが,拡張性高かった まだまだ,UX向上できるはず SSR対応出来ていない
  • 29. Serverless Days Fukuoka 2019 まとめ
  • 30. Serverless Days Fukuoka 2019 まとめ 適切にマイクロサービス化すると,開発効率は向上する Swagger等をしっかり作り,マイクロサービス単位で外注すると 比較的スムーズにプロジェクトを進めやすい 急いでいるときこそ,細かなユニットテストを行うべし モニタリングをどう行うかをプロジェクトの序盤で考えるべし リトライに対する対処など,Lambdaの基本的なことをしっかりやる AWSサービスに固執せず,様々なSaaSなどを積極的に取り入れ ることで,開発効率を向上させる