サーバレスコンピューティングとは?

司会者:さて、ここからは「Getting Started with AWS Lambda & The Serverless Cloud」と題しまして、General Manager of AWS Lambda & Amazon API Gateway, Amazon Web Service, Inc.ティム・ワグナーより講演させていだきます。Please Welcome, Tim Wagner.

ティム・ワグナー氏:みなさま、本日はご参加いただきまして、ありがとうございます。私がもっともお気に入りのサーバーレスコンピューティングについてお話させていただきます。

まず、そもそもサーバーレスコンピューティングとはなにかという話、そしてAWSのポートフォリオにどうフィットしているのかをお話しします。

コンピュートに関しては、3つの考え方があります。そして、いろんな言葉があります。どういったものを抽象化するのか。まずバーチャルマシンが抽象化するのはハードウェアです。

コンテナが抽象化するのはアプリケーションです。ソフトウェアサービスと言ってもいいでしょう。

そして最後にサーバーレス。もっとも新しいものです。もっとも新しい抽象化の関数です。コードを抽象化します。コンテナ、あるいはマシンではなく、そしてこのサーバーレスというのは言語ランタイムの抽象化と考えることができます。

AWSが提供する3つのサービス

AWSは、これら3つのすべてに対して、コンピュートサービスを提供しています。バーチャルマシンのAmazon EC2、これはインフラのオファリングです。そしてAmazon ECS、コンテナのサービスです。コンテナを実行するDockerです。

そしてもっとも新しいAWS Lambdaです。これを使ってサーバーレスコンピューターをクラウドで実行することができます。インフラについて、もはや気にする必要はありません。単に実行するコードを与えるだけです。

では、これら3つのなかからどうやって選択するのでしょうか? 何がほしいか、何をしたいかによって変わってきます。

EC2が提供するのは柔軟性です。これを使うことによってローレベルのマシン、ネットワーク、ストレージをOSと一緒に構成することができます。もっともコンピュート環境の制御ができるものです。

もし既存のコンテナをDockerイメージとして実行したい場合、ECSは最適です。そしてデスクトップ上で構築し、クラウドと同じように実行できるメリットがあります。

Lambdaは、コンピュートの最適なやり方です。OSを変える必要がない。そしてAWSをサーバーとして使うことはとても簡単です。単にコードをいただければ、AWSが必要な時に実行いたします。私たちが一番大変なところを担い、みなさまはアプリケーション、ビジネスロジックだけを気にすればいいわけです。

本日のトークアジェンダ

では、本日お話しするアジェンダです。どのように新しいアプリケーションクラスを構築するか。つまりサーバーレスアプリをAWS LambdaとAPI Gateway、そしてさまざまなサーバーレスのAWSのポートフォリオを使います。

まず、Lambdaの詳細からご紹介します。そしてどうやってプログラミングするかを説明します。次にいくつかのアーキテクトのパターンを見ていきます。

いろんな会社がすでにサーバーレスを使っています。より早く新製品を市場に届け、ソリューションを構築し、クラウドのコンピュートを少なく使うというものです。

そして、ユースケース。すでに日本の企業でLambda、Gatewayをご採用いただいているいくつかの具体的な事例についてご紹介します。

次に、少しベストプラクティスについて話をします。もっとも最近、新しく発表された機能です。いろんなトリック、あるいはコツ、Lambdaを最大限に活用できる方法を紹介します。

最後にデモです。サーバーレスのアプリケーションをデプロイします。カタログ、あるいはMATシステムに展開します。アプリケーションがサーバーレスなだけでなく、デプロメントもマシンを必要としません。では、始めましょう。

AWS Lambdaがもたらす3つのメリット

なぜLambdaを使うのでしょうか? Lambdaが提供しているのは3つのメリットです。

まず、サーバーを管理する必要がありません。もはや時間とエネルギーをサーバーの設計、あるいは計画、運用、保守にかける必要はないんです。アプリケーションを実行するのに必要なインフラを考える必要はありません。

次に継続的なスケーリングです。1つのリクエストを1時間に、あるいは何十万というリクエストを毎秒行うこともできます。Lambdaは自動的にそれに合わせてスケールするようになっています。詳細を気にする必要はありません。

最後に、これらの細かい点は気にしなくていいので、使っていないキャパシティに関しては課金されません。もはやコールドサーバーはないということです。

よく聞くのが、クラウドはスーパーコンピューターのようなものだということです。確かに一理あります。しかしそれはハードウェアの部分だけです。プログラムを大量のスケールでどうやってやるんでしょう?

2通りの方法があります。分散システムでみなさまのような専門家をたくさん使うか。もしくはLambdaを使うという方法です。Lambdaであれば、ビジネスロジックを大きなスケールで、複雑なことを考えないで実行することができるのです。

そして、またインフラのスケールの課題がアプリケーションのコードとは切り離されることになります。そして、AWSが自分のAppsのチームとして動くわけです。そして、これだけ大量なスケールで常に24時間動き続けることができます。

魅力的な料金体系にも自信

