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~5のステップは、早くても数か月、大規模システムの場合は1年もかかってしまう場合もあります。しかし、サーバレスの場合は、1~3の工程が不要になります。場合によっては、アプリケーションのリリースは最速で数十分で行うこともできます。サーバレスを利用することで高速にアプリケーション開発が可能になるので、ビジネス環境の変化に柔軟に対応できるようになります。
リソースの集中
サーバレスではない場合は、データセンターやサーバの契約や管理、サーバの保守といった作業に、多大な人的リソースとコストがかかります。しかしサーバレスを利用することで、契約や管理に向けたコミュニケーションコストや、インフラエンジニアの人員低減が可能になります。その分、ビジネスの改善やアプリケーションの改良に人や時間、お金を集中できるようになります。
まとめ
サーバレスのサービスを利用する場合、特性を十分に理解する必要があります。しかしながら、Lambdaを代表として、サーバレスは高速かつ低価格で、アプリケーションをリリースするためのQCDを大幅に改善することができます。サーバレスを導入する際には深い実績を持ったエンジニアやベンダーに相談してみることをおすすめします。
スタイルズにおいては、サーバレスに関する事例(https://www.stylez.co.jp/case_studies-2/)や導入支援サービス(https://www.stylez.co.jp/aws/)があるため、サーバレスをご検討の方はご相談ください。