3つの新機能をピックアップして紹介します

ティム・ワグナー氏:サーバーレスアプリケーションの開発を開始されている方々に対して、最近導入した新機能、そしてみなさんの仕事に活用していただけるベストプラクティスを紹介していきたいと思います。

re:Invent以降チームはスピーディーにさまざまな新機能を導入してきました。その中から3つほどご紹介したいと思います。

まずNode.jsを4.3.2のバージョンにアップグレードしました。これは継続的なNodeに対してのコミットメントを示しています。そして、この言語の重要性を示しています。

Lambdaで投入した最初の言語で、急成長を遂げている大変エキサイティングな言語です。Nodeのコミュニティで常にキープアップし、Lambdaの中で使われるバージョンを展開したいと思っています。

ステージ変数というのはAPI Gatewayの機能ですけれど、これを使うことによってさまざまなバージョンを導入し、ステージングすることができます。APIのバージョンを導入する時に活用いただけます。

そしてまたAPI Gatewayの中で、最近Swaggerのサポートを導入しました。Swaggerのファン、あるいはSwaggerのハブを使ってAPIを公開したり、あるいはチームとしてAPI定義についてコラボレーションする時にはこのケイパビリティを使うことができます。API Gatewayでさらに簡単に使えるようになりました。

スケジュール機能入門ガイド

それでは、こういった新しい機能がどう使えるのかということについて詳しくご紹介していきます。

スケジュールを使うことによって、Lambda関数をいつでも実行できるようになります。例えば、未来の時点で実行できますし、継続的にくり返し実行することもできます。あるいはそれ以上のこともできるようになっています。

例えば、もし関数をウォーム状態に保ちたい場合、コールドスタートのレイテンシーを避けたいということであればスケジュール化することができます。

そして、大変大きな無料利用枠がありますので、その関数をほぼ無料で使える期間があります。そしてまた関数を使ってキューのポーリングなどもできるようになっています。

SQSとか、ラピートMQを使っていて、そしてそこからデータを抽出したいといったことであればLambdaをスケジュールと組み合わせることで、そのデータをキューから抽出することができます。

そして、それを必要に応じて高速、あるいは低速でデータの生成に応じて使うことができます。

ほかにもいろいろできます。例えば、1つの関数をほかから呼び出すということ。タイマーがオフになったら、簡単にファンアートできるということです。いろんな興味深いアイデア、スケジュールの設計パターンがあります。

関数のバージョニングとは?

もう1つ、私どもが最近発表したバージョニングという機能があります。バージョニングというのは大変シンプルです。

複数の関数のコピーが時間と共に変化します。それぞれのバージョンは個々にイミュータブルです。つまり、わざわざその下でどういった変更、あるいはクライアントの下からどのような変更があるかは気にする必要がありません。

もし、その一部をミュートしたい場合はどうすればよいのでしょう? あるいは、設計をコードと切り離したい場合はどうすればいいのでしょうか? 簡単なやり方としては、2つの関数を持つことです。

1つは構成データを代表し、もう1つは実際のコードを表します。そして1つをもう1つから呼び出して、必要なコンフィグを入手するということです。そのコンフィグレーションデータをS3にストアする、あるいはDynamoにストアし、そして必要な時に呼び出すこともできます。

そしてまたバージョニングに関して、もう1つエイリアスという機能もあります。エイリアスというのはシンボリックなリンクです。例えば、ロールバックすることができます。Lambda関数のロールバックです。

ある1つのファンクションをリリースして前のバージョンに戻したいという時、すばやくエイリアスのポイントを変えることができます。前のバージョンにポイントを切り替えることができます。

このLambdaのすばらしいところは、我々が大変な作業はすべて行うという点です。例えば、全フリートでロールバックをします。後はみなさまがエイリアスを使って、すべてのコードなどを機械で切り替えるということをします。つまりサーバーレスによって、みなさんの仕事が簡単になるということです。

それに関連して、Blue/Greenデブロイメントはどのように行うのか、という質問があります。もちろんコードをマシンをのせることを心配する必要はありません。それは私たちが行います。

ただ、トラフィックのコードを変更することによってシェイプしたいという場合、シェイピングの方法としてはトラフィックシェイピングの関数を使います。Lambda関数です。

