BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【AWS】サーバーレスアーキテクチャのメリット&デメリット

こんにちは!
BFT名古屋支店の佐野です。

12月中に新たにAWSの利用に関する案件がいくつか舞い込もうとしているこの頃です。
そして提案に向けての打合せの中で「AWSのサーバーレスアーキテクチャのメリット・デメリットについて」をまとめる機会がありましたので、折角ですので今回の記事としてお送りしようと思います。


はじめに

そもそもサーバーレスとは何なのか?
この単語を初めて聞いた時、「サーバーが存在しないの?」と思うかもしれません。
(恥ずかしながら筆者がそれでした)
勿論サーバーレスと言っても、リソースとしてのサーバーは存在します。
では何が「レス」かというと“利用者がサーバーを管理する必要はないですよ”という意味のレス、つまり「サーバー管理レス」なのです。
サーバーレスのサービスにおいては、使用されるサーバーの構築や保守、負荷対策等々はサーバレスサービスを提供するクラウドベンダーが行いますから、サーバーレスサービスの利用者であるユーザーはサーバー自体の管理を気にすることなく、アプリケーション等の開発や展開に集中できるというわけです。
これもサーバーレスのメリットのひとつと言えますが、この他にもサーバーレスは色々なメリットを利用者に提供します。

さて、今回はAWSにおけるサーバーレスアーキテクチャを前提として話を進めていきます。
そしてAWSでのサーバーレスを担うサービスと言えば、概ね以下のものが一般的に浮かび上がると思います。

  • Lambda
  • Fargate
  • Step Functions
  • SQS
  • API Gateway
  • S3
  • DynamoDB
  • Aurora Serverless

他にもEventBridgeやSNS、AppSyncがサーバーレスのサービスとしてありますが、筆者においては以上8種が特に使われるものであると感じています。
これらサーバーレスのサービスの特徴としては「自動スケーリング」「高可用性」「従量課金モデル」というのが挙げられ、これによって従来のプロビジョニングタイプとは異なった利点を生み出しています。


サーバーレスのメリット・デメリット

では本題として、そのメリットやデメリットを紹介していきます。

サーバーレスのメリット
  • 従量課金であるため、リソースを使用した分だけ料金を払えばよい

従量課金、つまり使った分だけ料金を払う仕組みですので、使わなければ料金は発生しません。
当たり前と言えば当たり前の話ですが、AWSのEC2やRDSなどは維持しているだけで、どれだけ使おうが使っていまいが一定の料金がかかってしまう分、遊ばせているだけ無駄なコストとなっていると言えます。
もし使用している月額課金のサービスの遊休時間が長かったり遊休リソースが多いのであれば、サーバーレスに移行した方が無駄なコストを省き、料金を安くすることができます。
ただ注意点として、使用量が多ければ多いほど課金も当然に上がりますので、短期間に多く使い続ければ月額課金のサービスよりもコスト高になってしまう場合もあります。
そういった意味では、デメリットにもなりえる点です。

  • 常に最大のリソースを保持する必要がない

オンプレミスの場合は、最大限の負荷に対応できるようなリソースを常に維持しなければいけません。
しかしサーバーレスの場合は、投入された処理量に応じて並列度が動的に変化するため、オンプレミスのように高いコストを要する最大の性能を保持しなくても済みます。
高い性能のリソースを常時確保しなくてもよいという意味では、こちらもまたコストの削減に繋がります。

  • 設計・管理の必要性が少なくなる

先に挙げた「サーバー管理レス」の最もたるメリットとも言えます。
可用性、セキュリティ、性能、バックアップ、保守など、ユーザーが関与する部分が少なく、また機器の保守切れに伴うインフラ更改も不要であるため、ユーザーはアプリケーションサービス部分へ専念することができます。

サーバーレスのデメリット
  • サーバーレスサービスを提供するベンダーに依存してしまう

サーバーレスを提供するクラウドベンダー、今回の場合はAWS(Amazon)ですが、そこで開発・実装したものを他のクラウドベンダーに移行するのはとても困難となります。
移行自体に掛かるコストと、クラウドベンダー間での機能性・実装方法が異なるためです。
サーバーレスを前提として開発・実装したものをオンプレミスに移そう、という場合も同様です。
もちろん一度決めたクラウドベンダーでずっとやっていく、という覚悟があれば問題とはなりません。

  • アプリケーションのデバッグやモニタリングは難しくなる

複数のサービスが関連して動作し、かつランタイムの大部分がサービスの内部に隠蔽されているため、アプリケーションの詳細なモニタリングやデバッグが難しくなります。 AWSであればCloudWatchでLambda等のメトリクスやログを収集したり、アラートを発するといったようなモニタリングを行なうことは可能ですが、逆を言えばそれ以上のことはAWS上では難しいと言えます。

  • クラウドインフラの障害に大きく影響される

これはサーバーレスのサービスに限った話ではありませんが、クラウド上で運用しているものですので、クラウドサービス自体に障害が起きればその影響を漏れなく受けることになります。
また環境のコントロール、ないしインフラ障害時の復旧対応はすべてクラウドベンダー任せとなるので、基本的にいつ復旧するかをユーザー側は把握することができません。
(逆を言えば、インフラのトラブルが起きても何もする必要がないと言えます。何もできない、ということですが…)
AWSの場合、日本国内での障害事例では最大半日~1日、その他の多くは数時間で復旧という報告がされており、数分の停止は障害としての告知が行われないことがほとんどです。


最後に(まとめ)

サーバーレスはクラウドサービスのひとつですので、以上で紹介した他にもクラウド環境由来のメリット・デメリットがありますが、そちらは割愛させて頂きます。
紹介した通り、サーバーレスにも当然デメリットは存在しますが、筆者の主観で言えばサーバーレスはデメリットを超えたメリットを有しており、もしサーバーレスに移行することで効率化やコスト削減が行えると見込めるものについては積極的に推奨したいと考えております。
本記事は筆者の個人的見解も多く含むところではありますが、サーバーレス導入を検討するひとつの参考として頂ければ幸いです。