Slide 1

Slide 1 text

JAWS DAYS 2024 ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a JAWS DAYS 2024 小林 賢司 サーバーレスで豊島区の緊急設備トラブルを解決する アプリを作った話

Slide 2

Slide 2 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a 自己紹介 名前:小林 賢司 所属:株式会社KURUM(くるむ)、その他 お仕事:AWSの設計、運用、技術支援、PM、農作業 好きなAWSサービス:Step Functions、CloudWatch Logs 資格: 趣味:ポケカ、Cotomo、お酒全般、春のパン祭り 生息地:カントー地方 2

Slide 3

Slide 3 text

豊島区の人口ご存知ですか? 3

Slide 4

Slide 4 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a 291,556人 ≒ 29万人 豊島区の人口? 4

Slide 5

Slide 5 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a 1. サーバーレスとは? 2. サーバーレスでどんなアプリを作ったのか? 3. サーバーレスにしてどうだった? 4. リリースしてどうだった? 5. 導入できなかったサービス 6. まとめ お話すること 5

Slide 6

Slide 6 text

1.サーバレスとは? 6

Slide 7

Slide 7 text

ちょっと待って、 その前にマネージドサービスを おさらい。 7

Slide 8

Slide 8 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a ● AWS社がサービス提供及び運用まで面倒を見てくれるサービス。 マネージドサービスとは? 8 https://aws.amazon.com/jp/blogs/news/applying-the-aws-shared-responsibility-model-to-your-gxp-solution/

Slide 9

Slide 9 text

この前提が大切! 9

Slide 10

Slide 10 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a ● サーバー管理が不要となり(サーバーは存在します)システムの運用を低減することが できる。 ● アプリケーションの実行環境を素早く準備できるので、注力したいアプリケーション開発 に集中することができる。 ● オートスケーリング、高可用性、使用量に応じた課金モデルなどの特徴があり、俊敏性 の向上とコストの最適化を実現できる。 サーバーレスとは? 10 AWSがサーバー管理、運用をしてくれる!!安心!! 使った分だけ使用料が発生するので安心!!(一部例外もあり)

Slide 11

Slide 11 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a ● コンピューティング ○ AWS Lambda、AWS Fargate ● アプリケーション統合 ○ Amazon EventBridge、AWS Step Functions、Amazon SQS、Amazon SNS、Amazon API Gateway、AWS AppSync ● データストア ○ Amazon S3、Amazon EFS、Amazon DynamoDB、Amazon RDS Proxy、Amazon Aurora Serverless、Amazon Redshift Serverless、Amazon Neptune Serverless、 Amazon OpenSearch Serverless、Amazon ElastiCache Serverless ※ただし、サーバーレスの定義として、どのサービスを含めるかは若干異なるケースもございます。 AWSのサーバーレスサービスの紹介 11 https://aws.amazon.com/jp/serverless/

Slide 12

Slide 12 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a ● 提供されている機能を活用することで開発スピードを向上できる。 ● 豊富なサーバーレスアーキテクチャが参考にできる。 ● 新規サービス開発のため、売上の見込めない段階があり、初期コストを削減したい。 従量課金モデルが相性がよい。 ● アプリの運用を実施するお客様に、IT人材が不足しているため、定期的に発生する運 用業務を減らしたい。 ● 拡張性、可用性が高く、柔軟であるため。 なぜ、サーバーレスを利用したのか? 12

Slide 13

Slide 13 text

2.サーバーレスでどんなアプリを 作ったのか? 13

Slide 14

Slide 14 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a ビル・店舗での緊急トラブル時に近くの作業員を探して、駆けつ可能な業者や作業員と マッチングできるアプリです。利用者は、トラブルを迅速に解決することができます。 ※一般の方も利用できます。 アプリの概要 14 トラブル 解決!! 近くの作業員 とマッチング

Slide 15

Slide 15 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a アプリの概要 15

Slide 16

Slide 16 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a アプリケーション構成図 16

Slide 17

Slide 17 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a 開発したシステムは大きく分けて、モバイルアプリ、管理システム、サービスWebサイトに なります。 アプリケーション構成図 17 この3つです!

Slide 18

Slide 18 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a この中で利用したサーバーレス/マネージドサービスはこんな感じです! アプリケーション構成図 18

Slide 19

Slide 19 text

ほぼ、サーバーレスとマネージド サービスです。 19

Slide 20

Slide 20 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a サーバーレスじゃないのも。。。 アプリケーション構成図 20

