AWS TRAINING COURSE
---LESSON 10---

アプリケーション開発に集中して
ビジネスを加速させる

本連載では毎回AWSの主要なサービスを一つずつピックアップして、機能や用途、効果を中心に紹介しています。これまではインフラ領域であるAmazon EC2やAmazon VPCを中心にお伝えしてきましたが、今回はAWS上で簡単にアプリケーションコードを実行できる「AWS Lambda」を紹介します。AWS Lambdaを活用することで多くのAWSサービスと連携した柔軟なシステムを開発できます。

実行環境を構築しなくても
クラウド上でアプリが動く

講師:
アマゾン ウェブ サービス ジャパン
パートナーアライアンス統括本部
テクニカルイネーブルメント部
宇賀神みずき氏

 まず「サーバーレス」とは何かを説明しましょう。サーバーレスといっても、アプリケーションを処理するサーバーは必要です。ただしアプリケーションをクラウドで動かす際に、サーバーの管理や運用が不要になる、これがサーバーレスです。サーバーレスではサーバー本体やOS、各種ソフトウェアの調達、それらのインストール、稼働後のパッチ適用といった運用・管理など、サーバーに関わる全てをAWSに任せられる、これがサーバーレスのメリットです。今回のテーマであるAWS Lambdaも、このサーバーレスサービスの一つです。

 AWS Lambdaはサーバーレスコンピューティング分野のパイオニアとして2014年に発表されました。そして現在、AWS Lambdaは膨大な数のお客さまに利用されており、事例も数多く公開しています。また200種類を超えるAWSのサービスおよびSaaSアプリケーションと連携することもできます。

 AWS Lambdaは開発者が作ったプログラミングコードを簡単にクラウド上で実行できるサービスです。通常、アプリケーションを動かそうとするとOSをインストールしたサーバーを構築したり、サーバーにアプリケーションサーバーなどのミドルウェアをインストールしたりと、いろいろな準備が必要です。

 そうなるとアプリケーション開発者だけでシステム稼働まで準備することは難しく、どうしてもインフラ関連の知識や作業が必要となってしまいます。そこでAWS Lambdaを利用することでコードさえあればすぐにでもクラウド上でアプリケーションを開始できます。

スケール、リソースの検討不要
従量課金でコストも最適化

 開発者はアプリケーションをお気に入りのプログラミング言語、例えばNode.jsやPython、Ruby、Go、Javaなどで記述して、AWS Lambdaにアップロードするだけでアプリケーションを実行できます。

 AWS Lambdaが事前に用意しているいくつかの実行環境でプログラムを動かすこともできますし、それ以外の環境を使いたい場合はカスタムランタイムとして環境を持ち込むこともできるので、プロジェクトの内容に応じて柔軟に利用できます。

 構築が簡単になるだけではなく、AWS Lambdaはスケーリングやパフォーマンス、コスト最適化という多くのメリットがあります。それぞれ簡単に説明していきます。

スケーリング

 AWS Lambdaは呼び出されるたびに環境を用意してコードを実行します。そのため自動的にアプリケーションをスケールできます。コードは並行して実行されるので、ワークロードに合わせて1日数回のリクエストから1秒当たり数十万回のリクエストまで対応できます。開発者はアプリケーションのスケールについて考える必要はありません。

パフォーマンス

 AWS Lambdaのパフォーマンスの考え方はとてもシンプルです。コードを実行するために必要なメモリーのサイズを128MBから10,240MBの間から選択することで、コードの実行時間を最適化できます。メモリーに比例してCPUパワーとそのほかのリソースが自動で割り当てられます。

コスト最適化

 AWS Lambdaは使った分だけの従量課金なので、AWS Lambdaが実行されていない時間は料金はかかりません。このコスト効率の良さが1日に数回の呼び出しがあるようなサービスにも、膨大な数のリクエストを受け付けるサービスにもAWS Lambdaが使われている理由です。

さまざまなサービスと組み合わせて
アーキテクチャの幅を広げる

 AWS Lambdaはアプリケーションコードを実行でき、かつAWSの多くのサービスと連携できるのでユースケースはとても幅広く、多様な用途で活用いただいています。特に、Webサイトやモバイルアプリケーションからリクエストを受け付けるバックエンドのAPIとして、Amazon API Gatewayというサービスと組み合わせて利用するケースが代表的です。

 Amazon API GatewayにてHTTPのリクエストを受け取り、それをAWS Lambdaと連携することで、リクエストとして受け付けたデータをアプリケーションコードで処理することができます。

 またAmazon Simple Storage Service(Amazon S3)と組み合わせて利用するケースもよく見られます。Amazon S3にファイルをアップロードしたら、そのイベントをきっかけにAWS Lambdaが実行されるよう設定することができます。例えばAmazon S3に画像ファイルをアップロードしたら、その画像をサムネイル画像としてサイズを変更してユーザーのプロフィールページに設定するといった処理が可能です。

 ほかにもデータが記述されたファイルがアップロードされたら、そのデータの中身を調べてデータベースに保存するという使い方もできます。このようにAWS Lambdaは単体で利用するよりも、ほかのサービスと組み合わせて利用する用途が多いサービスです。

 AWS Lambdaなどのサーバーレスなサービスを組み合わせて全体のアーキテクチャを作る考え方をビルディングブロックといいます。AWS Lambdaと連携できるAWSのサービスをたくさん知り、アーキテクチャの幅を広げていくことで開発をより柔軟に、迅速にすることができることでしょう。