Slide 1

Slide 1 text

Amazon Neptune と サーバーレスから始まった ⾼速バス予約システム開発 2022.11.10 KDDIアジャイル開発センター株式会社 須⽥ ⼀也

Slide 2

Slide 2 text

1 ©2022 KDDI Agile Development Center Corporation ⾃⼰紹介 KDDIアジャイル開発センター株式会社 エキスパート 須⽥ ⼀也(すだ かずや) 主な経歴 1996 DDI⼊社(現KDDI) 1998〜 EZwebサービス⽴ち上げ auメールシステム開発担当 2016〜 auでんきアプリ開発チームリーダー(AWS×スクラム) 2018〜 IT勉強会『Tech-on』運営メンバー(現コミュニティマネージャー) 2019〜 MaaSアプリ開発チームリーダー 2021〜 Scrum Inc. Japan RSM/RPO Co-Trainer 202207〜 KDDIアジャイル開発センター株式会社兼務出向

Slide 3

Slide 3 text

2 ©2022 KDDI Agile Development Center Corporation KDDIアジャイル開発センター株式会社 2022年7⽉に事業開始 ビジネス環境の変化が加速する中、企業においてはテクノロジーを活⽤した差別化やビジネスの変⾰が求められていま す。KDDIでは2013年からKDDIのサービス開発にアジャイル開発⼿法を採⽤し、実践してきました。これまで培った アジャイル開発の経験を活かし、法⼈のお客さまのDX開発を⽀援することを⽬的に活動していきます。

Slide 4

Slide 4 text

3 ©2022 KDDI Agile Development Center Corporation お客様のニーズに合わせて様々な⽀援メニューをご提供 お客様のアジャイル開発を全⾯⽀援 CCoE⽴上げ⽀援 アジャイル教育 UXデザイン・PoC⽀援 アジャイル開発 ⽀援 アジャイルを初めて導⼊したい アイデア創出と仮説検証をしたい お客様でアジャイル開発をしたい クラウド活⽤を広めたい

Slide 5

Slide 5 text

4 ©2022 KDDI Agile Development Center Corporation 本⽇のアジェンダ

Slide 6

Slide 6 text

5 ©2022 KDDI Agile Development Center Corporation 今⽇お話しすること • au Moves サービス紹介 • au Moves ⾼速バスシステム構成 • グラフDBと Amazon Neptune の基礎知識 • Amazon Neptune 設計・実装時に押さえておきたいこと • 商⽤サービス開始後に発⽣した事象と対応

Slide 7

Slide 7 text

6 ©2022 KDDI Agile Development Center Corporation au Moves サービス紹介 au Moves ⾼速バスシステム構成

Slide 8

Slide 8 text

7 ©2022 KDDI Agile Development Center Corporation au PAY アプリで交通サービスの予約、決済が完結する「au Moves」を提供 au Moves au Moves ⾼速バス( 2021/12/22〜 ) au Moves タクシー(2022/2/1〜) ⾼速バスの予約、決済サービス • 出発地 • 到着地 • 出発⽇ 指定条件で便を検索。乗降バス停を 指定し予約、au PAY で決済。 タクシーの配⾞、決済サービス • 乗⾞地 • 降⾞地(省略化) 指定した乗⾞地にタクシーを配⾞。 降⾞時に au PAY で⾃動決済。

Slide 9

Slide 9 text

8 ©2022 KDDI Agile Development Center Corporation サーバレス+マネージドグラフDB(Amazon Neptune)で構成 Webviewでフロントエンド開発。BFFアーキテクチャを採⽤。 au Moves ⾼速バスシステム構成 VPC AWS Cloud Public subnet Internet gateway バス予約システム NAT gateway Amazon Neptune AWS Step Functions workflow Private subnet Amazon API Gateway Amazon CloudFront au PAYシステム スマートフォン (au PAYアプリ) AWS Lambda

Slide 10

Slide 10 text

9 ©2022 KDDI Agile Development Center Corporation グラフDBと Amazon Neptune の基礎知識