いろんな確信的なテクノロジーについてご紹介します。私がとくに、Lambdaで誇りに思っているのは価格体系です。我々はコンピュートを購入する際、もっとも小さなかたまり、つまり100ミリ秒ごとに購入いただけるようにしています。

つまり、少なく、あるいはたくさんなど、例えば電気のように使いたいだけ使うことができるわけです。使いたいだけ使う。あるいは、もっとも少ないコンピュートだけを使ってあまりにも無駄にお金を使ってしまうということは気にしなくていいわけです。

さらに価格体系だけではありません。非常に大きな無料利用枠、毎月100万件のリクエストと40万ギガバイトのコンピュートが無料です。

つまり小さなチーム、開発、そしてもっとも大きなスケールのプロダクションでも40万ギガ、コンピュートが無料で提供されるということです。

AWS Lambdaの使用方法は?

では、どうやってLambdaを使うのでしょうか? いくつかのシンプルなステップがあります。最初にコードをZipファイルに入れます。そして、私たちにください。このコードはサポートされている3つの言語、Node、Java、Python、どれでもけっこうです。

そして、重要なのは自分たちのライブラリを持ってくることができることです。ネイティブのライブラリ、アセンブリコードでもすべて可能です。

次に関数を呼び出します。ほかのAWSサービスとのつなぎは私たちのほうで行います。設計のパターンについては後ほど説明します。あるいは自分で呼び出すこともできます。モバイルアプリ、クラウド、どこからでも呼び出すことができます。

さて、もうひとつ方程式の向こう側にあるのはリソースモデルです。これを非常にシンプルなスピードダイヤルと考えてください。下げてお金を節約したり、あるいは上げて高いパフォーマンスを得ることもできます。

このダイヤル制御によってすべてのリソースが管理されます。コンピュートのネットワーク待機、そしてIOの待機幅、そしてメモリ。すべてがコントロールされます。

最後に、大変シンプルに関数のセキュリティを管理しています。誰が呼び出して、誰がそれを実行できるのかということまでコントロールできます。

データを永続化、ステートレス機能

これらの関数のなかにAWS SDKのアクセス権限がデフォルトでライブラリと一緒についてきます。そして、どのようにでも構築することができます。

IDE、Eclipse、Visual Studio、コマンドラインの変数。そして、サードパーティのシステム。ツールチェーンなど好きなものを使うことができます。

プログラミングモデルのなかでもっとも重要なのは、いわゆるステートレスの機能です。ステートレスというのはすなわち長期データストレージはどこかほかのところに置かれる。コードのなかではないということです。

例えば、ユーザーデータ、セッションデータをDynamoに入れます。オブジェクトをS3、そしてローカルディスク以外のところに置きます。

次回、Lambda関数を呼び出すとき、ほかのマシンに移すかもしれないからです。スケールさせると、これらの関数のコンテナをすばやくスタートさせることができるからです。

3つのカテゴリで見るユースケース

Lambdaをどうやって使うのかというお話を少しいたしました。では、どうやってサーバーレスアプリケーションからお客様が価値を得ているのか? お話したいと思います。コストを下げ、そしてソリューションをすばやく市場に届けるというメリットがあります。

3つのカテゴリについてお話しします。最初に、データの即時処理です。スケーラブルなバックエンドを構築する。そして、サーバーレスアプリケーションエコシステムです。

今、ご覧いただいた3つ目の例が先ほどの講演で、Alexaのスキルキットであったと思います。もう1回、その仕組みを見てみましょう。そして、異なるエコシステムにつなげてみましょう。

一番主要なユースケースはデータ処理

Lambdaをローンチした時、1つ目のユースケースとして融合したのは、これが一番ポピュラーなユースケースなんですが、データ処理です。ほかのAWSサービスを介して、例えばS3、Amazon、Kinesis、DynamoDBといったようなサービスでのデータ処理です。

この仕組みは大変シンプルになっています。オブジェクトをS3に入れて、あるいはデータをDynamoDBに書き込みます。そしてそれが、コードが実行されるようにトリガーされます。

それを行うと低スケールの時には低スケールでコードが実行されますが、膨大なスケールで処理する場合にはコードは巨大なスケールで実行されます。

なにがいいかと言うと、それを心配する必要がないということです。例えばS3バゲットのようなものを作って、それが自動的にコンテンツを圧縮します。

ビデオファイルなどをトランスレートしたり、分析をしたりすることができます。あるいはS3に入ってくるドキュメントを使い、すぐにインデックスを作る。

こういったことをすごく簡単に立ち上げたり、サーバーを維持したり、あるいはキャパシティをプランニングしたりすることなくできるようになっています。

スケーラブルなバックエンドを実現

それでは2つ目のカテゴリについてお話しします。スケーラブルなバックエンドについてです。これは2種類のアプリケーションで使われます。

モバイルアプリというのはAWSのMobile SDKをクライアント側で使っています。これが携帯端末やタブレット上で実行されています。あるいは、IoTデバイスというのがもう1つの種類です。

IoT デバイスは、MQTTのプロトコルを使っています。それからIoTサーバーに送られて、そしてかわりにLambdaに呼びかけをします。