Slide 21

Slide 21 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a アプリケーション構成図 21 サーバーレスだけが       全てではない

Slide 22

Slide 22 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a 昨年のre:Inventでコストの話がWarner Bros.氏からありましたが、 ”LAW II.Systems that Last Align Cost to Business.”(コストをビジネスに合わせて継続的に調整するシステ ム。)で書かれている通り、 システムの耐久性は、コストがビジネスモデルにどの程度適合しているかによって決まります。 システムを設計および構築するときは、収益源と利益の手段を考慮する必要があります。 収益を上げられる次元を見つけて、アーキテクチャが収益に沿っていることを確認することが重要です。 たとえば、電子商取引では、その次元は注文数である可能性があります。 注文が増えると、インフラストラクチャと運用コストが増加します。システムが適切に設計されていれば、スケールメ リットを活用できるので、それは問題ありません。 重要なのは、インフラストラクチャのコストがビジネスに目に見える影響を与えるということです。 建築業者として、私たちは収益について考え、その知識を選択の参考にする必要があります。 なぜなら、どんな犠牲を払ってでも成長することは、破滅の道につながるからです。 サーバーレスが全てではない。 22 https://thefrugalarchitect.com/laws/systems-that-last-align-cost-to-business.html

Slide 23

Slide 23 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a ビジネスの成長度合いによって、システムアーキテクチャの特徴を理解したのであれば、 コスト効率化を図るために、NATインスタンスを選択するのもありです。 ただし、システムアーキテクチャの特徴、例えば可用性が低下、定期的なメンテナンスの 発生など、デメリットを理解されているかどうかが重要である。 サーバーレスが全てではない。 23

Slide 24

Slide 24 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a ● モバイルアプリ(Flutter) ○ 開発工数削減のため、iOS、Androidのデバイス対応のためFlutterで実装 ○ デプロイ効率化のため、CI/CDにCodeMagicで自動リリースの仕組みを構築 ○ バックエンド:API Gateway + Lambdaのサーバーレス構成 どんなの作ったの? 24

Slide 25

Slide 25 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a ● 管理画面(React/Typescript/SPA) ○ 開発工数削減のため、デザインはCMSフレームワークを利用 ○ フロント:CloudFront + S3のサーバーレス構成 ○ バックエンド:API Gateway + Lambdaのサーバーレス構成 どんなの作ったの? 25

Slide 26

Slide 26 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a ● サービスサイト(HTML/CSS) ○ フロント:CloudFront + S3のサーバーレス構成 どんなの作ったの? 26

Slide 27

Slide 27 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a ● バックエンドAPI(golang) ○ Swaggerを利用してAPIを定義 ○ Github Actionでテスト実行、Lambdaへ自動デプロイ ○ AppSyncで機密性の高いメッセージ機能を2日間で実装 どんなの作ったの? 27

Slide 28

Slide 28 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a ● コールセンター(Amazon Connect) ○ 電話で受付できる仕組みを1日で作成 ○ フリーダイヤル取得が1週間ぐらいかかった(電話番号選べなくなっていた) ○ アプリからではなく、フリーダイヤル経由で依頼を受付 ○ 自動音声案内から担当者へコール、電話履歴をメールに通知 どんなの作ったの? 28

Slide 29

Slide 29 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a ● ステータス管理(Amazon EventBridge) ○ EventBridgeのスケジュール機能で、 ■ お知らせのPush通知 ● ユーザーに行動を促すための通知(見積もり承認や入金など) ■ 案件ステータスの自動更新 ● 期限内にユーザーがアクション(見積もり承認や入金など)を実行しなかっ た場合に強制的にステータスを変更 ■ 各種マスタデータの洗い替え ● 祝日マスタなど どんなの作ったの? 29

Slide 30

Slide 30 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a ● 当初、銀行振込については、システム化しない事を考えていたが、マネーロンダリング対策 のため、お金の流れをStripe内で完結させる必要があった。 ○ Stripeを利用することで、簡単にクレジット決済から銀行振込を実装できた。 どんなの作ったの? 30

Slide 31

Slide 31 text

3.サーバーレスにして どうだった? 31

Slide 32

Slide 32 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a ● よかったこと ○ サーバーレスアーキテクチャなどを参考にすることで、開発スピードを早めることがで きた。 ○ サービススタート時の初期費用を抑えることができた。(ランニングコスト) ○ お客様の要望を迅速反映できた。 ○ ITエンジニアが不在のため、システム運用管理業務の簡素化が行えた。 ○ サーバーレス・マネージドサービスを活用することで、今まで考える必要があった実 装方法、運用方法などの検討が減り、開発に集中できた。 サーバーレスにしてどうだっだ? 32