Slide 11

Slide 11 text

10 ©2022 KDDI Agile Development Center Corporation グラフデータベースのグラフとは、統計情報を視覚的に表現するために⽤いる図のこと ではなく、グラフ理論のグラフである。 グラフとは グラフは G=(V,E) で表され、V は頂点(Vertices)の集合、 E は頂点と頂点をつなぐエッジ(edges)を指す。 [AWS Black Belt Online Seminar] Amazon Neptune https://www.slideshare.net/AmazonWebServicesJapan/20200714-aws-black-belt-online-seminar-amazon-neptune

Slide 12

Slide 12 text

11 ©2022 KDDI Agile Development Center Corporation 路線図では、各Nodeと、Node間の関係性を以下のように表すことができる。 グラフの例 [AWS Black Belt Online Seminar] Amazon Neptune https://www.slideshare.net/AmazonWebServicesJapan/20200714-aws-black-belt-online-seminar-amazon-neptune

Slide 13

Slide 13 text

12 ©2022 KDDI Agile Development Center Corporation ノード間の関係性を⽰すデータ構造を持つデータベースをグラフデータベースといい、 ノードとエッジそれぞれにプロパティを持つモデルをプロパティグラフモデルと呼ぶ。 グラフデータベースとは [AWS Black Belt Online Seminar] Amazon Neptune https://www.slideshare.net/AmazonWebServicesJapan/20200714-aws-black-belt-online-seminar-amazon-neptune

Slide 14

Slide 14 text

13 ©2022 KDDI Agile Development Center Corporation TinkerPop という Apacheプロジェクトで提供されている グラフトラバーサル⾔語が Gremlin。 Gremlin とは ノードとノードの繋がりを辿っていく経路のことをTraversalと呼ぶ。 Traverseは横切る、⾛査するの意。 [AWS Black Belt Online Seminar] Amazon Neptune https://www.slideshare.net/AmazonWebServicesJapan/20200714-aws-black-belt-online-seminar-amazon-neptune

Slide 15

Slide 15 text

14 ©2022 KDDI Agile Development Center Corporation AWSで提供されているフルマネージドグラフデータベース。 Amazon Neptune とは 【開催報告 & 資料公開】Amazon Neptune の歴史を紐解く – 最新の移⾏ソリューション/アップデートのご紹介 https://aws.amazon.com/jp/blogs/news/amazon-neptune-20221027/

Slide 16

Slide 16 text

15 ©2022 KDDI Agile Development Center Corporation Gremlin、openCypher(追加) SPARQL を利⽤可能。 Amazon Neptune で利⽤できるインターフェース 【開催報告 & 資料公開】Amazon Neptune の歴史を紐解く – 最新の移⾏ソリューション/アップデートのご紹介 https://aws.amazon.com/jp/blogs/news/amazon-neptune-20221027/

Slide 17

Slide 17 text

16 ©2022 KDDI Agile Development Center Corporation 2022年10⽉27⽇にGA。 Amazon Neptune Serverless登場︕︕ 【開催報告 & 資料公開】Amazon Neptune の歴史を紐解く – 最新の移⾏ソリューション/アップデートのご紹介 https://aws.amazon.com/jp/blogs/news/amazon-neptune-20221027/

Slide 18

Slide 18 text

17 ©2022 KDDI Agile Development Center Corporation Amazon Neptune 設計・実装時に押さえておきたいこと 〜 au Moves ⾼速バス 〜

Slide 19

Slide 19 text

18 ©2022 KDDI Agile Development Center Corporation 出発地の都道府県と到着地の都道府県から、 存在する便(service-ID)を含む経路を取得したい。 <クエリ> g.V() .has('name', '東京ʼ) .in('prefʼ) .in('areaʼ) .in('getOnʼ) .out('getOffʼ) .out('areaʼ) .out('prefʼ) .has('name', '⼤阪ʼ) .path <結果> path[v[pref-ID], v[area-ID], v[terminal-ID], v[service-ID], v[terminal-ID], v[area-Id], v[pref-ID]] ・ ・ ・ ⾼速バス検索グラフ構造(イメージ)

