LoginSignup
4
2

More than 5 years have passed since last update.

APIGateway Lambda DynamoDBでサーバーレスのWebアプリを作ってみた感想

Posted at

はじめに

ある現場で
リーダー「簡単なWebアプリだからAWSにちゃちゃっと移行しといて」
私「わかりました。PHPとMySQLで作られているようなのでEC2とRDS使いますね」
リーダー「ダメ。APIGatewayとLambda使ってサーバーレスにして。あとDBはDynamoDB」
とよくわからないことを言われました。

APIGatewayもLambdaもDynamoDBもサーバーレスもよく知らない状態から
なんとか本番リリースできたので、感想をまとめておきます。
(2016年時点での話になります。)

環境について

移行前 移行後
環境 オンプレミス AWS
言語(サービス) PHP APIGateway, Lambda
DB MySQL DynamoDB

APIGatewayについて

  • Lambdaにデータが渡らない等の問題が発生した場合、原因究明が大変。ログは出力されるけどわかりにくい。特に本番では大量にログ出力されるため、探すだけでも大変。
  • 当時はバグらしきものが結構あった。(Mapping Templatesにミスがあったり、設定更新が反映されてなかったり。でも数日で修正されてた。)
  • APIGatewayのキャッシュが便利。というかアクセスが多い場合は必須。
  • APIGateway設定のバックアップ、リストアが完全にできなかった。

Lambda(Node.js)について

  • Lambda単体であればローカル環境でも簡単にデバッグ可能。
  • APIGatewayと組み合わせて使用する場合は、ローカル環境ではAPIGatewayのモックが必要。 当時は良いフレームワークやライブラリがなかったためモックも自作した。
  • 初回起動に時間がかかる。Lambdaだけタイマーで定期的に動かしてみたけど、APIGatewayを通して呼び出すとやっぱり初回は時間がかかってしまう。
  • ひとつのLambdaをどれくらいの規模(ひとつのリクエスト、ひとつの機能、ひとつのアプリ等)にすべきか難しい。
  • Webアプリとして考えるとバージョン管理が大変。Lambda単位でバージョンをつけるため。

DynamoDBについて

  • 一般的なNoSQLの特徴。(RDBとは異なるテーブル設計が必要。テーブル結合できない。パーティションキーが重要等。)
  • 空文字が利用できない。
  • ローカル環境でも使用できるので開発中は便利。
  • データ取得時の容量制限(1MB)があるので、大量に取得したい場合は複数回呼び出す必要がある。
  • アクセスが多いとお金が結構かかる。

その他

  • アクセス数によっては、サーバーレスよりEC2とRDSを使用したほうが、かなり安い。
  • テスト環境、本番環境、リリース手順、切り戻し手順等をどう運用するか事前に しっかり考えておかないとめんどくさいことになる。
  • APIGateway経由で定期的にLambdaを呼び出しておけば、すぐにレスポンス可能だが、 スパイクアクセス時にはスケールしきれず、アクセスの取りこぼしがある。
  • APIGateway+Lambdaの組み合わせは開発やデバッグ、設定等が大変なため、大規模なシステムには今のところ向かない。
  • WebAPI(マイクロサービス)として利用するのであればAPIGateway+Lambdaはかなり良いと思う。

最後に

ほんとはもっと役立つ記事にしたかったのですが、2年前のことなので、かなり忘れてしまいました。
現時点では変わっていることもいろいろありそうなので、やっぱり記事はすぐに書かないとだめですね。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2