Slide 33

Slide 33 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a ● ちょっと不満だったところ ○ 無償版のLocalStackだとDyanmoDBのデータが永続化できないため、 コンテナを落とすとデータが消える。 ○ LocalStackでSQSからのLambda起動する環境を作るのが手間だった。 ○ 使ってるサービスがサーバーレス/マネージドサービスであるがために、 上記の事柄が発生した。 結論:AWSサービスをローカルで実現するのが面倒だった。 サーバーレスにしてどうだっだ? 33

Slide 34

Slide 34 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a ● アプリケーションがLambdaに依存した処理になる ○ 解決策:いつでもLambdaを切り離せるように作っておくとよい(ロジックは切り離し てテストしやすいようにする。) ○ 解決策:ECS or EKSなどへの乗せ替えをしやすいようにしておく。 ● Lambdaは、急激な負荷に耐えづらい ○ 解決策:Provisioned ConcurrencyやApplication Auto Scalingの設定、 ECSへの移行 ● サーバーレスは金額が高くなりがち ○ 解決策:EC2、RDS、ECS on EC2の方が安くなる。 サーバーレスの課題 34

Slide 35

Slide 35 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a ● Lambdaは定期的にランタイム更新が必要 ○ 解決策:なし ● サーバーレスの場合、ローカル開発がしづらい ○ 解決策:Localstackやサービスのモック用コンテナの導入を検討 ○ 解決策:無償版は制限があるので、有償版のLocalstackを利用する。 ● Lambdaのタイムアウトの原因調査が難しい。 ○ 解決策:Lambda側でのエラーハンドリング、X-Rayの利用 ● Lambdaは、15分を超える処理には利用できない。 ○ 解決策:ECS Farage、AWS Batch等を利用する。 サーバーレスの課題 35

Slide 36

Slide 36 text

4.リリースしてどうだった? 36

Slide 37

Slide 37 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a コストのお話 37

Slide 38

Slide 38 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a ユーザー数とダウンロードの推移 38

Slide 39

Slide 39 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a ユーザー数とダウンロードの推移 39 ベータ版ですが、豊島区で 29万ダウンロード目指してま す。

Slide 40

Slide 40 text

5.導入できなかったサービス 40

Slide 41

Slide 41 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a ● AWS Pinpoint ○ Amplify SDKがうまくいかなかったのと、Flutterで実装、技術調査が難航 ○ Firebase Cloud Messaging(FCM)の方がナレッジが豊富だった。 ○ このあたり詳しい人教えて下さい。 ● Amazon Location Service ○ ごめんなさい、Google Maps APIの方が知見があったため。 ● TiDB(AWSのサービスじゃないけどw) ○ Aurora Serverless v3待ってます! 今回見送りしたAWSサービス 41

Slide 42

Slide 42 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a どんな体制? 42 プロジェクトリーダ/ AWSアーキテクト/テスター/その他 プロジェクトマネージャー / テックリード/バックエンドエンジニア デザイナー/Web制作 Flutterエンジニア バックエンドエンジニア フロントエンドエンジニア 開発メンバーはフルリモートで開発!!

Slide 43

Slide 43 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a どんな体制? 43 お客様との打ち合わせ風景!? ワキアイアイとやってました! 心的安全性爆上がり中 毎月の定例での進捗報告

Slide 44

Slide 44 text

6.まとめ 44

Slide 45

Slide 45 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a ● サーバーレスは、マネージドサービスに似ている部分がたくさん。 ● 新規アプリなどには、構築、運用負荷を低減し、初期コストをおさえることができるの で、サーバーレスが向いている。 ● 残念ながら従量課金ではないサーバーレスサービスがあるので、ビジネスの状態によ り、コストを優先すべきなのか、システムの可用性を優先すべきなのかを判断する。 まとめ 45

Slide 46

Slide 46 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a サーバーレスで考えること減らして、 開発をサクサク、保守をラクラクにしてビジネスにコミット! まとめ 46 Have a great serverless development!

Slide 47

Slide 47 text

ハッシュタグ:#jawsdays2024 #jawsug #jawsdays2024_a 本日はご参加いただきありがとうございました。アンケートのご記入をお願いします。 アンケートご記入のお願い 47