Slide 20

Slide 20 text

19 ©2022 KDDI Agile Development Center Corporation TinkerPop JavaScript Gremlin クライアント 利⽤している Gremlinクライアント • Gremlin で Neptune DBインスタンスに接続するため、TinkerPop JavaScript Gremlin クライアントを使⽤。 • 可⽤性確保のため、DBクラスタ内にプライマリDBインスタンスと異なるアベイラビリティーゾーンで リードレプリカDBインスタンスを構築。 • GremlinクライアントのDB接続のためのライブラリ(driver-remote-connection)が、1つのエンドポイントしか 設定できなそうだったので、プライマリDBインスタンス(読み書き可能)を指定。 • リードレプリカDBインスタンス(読み込み)は、プライマリDBインスタンス障害時のStandbyとしてのみ利⽤。 (本来は最⼤15のリードレプリカを設定可能で、読み込みのスケールと複数AZでのフェールオーバーが可能)

Slide 21

Slide 21 text

20 ©2022 KDDI Agile Development Center Corporation Neptune のコスト Neptune の気になるコスト • インスタンス起動中は時間単位で料⾦が発⽣ • ストレージ容量は GB/⽉単位で課⾦ • データベースに対するI/O は 100 万件のリクエストごとに課⾦ • バックアップストレージ、データ転送(in/out)にも課⾦あり • Amazon SageMaker がホストする Jupyter ノートブックを利⽤するための Neputuneノートブックインスタンス も時間単位で課⾦ • クラスタ停⽌機能があるが7⽇間で⾃動起動。 ⇒ 検証環境は夜間、週末は停⽌するように CloudWatch Events で設定。 メンテナンスウィンドウ時間帯も停⽌していた場合、パッチの⾃動適⽤がスキップされるため、⼿動で適⽤。

Slide 22

Slide 22 text

21 ©2022 KDDI Agile Development Center Corporation neptune-export Gremlinに慣れてなくても⼤丈夫 • Neptune のデータをCSVなどのテキストファイルにエキスポートするツール(GitHubで公開) • S3、または別のデータベースにデータを格納し、障害調査、データ分析に利⽤ (gremlin でクエリするよりも、SQLの⽅が慣れているため) awslabs/amazon-neptune-tools https://github.com/awslabs/amazon-neptune-tools/tree/master/neptune-export

Slide 23

Slide 23 text

22 ©2022 KDDI Agile Development Center Corporation SLA 可⽤性は⼤丈夫︖ • 可⽤性の設計⽬標値︓99.900%(サービス) <参考> Amazon Relational Database Service (Amazon RDS)︓99.990%(マルチAZデータプレーン) • インスタンス障害、メンテナンスウィンドウでのクラスタ全体に対するパッチ適⽤(後述)などで 停⽌するケースあり 付録 A: ⼀部の AWS のサービスの可⽤性設計 https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/reliability-pillar/appendix-a-designed-for-availability-for-select-aws-services.html

Slide 24

Slide 24 text

23 ©2022 KDDI Agile Development Center Corporation 実⾏計画 クエリが遅いなと思ったら • Gremlin explain で適切にクエリが⾏われているか実⾏計画を確認する(クエリは実⾏されない)。 • Gremlin profile では、実際にクエリが実⾏され、トラバーサルメトリクスなどの統計情報が出⼒される。 • Neptuneノートブックで、Amazon SageMaker がホストする Jupyter ノートブックを起動し、 “%%gremlin explain” もしくは、”%%gremlin profile” のあとに、取得したいクエリを記述。 • 特定のクエリが遅いことが疑われる場合の調査に有効。 ⇒ 現在のところは、実⾏計画の確認、クエリの最適化が必要なケースは⾒つかっていない。 [AWS Black Belt Online Seminar] Amazon Neptune https://www.slideshare.net/AmazonWebServicesJapan/20200714-aws-black-belt-online- seminar-amazon-neptune