あるリクエストに対して、古いバージョンを呼び出すのか、新しいバージョンを呼び出すのか決めます。時間が経てば、その比率を変えることもできます。

どのバージョンがリクエストストリームの主流となるのか、リクエストがユーザーから入ってくる時に調整できます。いろんな柔軟性があります。追加の関数を使うことによって、これらのすべての関数が自動的にデプロイされます。

AWS LambdaのVPCの基礎

では次に、私どものもっとも大きな、パワフルな機能についてご紹介します。多少そこに複雑さもあります。それがVPCです。最初にいくつか基本的なところをご紹介します。

すべてのLambda関数はVPC内で実行されます。常にです。したがって、わざわざセキュリティを有効にする必要はありません。常にセキュアです。

しかし、場合によってはLambda関数を自分たちのVPCの中で実行したいということもあるでしょう。

そういう時にはリレーショナルデータベースにアクセスをさせたり、あるいはElasticCache、プライベートのエンドポイント、あるいはそのほかのVPCの中のリソースを使えばいいわけです。

それをオンにすると、すべてのVPCの機能にアクセスが与えられます。ピアリング、プライベートS3のエンドポイント、すべてLambda関数からアクセス可能になります。

1つ重要なのは、もしほかになにもしなければLambda関数はインターネットにアクセスできません。もしかしたら、プライベートにやりたいかもしれないのでそれを希望しているかもしれません。

しかし、インターネットにアクセスをしたい時にはNATサービス、あるいは自分のNATインスタンスをVPCの中に入れることになります。重要なのは、関数をどういうふうに挙動させたいのかということです。

VPCのベストプラクティス

ほかにもいくつかVPCのベストプラクティスがあります。まず、オプションだと申しました。必要でなければ有効にしないことをお薦めします。

ENIは、LambdaのVPC機能によって使われています。これはENIクォーターによってカウントします。つまり、リミットがじゅうぶんに高い上限に設定され、そしてLambda関数の中でコンカンレンシーを有効にしてください。

これらのENIを私たちのほうで管理します。Lambda関数に関連しているのであれば、削除、あるいはリネームする必要はありません。私たちがきれいにします。例え、関数を削除しても、あるいは使わなくなったとしても数時間でできます。

じゅうぶんなIPがあることを確認してください。そして最後に少なくとも1つのサブネットをそれぞれのアベイラビリティゾーンで指定してください。これは要件ではありませんが、Lambdaはこれによって耐障害性が高まることになります。

サーバレスマイクロサービスの作成方法

これまでLambda関数とその機能について説明してまいりましたが、次は全アプリケーションをまとめてみましょう。つまり関数をまとめ、APIを統合し、そしてイベントソースを統合するということです。

いくつかの方法があります。現在ある2つのオプションは、AWS CloudFormation。オープンソースフレームワークです。

CloudFormationをここで見たいと思います。デモでご紹介します。これはデプロイメントのテクノロジーです。これを使うことによって、さまざまなAWSのサービス、そしてリソースをデプロイすることができます。インフラストラクチャ、そしてサーバーレスが入っています。

ここでいくつかCloudFormationを使ってLambda関数をデプロイしてみましょう。APIと一緒に、そしてデータベースと一緒にデプロイしてみます。

また大量のオープンソースのフレームワークがあります。Severless.comのようなソリューションもあります。クライアントサイドのソリューションを提供しているものです。

それぞれ違う動き方をしますが、一般的にはみなさまがどのコードが一緒になるのか、どの関数、あるいはAPIのグループに属するのかを判断できます。そして、ステージ、テスト、デプロイをユニット、単位としてできるようになっています。

1つ、オープンソースフレームワークの課題は、これは純粋にクライアントサイドにあります。そして、Lambdaのところではアプリケーションの知識、あるいはどういったコレクションを表しているのかわかりません。

従って先週、発表したのが新しいオープンソースプロジェクトです。私たちがこれから作るFlourishと呼ばれるものです。

Flourishは、エコシステム、サーバーレスのアプリケーションモデルとして、Lambdaが知っているAPIを使って個々の関数だけでなく、バージョン管理をアプリケーション全体で行うことができます。APIの中に10個関数があったとしたら、それをすべてロールバックします。1つの単位としてロールバックするわけです。

