ちょっと話題の記事

SBギフト「AWS Amplify Console + CDKを用いて短納期・少人数・フルリモートで作る管理画面」 #devio_showcase

2020.11.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ゲストブロガーとして執筆させていただくことになりました。SBギフト株式会社 入倉元太です。今回は縁ありまして「Developers.IO 2020 Showcase」に登壇させていただきました。当ポストではセッションの補足について執筆させていただきます。

登壇資料

事例紹介

今回Amplify ConsoleとCDKを用いてフルサーバレスで管理画面アプリを作成したのですが、開発効率もよく、低ランニングコストで運用できています。 私たちの事例を知っていただき、皆様のサーバレス導入へのハードルが下がれば嬉しい限りです。

当日いただいた質問

当日のセッションでいただいた質問をご紹介させていただきます。多数のご質問いただきありがとうございました。これらの質問に対してこの場をお借りして返信させていただきます。

EC2などに比べて、逆にフルサーバーレスだとここが大変だったな、というポイントはありますか?

フルサーバレスにするということはFaaS/SaaSの組み合わせになりますので、採用するAWSサービスについてある程度の知識を身に着ける必要があります。またAWSサービスの更新でできるようになることも増えるので、必要に応じてアーキテクチャの見直しも必要になると思います。費用に関してですが、完全にオンデマンド(使用量にて金額が変わる)なので、毎月の請求される金額が動的になってしまいます。EC2インスタンス利用と比べ費用が変動幅が見極めづらいなと感じました。

前半で出てきた、AppSync/S3 -> Lambda -> DynamoDB構成をCDKではなくAmplifyで実施した理由などがありましたら、教えてください

今回のプロジェクトではバックエンドは全てCDKにて実装いたしました。Amplifyでバックエンドを作成しなかった理由としましては「開発速度の優先」です。今回のプロジェクトではリポジトリを2つ作成しています。フロント用とバックエンド用です。各リポジトリに対して開発者一名なので、まず競合が発生致しません。これをAmplifyのみで完結させる場合、リポジトリが1つになり少なからず競合の可能性が発生します。開発者が互いにリモートなので競合の解決のためのコミュニケーションを大きくしたくなかったため、Amplify Console(フロント)とCDK(バックエンド)が明確に分かれています。

AWSの複数のサービスを連携してして動作させているようですが、連携が多くなった際にアプリケーションやインフラのモニタリングに課題を感じています。モニタリングの勘所があれば教えてください。

モニタリングにはこちらも常に課題を感じています。今回のプロジェクトでは社内向けシステムということもあり導入していませんが弊社別プロジェクトでは以下のような取組を行っております。

  • AWS X-RayによるAWSサービス間のトレース
  • サーバレス関連のログ(APIGateway/Lambdaなど)をS3に集約してAthenaによるログの分析
  • API Gatewayとlambdaの実行/エラー回数を監視できるCloudWatchダッシュボードの作成
  • CodePipelineからビルド/デプロイの成否をAWS Chatbotを利用しSlackへ通知

1)AmplifyとCDKで依存し合うAWSリソースはありましたか?ある場合、どのように解決(自動化/手動作業)しましたか?2) 依存などでCDK <-> Amplify の行ったり来たりで開発が大変だったなどのお話が聞けると嬉しいです

今回のプロジェクトではAmplify Consoleを利用し、静的webサイトホスティングの機能のみを利用していましたので、リソースの競合は発生致しませんでした。これがAmplify CLIでバックエンドも作成していると競合が発生するかと思います。

インデックス管理は後から既存のCDKスタックに追加することができなかったのでしょうか?

はい。こちらおっしゃる通りで、現在ではDynamoDBのインデックス管理はテーブルを定義するスタックに移動させました。当初から管理画面を作る想定をしていれば最初からこんなことにならなかったなと反省しております。また今回は検索のためにインデックスを作成しましたが、これは管理画面の検索条件が少ないため実現したことです。検索する条件が増えてくるとDynamoDBではインデックスの制限がある以上、効率的な検索を実現できないことも出てきます。検索条件が多岐に渡る場合はRDSやElasticsearch Serviceなどの採用を検討してもいいかもしれません。

まとめ

  • Amplify ConsoleとCDKで生産効率良くサービスが作れる
  • フロントからバックエンド、インフラをTypescriptで統一できる
  • サーバレスでも監視は大事

本当にAmplifyとCDKは最高のツールだと思います!みなさまも是非使ってみてください!

クラスメソッドへの技術相談はこちら

今回ご紹介した事例について具体的な支援内容の説明やご質問などありましたらフォームにお問合せください。担当者から折り返しご連絡いたします。 ※個人およびフリーランスの方、弊社が競合と判断した企業様からのお申し込みはお断りをさせていただく場合がございます。あらかじめご了承ください。