Slide 25

Slide 25 text

24 ©2022 KDDI Agile Development Center Corporation au Moves ⾼速バス 商⽤サービス開始後に発⽣した事象と対応

Slide 26

Slide 26 text

25 ©2022 KDDI Agile Development Center Corporation 発⽣した主な事象 商⽤サービス開始後に発⽣した事象 • その1︓Lambda – Neptune 接続エラー • その2︓Lambda空振り • その3︓メンテナンスウィンドウでのパッチ適⽤

Slide 27

Slide 27 text

26 ©2022 KDDI Agile Development Center Corporation Lambda - Neptune接続エラー サービス開始後に発⽣した事象(その1) • Lambda からのWebSocketがECONNRESETで切断される事象が多発 ⇒ バックオフとリトライのロジックをLambdaハンドラーで実装することを推奨。 JavaScriptおよびPythonのGremlinドライバーは、クエリ実⾏時の⾃動再接続のロジックを実装していないため、 コード例を参考に実装する必要がある。 Use AWS Lambda functions with Amazon Neptune https://aws.amazon.com/jp/blogs/database/use-aws-lambda-functions-with-amazon-neptune/ AWS Lambda function examples for Amazon Neptune https://docs.aws.amazon.com/neptune/latest/userguide/lambda-functions-examples.html#lambda-functions-examples-javascript

Slide 28

Slide 28 text

27 ©2022 KDDI Agile Development Center Corporation Lambda 空振り サービス開始後に発⽣した事象(その2) • AWS Step Functions から⾮同期で実⾏された AWS Lambda が処理が実⾏されず、Neptune へのアクセスも ⾏われなかったように⾒える事象が発⽣(Amazon CloudWatch Logs/AWS X-Ray)。 Lambdaハンドラの実⾏⾃体がスキップされているように⾒えている。 ⇒ Lambda が⾮同期で実⾏、VPC Lambda、Lambda - Neptuneの組み合わせ、など疑ったが原因は不明。 Step Functions から Lambda を同期実⾏、Lambda からのレスポンスが設定されていない場合、リトライ。 正常時X-Ray 異常時X-Ray

Slide 29

Slide 29 text

28 ©2022 KDDI Agile Development Center Corporation メンテナンスウィンドウでのパッチ適⽤ サービス開始後に発⽣した事象(その3) • 夜間帯に突然 neptune reboot が発⽣ AWS Health Dashboard に通知されずに、バージョンのアップグレードが実⾏されていた。 ⇒ クラスターのメンテナンスウィンドウで、バージョンアップが⾃動実⾏。 パッチリリースは、常にリリース後の最も近いメンテナンスウィンドウで⾃動的に適⽤される。 • Neptune においては AWS Health Dashboard 以外でも保留中のメンテナンスアクションで メンテナンス通知が⾏われる場合がある。 ⇒ describe-pending-maintenance-actions コマンドで取得し、通知する仕組みを実装。 Neptune engine updates https://docs.aws.amazon.com/neptune/latest/userguide/engine-updates.html

Slide 30

Slide 30 text

29 ©2022 KDDI Agile Development Center Corporation 本⽇のまとめ • まずは、[AWS Black Belt Online Seminar] Amazon Neptune で、グラフ DBと Neptune の理解を深めましょう。 (Amazon Web Service ブログ︓「Amazon Neptune の歴史を紐解く – 最 新の移⾏ソリューション/アップデートのご紹介」に最新情報も) • Neptune の設計、実装時には、使⽤する⾔語とクライアントの制約を確認し た上で、可⽤性とコストも考慮しましょう。 • Lambda で Neptune を利⽤する場合、⾃動再接続の処理の実装要否を確認し ましょう。 • Neptune のメンテナンス情報は、保留中のメンテナンスアクションも確認し ましょう。

Slide 31

Slide 31 text

Be a Change Leader. アジャイルに⼒を与え 共に成⻑し続ける社会を創る