COLUMN誰でもわかる!お役立ちコラム

AWS活用支援コラム

AWSのサーバーレス紹介

AWS サーバーレスの代表選手 AWS Lambda とは?

AWSにおけるサーバレスアーキテクチャを考えるうえで一番メジャーなサービスが、AWS Lambda(ラムダ)です。
具体的にどのようなサービスなのか、どのようなユースケースがあるのか、記載していきます。

サーバレスとは

AWS Lambdaの特性

まず、LambdaはFaaS(Function as a Service:ファース)というサービスの特性をもっています。クラウドの利用形態として、IaaS(Infrastructure as a Service:イアース、アイアース)のように、インターネットを通じてサーバなどを利用する形態や、SaaS(Software as a Service:サーズ )のように、アプリケーションを利用する形態があり、FaaSもその1種であると考えて問題ありません。FaaSは、インターネットを通じて、プログラミングで作成した処理を定義・実行するクラウドの利用形態です。

AWS の「EC2」と「Lambda」の違い

EC2(Elastic Compute Cloud)は、AWS上に仮想サーバを構築できるサービスで、IaaSに分類されるサービスです。したがって、EC2上でアプリケーションを開発することと、Lambdaでアプリケーションを開発することとの違いは以下のようになります。
・EC2はOSがインストールされた直後の状態で提供されるため、ミドルウェアやパッケージのインストールが必要
・サーバ内のデータのバックアップやログのローテーションなど、運用設計や構築作業が必要
・脆弱性の管理がOSやミドルウェアに対しても必要になり、セキュリティ上の考慮点が増える

AWS Lambda の料金方式

Lambdaは次の項目に関して料金がかかります。

  • Lambda関数のリクエスト数(実行回数)
  • Lambda関数のメモリに応じた実行時間

まず、リクエスト数に関しては、毎月、最初の100万リクエストまで無料、次の100万リクエスト(実行)あたり0.2ドルとなっています。メモリに応じた実行時間では、メモリ1GBあたり、1秒間に0.00001667ドル請求されます。Lambdaに割り当てられるメモリは128MB~1GBとなっており、128MBのLambdaを1秒間実行した場合は、
128MB/1GB * 0.00001667ドル = 約0.0000000021ドル
となります。なお、メモリに応じた実行時間についても、1GBで40万秒実行した分が毎月無料枠として提供されます。
このように非常に安価に利用できる、ということがわかります。

AWS上でサーバーレスを活用してDXを実現するスタイルズのサーバーレス開発サービスはこちら→

その他のAWSサーバーレスサービス

Lambda以外にも、AWSにはAmazon API Gateway、Amazon SNS、Amazon SQS、AWS Step Functionsなどのサーバーレスサービスがあります。それぞれどのようなサービスなのか、特性やユースケースについて記載していきます。

Amazon API Gateway

Amazon API Gatewayとは、APIの管理や実行を容易にするサービスです。APIとは、アプリケーションなどの一部機能を公開することにより、他のアプリケーションと機能を共有できるようにする仕組みです。APIの作成だけでなく、管理、認証と認可、監視、バージョン管理といった運用に必要な機能もそろっているため、開発が簡略化できます。
したがってユースケースとしては、

  • APIを外部に公開したい
  • 既存のAPIをAWSに移行したい

といった場合に利用すると良いでしょう。

Amazon SNS

Amazon SNS(Simple Notification Service)はサーバレスで通知を可能にするサービスです。ユーザやアプリケーションの何らかのアクションをトリガーに、Lambdaの起動やメッセージ通知、SMS(ショートメッセージサービス/ショートメール)などによるモバイル通知が行えます。

メッセージ自体の容量については制限があったり、決まった時間に通知するといったスケジューリングの機能がなかったり、という制限はありますが、通知件数が多い場合も対応可能といった、スケーラビリティに優れているのが特徴です。
したがってユースケースとしては、

  • 大量にメッセージ通知を行いたい
  • なんらかのアクションをLambdaなどのほかのサービスの実行につなげたい

といった場合に利用すると良いでしょう

Amazon SQS

Amazon SQS(Simple Queue Service)とは、サーバレスのメッセージキューイングサービスです。「メッセージキューイング」とは、システム間でデータをやり取りする際に、一時的に溜め込む仕組みのことです。システムAとシステムBがデータ連携を行う際に、一時的に溜め込む場所を作っておかずに直接やり取りするケースを想定してみます。システムAからシステムBにデータを送ると、システムA側はシステムBがエラーなくデータを受信できたか確認を行う「待ち」が発生してしまい、システムAの稼働に影響してしまいます。結果として、システムAにおいて障害が起きやすくなる、といったことがあります。Amazon SQSを利用しておくと、システムAはシステムB側の処理を待つことなく稼働し続けることができるので、システムの安定稼働に貢献します。
したがってユースケースとしては、

  • アプリケーションに処理時間が長い処理が考えられる場合
  • 大量のデータ件数を処理する場合