オープンソースプロジェクトをGitHubのAWSラボの中で行っています。これによってほかのオープンソースのプロジェクト、あるいはほかのベンダーと全エコシステムの中でFlourishを構築することを協力して行うことができます。

マイクロサービスのデプロイメントのデモ

ここで一度スライドは止めまして、CloudFormationを使ったデモをしたいと思います。

こちらの画面にありますのが、CloudFormationコンソールです。これは一番簡単なデモです。ボタンを押せばいいだけだからです。

クリエイトスタックというのは、今、作ろうとしているアプリケーションのディスクリプションを取って、すべてのリソースをその中にデプロイしてつなげるというものです。

これはシンプルです。どのファイルを実行したいのか選択し、そのスタックが作成されるという数クリックでできるものです。これは数分実行にかかりますので、みなさまに待っていただく代わりに、これが実際に完了されたらどうなるのかというのをお見せしたいと思います。

こちらの例は数分した後、こういう状況になりますということです。全スタックが作成されました。中に何が入っているのか見てみましょう。

ここは最初に絵でスタックを表しているものです。ここで心配しなくていいものとして、例えばロールなどがあります。ただ3つの主なピースがあります。Lambda関数、これはイベントリデータを管理するものです。Dynamoテーブル、インベントリ情報をストアします。そして、API Gateway関数です。これはパブリックエンドポイントを提供します。

コードはどんなかたちをしているのか?

では、コードのかたちとしてはどういうものに見えるんでしょうか? これが我々のCloudFormationのスタッグです。これはJSONのディスプリクション、構築しているアプリケーションのディスプリクションと考えてください。

いくつかの部分をハイライトします。最初にDynamoテーブルがあります。JSONのここの部分が説明しているのは、ストレージユニットです。ここでは新しいDynamoテーブルを立て、そしてCloudFormationはテーブルを作成します。

通常、テーブルの中には何も入っていません。どのようにしてデモデータを入れるかというのを今、説明します。

次のピースはLambda関数です。先ほどパターンをご覧いただきましたが、典型的にはLambdaコンピューターティア。そしてストレージとしてはDynamo、あるいはほかにはデータベースを使います。

ですが、ここはコンピューターティアです。このCloudFormationのテンプレートの中には2つ選択肢があります。

まず、直接コードを組み込むか、小さな関数であれば組み込むか、あるいはスリーのパケットにポイントする。これは大きな関数だった場合、Javaにクラスファイルがすべて入っているような場合にはポイントします。

この3つ目の部分というのがAPIになります。ここでさまざまなAPIの定義をしています。CloudFormationでは2つやり方があります。ここで1つのやり方を見せているんですが、もう1つのやり方はSwaggerを使うということです。

APIのオープンソースのレプリゼンテーションです。Swaggerやハブなど機能と互換性があります。

コードの実装は最初から最後までサーバレス

そして、最後の部分についてですがCloudFormationを使うことによって、カスタム関数を実行することができます。スタッグが作られた後に実行することができます。

カスタム関数というのは、Lambda関数であらゆることができるようになっています。この場合、なにをするかと言いますと、この関数を使ってDynamoをいくつかサンプルデータで事前に埋めていきます。ここでなにを作っているかと言いますと、大変シンプルなアプリケーションです。

ですが、実際の問題を体現しているようなサンプルです。在庫情報を入力し、そしてそれをAPIを使って抽出して、そしてリターンします。この関数を使うことによって、このテーブルにアイテムを入れていきます。

CloudFormationのテンプレートをご覧いただいたので、この結果、何が作られるのかということをご覧いただきます。もう1回ログインします。

これがDymnamoテーブルです。このスタッグを実行しますと、自動的にセットアップされたテーブルが戻ってきます。そしてこのアイテムをご覧いただきますが、事前に先ほどのカスタム関数で入力したアイテムをご覧いただいています。

これが作成したLambda関数です。そしてこのようにコードの核にあるように、APIからリクエストがきた時にDynamoからデータが返ってきます。大変シンプルなコードです。

そして最後にこれがAPI Gatewayです。これがRESTfulエンドポイントとしてLambda関数を呼び出すところを定義しています。ここでテストします。もう1回試してみましょう。