コンピュート部分につきましては、Lambda関数をアップロードします。これはイベントハンドラとまったく同じように見えます。そして、典型的にはなにかしらのデータティアーがあります。

例えばインベントリデータ、あるいはカタログデータをDaynamoDB、またはSQLデータベースに格納します。そして、VPCを介してアクセスをします。これからはどちらも一般的なパターンになっています。

API Gatewayでできること

次のユースケースをご覧頂くためにはもう1つの材料を付け加える必要があります。それがAPI Gatewayです。Gatewayを使うことによってAPIのホスティングをすることができます。

これをサーバーレスなかたちでできます。APIに対してGatewayというのは、Lambdaです。シンプルな完全に管理されたかたちでクラウド上でのホスティングができるようになります。

そして、API Gatewayが、スケーリングや、スロットリングやAPIの認証などめんどくさいことはすべてこのGateway側でやってくれます。そして、APIのなかには当のRESTfulエンドポイントになにをさせるのかということを指定します。

HTTPのエンドポイントを呼んだり、あるいはLambdaバケットを呼んだりすることができます。この2つのサービスというのは連携しているわけです。そうすることで完全なHTTPのサーバーレスソリューションを実現しています。これがこのようになっています。

例えばサーバーレスなWebアプリを作りたいとします。バックエンドは、前の例とほとんど同じです。データティアーがあります。これがDaynamoみたいなものです。

Lambda関数がデータを読み込む。そしてそれを変革できる。そして、そもそも書くことができるわけですが、そこにもう1つの材料であるAPI Gatewayを追加することでHTTPのリクエストに対応します。

公開することもできますし、APIキーのオーソライザーなども使うことができます。これがコンテンツのダイナミックな顔です。

静的な側はもっと簡単です。S3はすでに静的なWebサイトのサポートをしていますので、それを単純に使っていいわけです。クラウドフロントのオプションで使って、メディアキャッシングをします。

そうすることで完全なサーバーレスWebアプリが完成します。この例についてはブログでも記載されています。そして、さまざまな書籍、ほかのディスカッションでもカバーされています。

Alexaアプリ+slackでサーバレスボットが簡単に

3つ目のユースケースとしてご紹介したいのが、前のセッションでお話ししたものです。Alexaアプリの事例になります。ここでご覧いただいているのは、さらに1ステップ踏み込んだものです。2つのエコシステムを使っています。

AlexaアプリでLambdaを使い、スキルを導入しています。そしてさらにSlackと統合しています。そうすることで、コミュニケーションができるようになっています。

なにをしたかというと、コードを書くことでAlexaは音声を聞いて、それをテキストに変換します。そして、slackチャネルにポスティングします。さらにslackチャネルから読んで、言葉で返してきます。

コードを数ページ書くだけで、1時間ずつくらい使えば、この2つのエキサイティングなエコシステムを合わせることができました。

これが、Lambdaがエキサイティングな理由の1つです。というのも、一番難しいところはやる必要がなかったわけです。フリートを実行しようと思ったら、本当に何日間もセッティングに時間が必要だったと思います。ですけれど、これまで開発に数週間かかっていたものを数時間に削減することができました。

日本企業での導入事例

いくつかアーキテクチャのパターンについてご紹介しましたが、日本のお客様がいかにサーバーレスアーティキャクチャから価値を得ているのかということを紹介していきます。

キヤノンは、コンシューマ、BtoB、デジタルイメージへのソリューションを提供しているリーダーです。プリンティングサービスについては、イノべーティブになっています。モバイルデバイスからクラウドに文章を送れば印刷ができるようになっています。

キヤノンはマイクロサービスのアーキテクチャを使っています。先ほどご紹介いただいた、API GatewayとLambdaを使うことによって最新のプリンティングソリューションを設計しています。

岡三オンライン証券は、バーチャルトレーディングサービスをユーザーのトレーディングやマーケットデータのアクセスのために提供しています。それを、たくさんの実際のトレーディングデータで活用しています。

API GatewayとLambdaを使って、受注管理システムを作っています。これがアーティキャクチャの中心部分に存在しています。

そして、これのなにが素晴らしいかと言いますと、彼らは10分の1の時間でデリバリーでき、そしてこれまでのシステムの7分の1のコストで実行することができました。

リクルートジョブズのタウンワークですが、エンドユーザーが次の仕事を見つけるためのメディアです。さまざまなモバイルメディアを活用しています。このモバイルデバイスを通じて、ユーザーは仕事を検索することができます。

業界やロケーションといったような条件をもとに検索をかけることができます。タウンワークは最先端のマシンラーニングのアルゴリズムを使い、そのエンドユーザーにとって最適なレコメンデーションをしていきます。API GatewayとLambdaを使い、その点線を結んでいます。

エンドユーザーのモバイルデバイスのテクノロジーと、バックエンドのシステムに組み合わせているトレーニングデータ抽出のバックエンドのシステムとつながっています。そして、モバイルデバイスからの膨大な量の条件データというものをクラウドに入力する役割を担っています。

Lambdaでさまざまなメリットを享受しているお客様を見て大変うれしく思っておりますし、まだまだたくさんのアイデアがあると思っています。