などに利用すると良いでしょう

AWS Step Functions

Step functionsとは、ワークフローを設定して各サービスの実行をつなげるサービスのことです。例えばLambda関数から別のLambda関数を実行したい場合、コード上で次に呼び出すLambda関数を指定したり、別のLambda関数を呼び出すSNSを利用したり、呼び出しエラーのハンドリング処理をコード上に定義したり、といった対応が必要でした。しかしながら、Step functionsを利用するとこれらの対応を行うことなくLambda関数を実行する順番を定義し、実行することができます。
したがってユースケースとしては、

  • 順序性があるバッチ処理をサーバレスに行いたい場合
  • 複雑な処理プロセスを整理したい場合

などに利用すると良いでしょう。

AWS上でサーバーレスを活用してDXを実現するスタイルズのサーバーレス開発サービスはこちら→

サーバーレスの制約

AWS Lambda、Amazon SQSといったサービスは、少なからず何らかの機能制限がある場合があります。
たとえば、AWS Lambdaは、15分以上の時間がかかる処理は行えないことになっていますし、Amazon SQSはFIFO(First in First Out)を保証する場合は1秒あたり300件のメッセージといった制限が加えられます。このように、サーバレスで使うサービスにおいては、制約がある場合があるので、事前にサービスについて詳しく知っておく必要があります。

サーバーレスの開発は楽?

サーバレス開発は楽なのでしょうか。実は、楽になる部分と、楽にならない部分が存在します。サーバレスサービスを利用すると、OSやミドルウェアの設計や開発が不要になるため、インフラ部分を設計する必要がありません。また、サーバレスの特徴として、アプリケーションのコードのみを考えればいいため、運用設計や、実際の運用フェーズにおける負荷も軽減できます。

このように、インフラに関する設計や運用工程が大幅に軽減できる、という観点では非常に開発が楽になります。一方で、LambdaやSNS、SQSといった各種サービスの使い方や広範なユースケースを勉強する必要があるため、学習コストとしては高くなってしまいます。また、LambdaやSNS、SQSなどの処理の追跡や、セキュリティ権限の設定といった作業についても、非常に細かい設定ができる分エラーの特定などに時間がかかってしまう場合があります。このような観点だと、楽でないと考えることができます。

サーバーレスで何が変わるのか

サーバレスでアプリケーションを開発することで、ビジネスにどのような変化が起きるのでしょうか。

ビジネス環境の変化に対応

アプリケーションの開発は一般的に以下の1~5のステップを踏んでいくことになります。

  1.  サーバを配置するデータセンターを契約する。
  2.  サーバを購入し、データセンターへラッキング、初期設定を行う。
  3.  サーバに必要なミドルウェア、ソフトウェアをインストールする。
  4.  サーバにアプリケーションをデプロイする。
  5.  テストを行い、リリースをおこなう。

一般的に、上記の1~5のステップは、早くても数か月、大規模システムの場合は1年もかかってしまう場合もあります。しかし、サーバレスの場合は、1~3の工程が不要になります。場合によっては、アプリケーションのリリースは最速で数十分で行うこともできます。サーバレスを利用することで高速にアプリケーション開発が可能になるので、ビジネス環境の変化に柔軟に対応できるようになります。

リソースの集中

サーバレスではない場合は、データセンターやサーバの契約や管理、サーバの保守といった作業に、多大な人的リソースとコストがかかります。しかしサーバレスを利用することで、契約や管理に向けたコミュニケーションコストや、インフラエンジニアの人員低減が可能になります。その分、ビジネスの改善やアプリケーションの改良に人や時間、お金を集中できるようになります。

まとめ

サーバレスのサービスを利用する場合、特性を十分に理解する必要があります。しかしながら、Lambdaを代表として、サーバレスは高速かつ低価格で、アプリケーションをリリースするためのQCDを大幅に改善することができます。サーバレスを導入する際には深い実績を持ったエンジニアやベンダーに相談してみることをおすすめします。
スタイルズにおいては、サーバレスに関する事例(https://www.stylez.co.jp/case_studies-2/)や導入支援サービス(https://www.stylez.co.jp/aws/)があるため、サーバレスをご検討の方はご相談ください。