こちらにサンプルクエリストリングを指定して、ジャケットがいくつあるか確認します。そして、テストのボタンを押していきます。そうするとカタログには99のジャケットがあるということがわかります。

これのなにがかっこいいかといいますと、すごく簡単にインベントリシステムを作ったわけです。これが1秒あたり、何万、何十万というトランザクションまで拡張することができます。

しかもインフラを立ち上げずにできたわけです。そして、クライアントマシンを立ち上げたり、あるいはJenkinsのパイプラインなどを立ち上げずに実装することができました。

コードの実装というのはすべて最初から最後までサーバーレスでした。だからこそすごく簡単で、だからこそこれだけ高速にできるわけです。

サーバレスコンピューティングのマニフェスト

サーバーレスコンピューティングのトレンドについてはワクワクしています。もっとも革新的なやり方で、お客様がアプリケーションを開発し、そしてそれをこれまで以上すばやくクラウドに実装できる方法だと考えています。

サーバーレスを実際に有効に使うためには以下のことを考える必要があります。まずアプリケーションではなく関数というのがデプロイメントとスケーリングの単位であるということです。

つまり、マシンやコンテナというのはプログラミングモデルの中では見えません。コードのことを考えるのであって、どこでそれが実行されるのかということは考えなくてよいのです。

そして永続的なストレージは外にあります。Dynammoだったり、S3だったり、インターネット上好きなところに置くところができます。ですが、ローカルなハードドライブに捉われるわけではありません。

スケーリングも自動的に行われます。そして、リクエストに応じて行われます。マシンでやるわけではありません。これは、本当にすごいことです。というのも、過少あるいは過剰なプロビジョニングをすることがないからです。

S3が渡すオブジェクトの数に応じてスケーリングするのと同じで、Lambdaは必要なコンピューティングに応じてスケーリングしていきます。そして、その結果、アイドル時間は課金されません。

コールドサーバーというもの、あるいはコールドコンテナは存在していないんです。そして、自動的に耐障害性が担保されていてコードを書く必要もありませんし、アベイラビリティゾーンを考える必要もありません。

ですが、柔軟性はたくさんあります。中で書くコードはどんなタイプでも構いません。どんなネイティブコードでも書けるようになっています。そしてメトリックとロギングは自動的に提供されています。ですので、めんどくさい手間をかける必要がありません。

本当に差別化されたビジネスのユニークな部分にだけ集中することができます。ですので、みなさんぜひこのエキサイティングなサーバーレス革命に参加をしてください。このようにスタートできます。

みなさんもサーバレス革命に参加を!

プロダクトマネージャー、ビジネスアナリストであれば、まずマーケティングのWebページをチェックしてください。この中にたくさん導入事例などが紹介されています。企業がどのようにサーバーレスソリューションを作って、そしてこのエキサイティングな新しいアプローチでどのような価値を得ているのかということをご覧ください。

開発者の方々、先ほど簡単に例をご紹介いたしましたが、本当にシンプルに、しかも短時間でできるということをご覧いただけたかと思います。

ですのでぜひ、Lambdaコンソールを開いて関数を作成して実行してください。そして、1月100万件まで無料でできますのでぜひお試しください。

そして、これでもうみなさんもLambda関数のエキスパートになりましたので、次にイベントソースを使ってHTTPエンドポイントを関数に追加してください。

これを使うことによって、サーバーレスアプリケーションを作って、AWSのほかの部分につながったり、幅広いエコシステムにつながることが、いかにパワフルかということを体感いただけるかと思います。

そして、いくつかコードを何行か書くだけで、先ほどAlexaのデモでご覧いただいたようにモバイル、音声、あるいはIoTのバックエンドを構築することができます。

そして本当に数行のコードで拡張できるようなバックエンドを作ることができます。本当に簡単にスタートすることができるんです。

そしてまたLambdaで行っていることを、ぜひフォローしてください。AWSラインナップの中でもとくに急速に変化している領域ですので、先ほどご覧いただいたように常に機能強化もしています。その内容についてはTwitterや公式ブログなどでも発表しております。

本当にご清聴いただき、ありがとうございました。ご質問があれば後ほどスピーカーゾーンでお答えしたいと思いますので、お立ち寄りください。ぜひ、サーバーレスの旅路へと旅立ってください。ありがとうございました。